首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: java.xml (.)的散列与预期散列不同(.)用java.base记录

错误: java.xml (.)的散列与预期散列不同(.)用java.base记录
EN

Stack Overflow用户
提问于 2020-03-28 17:14:00
回答 1查看 3.3K关注 0票数 7

创建简单的javafx 11 "hello world“应用程序。在创建自定义JRE时获取错误。

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

错误代码:

代码语言:javascript
复制
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx #error

操作系统: ubuntu 19.10

$java -版本openjdk 11.0.6 2020-01-14 OpenJDK运行时环境(build 11.0.6+10-postUbuntu119.10.1) OpenJDK 64位服务器VM (build 11.0.6+10-postUbuntu119.10.1,混合模式,共享)

$javac -- javac 11.0.6版

代码语言:javascript
复制
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

run.sh:

代码语言:javascript
复制
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

模块-info.java:

代码语言:javascript
复制
user@user:~/Desktop/javafx/hellofx/src$ cat module-info.java 
module hellofx {
    requires javafx.controls;

    exports hellofx;
}

HelloFX.java:

代码语言:javascript
复制
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();
    }

}

输出窗口截图

EN

回答 1

Stack Overflow用户

发布于 2020-03-28 18:08:29

等链接中所示。更有可能是JDK构建问题,并恢复到较旧的java.version,例如11.0.2应该修复这个问题。

同时,您可以订阅openjdk-构建/发布/1214进行进一步更新。

这会在什么时候发生,是什么导致的呢?

如果为模块创建的jmod文件在生成哈希时不一致,则可能发生这种情况。您可以参考JMOD工具文档,其中详细介绍了对此负责的参数之一。

代码语言:javascript
复制
--hash-modules regex-pattern

根据匹配给定regex模式的模块的模块图,确定叶模块并记录直接和间接需要它们的依赖项的散列。散列记录在正在创建的JMOD存档文件中,或者在JMOD散列命令指定的模块路径上的jmod存档或模块JAR中。

此外,在沉陷部分描述

..。这让我们允许通过合格的导出将包导出到一个或多个特定命名的模块,而不是其他模块。运行时验证模块的记录哈希是否与运行时解析的哈希匹配;如果没有,运行时返回错误

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60904135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档