【问题标题】:Error: Hash of java.xml (...) differs to expected hash (...) recorded in java.base错误:java.xml 的哈希 (...) 与 java.base 中记录的预期哈希 (...) 不同
【发布时间】:2020-07-09 06:18:16
【问题描述】:

创建简单的 javafx 11 “hello world”应用程序。 创建自定义 JRE 时出错。

user@user:~/Desktop/javafx/hellofx$ ./run.sh 
Error: Hash of java.xml (c043b4c28b897656e2a4d36c92ba2f5d52134bce79643236dd36295e14178be7) differs to expected hash (4e7db7fc941d9f316c4aafe02717b5809ee722be8433d283050365e7fd49331f) recorded in java.base

错误代码:

$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx #error

操作系统:ubuntu 19.10

$java --version openjdk 11.0.6 2020-01-14 OpenJDK 运行时环境 (build 11.0.6+10-post-Ubuntu-1ubuntu119.10.1) OpenJDK 64-Bit Server VM(build 11.0.6+10-post-Ubuntu-1ubuntu119.10.1,混合模式,共享)

$javac --version javac 11.0.6

user@user:~/Desktop/javafx/hellofx$ tree
.
├── mods
│   └── hellofx
│       ├── hellofx
│       │   └── HelloFX.class
│       └── module-info.class
├── run.sh
└── src
    ├── hellofx
    │   └── HelloFX.java
    └── module-info.java

5 directories, 5 files

运行.sh:

user@user:~/Desktop/javafx/hellofx$ cat run.sh 
export PATH_TO_FX=/home/sameep/javafx-sdk-11.0.2/lib
export PATH_TO_FX_MODS=/home/sameep/javafx-jmods-11.0.2
javac --module-path $PATH_TO_FX -d mods/hellofx $(find src -name "*.java")

java --module-path $PATH_TO_FX:mods -m hellofx/hellofx.HelloFX

$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx #error
#hellofx/bin/java -m hellofx/hellofx.HelloFX

模块信息.java:

user@user:~/Desktop/javafx/hellofx/src$ cat module-info.java 
module hellofx {
    requires javafx.controls;

    exports hellofx;
}

HelloFX.java:

user@user:~/Desktop/javafx/hellofx/src/hellofx$ cat HelloFX.java 
package hellofx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

Screenshot of output window

【问题讨论】:

    标签: java javafx java-11 javafx-11 jlink


    【解决方案1】:

    您可以在thisthisthis 等链接中关注。这更有可能是 JDK 构建问题并恢复到较旧的java.version,例如11.0.2 应该会解决这个问题。

    您可以同时订阅openjdk-build/issues/1214以获取更多更新。


    什么时候会发生这种情况?是什么原因造成的?

    如果为模块创建的jmod 文件在生成哈希时不一致,则可能会发生这种情况。您可以参考JMOD tool 文档,该文档详细说明了对此负责的论点之一

    --hash-modules regex-pattern
    

    确定叶子模块并记录依赖项的哈希值 基于模块图直接和间接地需要它们 匹配给定正则表达式模式的模块。 哈希被记录 在正在创建的 JMOD 存档 文件中,或者在一个 JMOD 存档或模块化文件中 由 jmod hash 命令指定的模块路径上的 JAR

    并在下一节中进一步描述

    ... 这让您可以将一个包导出到一个或多个 专门命名的模块,而不是通过合格的导出给其他人。 运行时会验证记录的模块哈希是否匹配 在运行时解决;如果不是,则运行时返回错误

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 2019-09-20
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2019-07-22
      • 2016-11-16
      • 2014-08-19
      • 1970-01-01
      相关资源
      最近更新 更多