2017-08-07 12 views
4

私はすでにMavenプロジェクトとJava 9モジュールシステムの統合を実践しています。正常に動作しているようですが、Java 9より前にコンパイルされたmavenモジュールの下位互換性が気になりました。Java 9モジュールシステムがMavenに統合されると、自動モジュールの処理方法

JPMS(Java Platform Module System)にはAutomatic Module Conceptがあります。 JPMSでは、module-info.javaのないJarファイルはAutomatic Moduleとみなされ、他のJavaモジュールはファイル名をモジュール名として使用してこのjarファイルを使用することができます。

mavenプロジェクトとの統合の場合、JPMSの下位互換性に対する追加のサポートが必要だと思います。 最初に、基本的なjarファイルとmavenのjarファイルは同じ構造ではありません。 第二に、mavenのjarファイルの命名規則がJPMSモジュールの命名規則との互換性があるため、規則と互換性がありません。以下の例を参照してください。上記の例で

<artifactId>previous-version-module</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

、我々はすでに、以前のバージョンモジュール-0.0.1-SNAPSHOTを使用し、新しいJava 9 Mavenプロジェクトでは、このモジュールを使用します。

module new.module{ 
    requires previous-version-module-0.0.1-SNAPSHOT 
} 

ですが、コンパイルエラーまたはIDEAツールスローエラーが発生します。

私はJava 9の前にコンパイルされたmaven jarファイルをJava 9とmaven統合プロジェクトで使用する方法を知りました。 モジュール定義ルールやMavenプラグインを追加検索しましたが、解決策が見つかりません。

ありがとうございました。

+0

Mavenでどのように統合したのですか?自動モジュールを使用しないようにすることをお勧めします...もっとよくmodule-info.javaファイルを追加し、モジュールの名前を正しく指定してください.... module-info.javaでの使用方法には、バージョンは含まれていません....さらに、 「maven jarファイルは同じ構造ではない」という意味ですか?代わりにjmodファイルについて話していますか? – khmarbaise

+0

"maven jarファイルは同じ構造ではありません"とは、jarファイル(mavenでコンパイル)にMETA-INFOディレクトリが含まれていることを意味します。依存関係のために。 –

答えて

6

モジュール名が明白でない場合は、jar --file=<jarfile> --describe-moduleを使用して派生名を確認できます。または、--list-modulesオプション(java -p <jarfile> --list-modules)を使用してください。

モジュール名が分かったら、requires <module>を使用するとうまくいくはずです。 maven-compiler-pluginは、ソースツリーにmodule-info.javaを持つプロジェクトをビルドする際に、すべての依存関係をモジュールパスに置きます。

+0

あなたの答えをありがとう。 –

+1

私はあなたの答えに挑戦します。 あなたが言ったモジュール名の機能を説明するためのpom.xml宣言はありますか? –

関連する問題