2017-10-23 9 views
3

私は、必要に応じてv3.7.0のプラグインを使用していますが、JDK 9.0.1を使用しています。私は2つのrequiresステートメントを追加しました。各ステートメントは、クラスパス(自動モジュール)のjarを参照しています。 jarファイルをModulepathに移動した後、module-info.javaはEclipseで正常にコンパイルされます。しかし、Mavenは私にコンパイラエラーを与えます。そのうちの1つが欠落しているということです(不思議なことに、前の1行だけではありません)。私は自動モジュール名をチェックしようとしましたが、このjarのコマンドだけでエラーが出ます。このエラーは何を意味し、適切なモジュール名を見つけることができるように修正しますか?module-info.java maven-compiler-pluginと自動モジュールでコンパイルに失敗する

以下の出力で私のユーザー名を置き換えました。問題のjarファイルはServiceLoaderを使用しないが、Java 9

computerName:Commander-java username$ jar --file=/Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --describe-module 
Unable to derive module descriptor for: /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar 
Provider class com.username.rcf.server.TestCmdChain not in module 

computerName:Commander-java username$ java -p /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --list-modules 
Error occurred during initialization of boot layer 
java.lang.module.FindException: Unable to derive module descriptor for /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar 
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class com.username.rcf.server.TestCmdChain not in module 

How to deal with java keywords in auto generated module names in Java 9?で答えがモジュール名にJavaの識別子を使用してに関連したさまざまなエラーを持ってしてコンパイルされていません。 jarの名前がrcf-1.0.jarであるため、私のモジュールの自動jar名はrcfにする必要があります。私が得ているエラーも異なっています。

+0

[Java 9の自動生成モジュール名でのJavaキーワードの処理方法](https://stackoverflow.com/questions/46501388/how-to-deal-with-java-keywords-in-自動生成モジュール名 - Java-9)... \t アーティファクト 'rcf-1.0.jar'を所有していますか? – nullpointer

+0

はい私はそれを所有しています。私はその名前にJava識別子を持っていません。それはちょうどrcfです。このエラーはServiceLoaderと関連しているようですが、エラーで説明されているクラスがServiceLoaderで使用されているインターフェイスを実装していますが、わかりません。それを理解できません。 – GabeV

+1

重複投票が取り消されました。 Yaは、実装パッケージ[モジュールには存在しません](https://stackoverflow.com/a/46881513/1746118)のようです。 – nullpointer

答えて

4

モジュールの記述を導出しながら任意 META-INF/services設定ファイルの内容は、provides 宣言にマッピングされます。

サービス用にスキャンされたパッケージは、クラスファイルを含むパッケージです。

また、個々のクラスのパッケージ名は、完全修飾名から導出されます。共有ログからcom.username.rcf.serverが提供するサービスのために予想されるパッケージ名でなければならず、これは

provides x.y.z.TestCmdChainInterface with com.username.rcf.server.TestCmdChain 

に変わるもの、あなたのモジュール内の既存のそのようなパッケージcom.username.rcf.serverがないように思えます。

関連する問題