Ошибка: Ha sh из java. xml (...) отличается от ожидаемого ha sh (...), записанного в java .base - PullRequest
3 голосов
/ 28 марта 2020

Создание простого приложения 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 (сборка 11.0.6 + 10-post-Ubuntu-1ubuntu119.10.1) Виртуальная 64-разрядная серверная виртуальная машина OpenJDK (сборка 11.0.6 + 10-post-Ubuntu-1ubuntu119.10.1, смешанный режим, совместное использование)

$ javac - версия 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

модуль -info. 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();
    }

}

Снимок экрана окна вывода

1 Ответ

0 голосов
/ 28 марта 2020

Как вы могли бы перейти по ссылкам, таким как это , это и это . Скорее всего, проблема сборки JDK и возвращение к более старому java.version, например 11.0.2, должно это исправить.

Тем временем вы можете подписаться на openjdk-build / Issues / 1214 для дальнейших обновлений.


Когда это могло произойти и чем это может быть вызвано?

Это может произойти, если файлы jmod, созданные для модуля, не созданы. последовательный в создании га sh. Вы можете обратиться к документации JMOD tool , в которой подробно описан один из аргументов, ответственных за это

--hash-modules regex-pattern

Определяет конечные модули и записывает хэши зависимостей прямо и косвенно требуя их, основываясь на графе модулей модулей, соответствующих заданному регулярному выражению. Хэши записываются в создаваемый файл архива JMOD , либо в архив * JMOD , либо в модульный JAR-файл по пути к модулю , указанному командой jmod ha sh.

и, кроме того, в отдельном разделе описывается

... Это позволяет вам разрешать экспорт пакета в один или несколько модулей с определенным именем и ни в коем другом посредством квалифицированного экспорта. Среда выполнения проверяет, соответствует ли записанный га sh модуля тому, который был разрешен во время выполнения; если нет, среда выполнения возвращает ошибку .

...