2017-03-23 282 views
5

コンポーネント詳細 - のIntelliJ IDEA 2017.1 CEを使用JDK-9-EA + 154のRuntimeException:モジュールjrt.fsパッケージjdk.internal.jimage.decompressorとモジュールjava.base

メイン() -

Set<String> set2 = Set.of("a", "b", "c"); 
set2.forEach(System.out::println); 

module-info.java

module collection { 
    requires java.base; 
} 

ログを - VMの初期の実装を超える

Error occurred during initialization of VM 
java.lang.RuntimeException: Package jdk.internal.jimage.decompressor in both module jrt.fs and module java.base 
    at jdk.internal.module.ModuleBootstrap.fail([email protected]/ModuleBootstrap.java:699) 
    at jdk.internal.module.ModuleBootstrap.boot([email protected]/ModuleBootstrap.java:329) 
    at java.lang.System.initPhase2([email protected]/System.java:1928) 

疑わしいが、私の質問は、私はモジュールjrt.fsが含まれていないということです - それはどこから絵に来ていますか?どのようにそのようなモジュールの包含/除外をデバッグするのですか?どのように私は現在の例外をさらに解決するのですか?

+1

これは本当に奇妙です、私は 'jrt.fs'について聞いたことがありません。どのJDKバージョン(ビルド番号?)を実行していますか?また、 'java --list-modules'でモジュールを探してみてください。 – Nicolai

+0

@Nicolai現在 'jdk-9-ea + 154 'を使用しています。モジュールの詳細を調べるでしょう。 'jrt.fs'が何のために使われているかについてのアイデアはありますか?知ることを助けるかもしれません。 – nullpointer

答えて

5

$ JAVA_HOME/lib/jrt-fs.jarには、JDK 8にコンパイルされた "jrt"ファイルシステムプロバイダのコピーが含まれています。 JDK 8で動作するが、JDK 9ランタイムイメージにアクセスする必要があるIDE。

例外から、このJARファイル、またはおそらく$ JAVA_HOME/libがモジュールパスに誤って挿入されているように見えます。最上位ディレクトリのmodule-info.classを含まないJARファイルは自動モジュールとして扱われるため、例外にはメッセージに「module jrt.fs」が含まれています。例外は基本的には、モジュールパスにjrt-fs.jarを置くことにより、jdk.internal.jimage.decompressorパッケージ(および他の多くのパッケージ)を含む2つのモジュールで終わったことを意味します。

2

jdk9のディレクトリからjrt-fs.jarを削除してみます。私はIntelliJ IDEAのプロジェクト構造でそれを行いました。それはうまく動作します

+0

FileSystemモジュールjrt.fs.が不足しているため、クラスローダーからリソースをロードできませんでした。公平であるために、私は問題のコードが他のJava 9環境でも動作することをまだ検証していません(これは8以下で正しい) – Ajax

関連する問題