web-dev-qa-db-ja.com

エラー:Java.xmlのハッシュ(...)は、Java.baseに記録されている期待されるハッシュ(...)と異なります

単純な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

OS:ubuntu 19.10

$ Java --version openjdk 11.0.6 2020-01-14 OpenJDK Runtime Environment(build 11.0.6 + 10-post-Ubuntu-1ubuntu119.10.1)OpenJDK 64ビットサーバー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

run.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

module-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();
    }

}

出力ウィンドウのスクリーンショット

4
sameep baraiya

thisthis および this などのリンクをたどることができます。 JDKビルドの問題である可能性が高く、以前のJava.versionに戻します。 11.0.2でこれが修正されます。

その間、さらなるアップデートのために openjdk-build/issues/1214 にサブスクライブできます。


これはいつ発生し、何が原因ですか?

これは、モジュール用に作成されたjmodファイルがハッシュの生成で一貫していない場合に発生する可能性があります。あなたはこれに責任がある引数の1つについて詳述する JMODツール ドキュメンテーションを参照することができます

--hash-modules regex-pattern

特定の正規表現パターンに一致するモジュールのモジュールグラフに基づいて、リーフモジュールを決定し、それらを直接および間接的に必要とする依存関係のハッシュを記録します。 ハッシュはJMODアーカイブに記録されます作成中のファイル、またはjmodハッシュコマンドで指定されたJMODアーカイブまたはモジュールパス上のモジュラーJAR

さらに落ち着いたセクションで説明します

...これにより、修飾されたエクスポートを通じて、パッケージを1つまたは複数の特定の名前のモジュールにエクスポートし、他のモジュールにはエクスポートできないようにすることができます。 ランタイムは、モジュールの記録されたハッシュが実行時に解決されたものと一致するかどうかを検証します。そうでない場合、ランタイムはエラーを返します

1
Naman