Maven には、この「リアクター」という概念があります。これは、構築中のプロジェクトのリストを表す派手な用語です。Maven ビルドの開始時と終了時に、Maven はこのプロジェクトのリストを (/project/name
定義されているかどうかを使用してgroupId:artifactId
) 出力します。
リアクター内のプロジェクトごとに、Maven はアタッチされたアーティファクトのリストを維持します。デフォルトでは、各モジュールpom.xml
がアタッチされており、各プラグインが実行されると、追加のアーティファクトをアタッチするオプションがあります。ほとんどのプラグインはアーティファクトを添付しません。これを行うプラグインを次に示します。
jar:jar
を作成し.jar
て添付します
war:war
を作成し.war
て添付します
source:jar
.jar
ソース Java コードの を作成し、それをsource
java doc:jar
.jar
JavaDocs 広告のを作成し、次の分類子を添付しますjavadoc
デフォルトのプライマリ アーティファクト (これは に置き換えられるものですjar:jar
) もありますが、これは実際にはファイルではなくディレクトリであるため、ローカル リポジトリ キャッシュまたはリモート リポジトリにインストールまたはデプロイされません。
したがって、リアクター内で、プライマリ アーティファクトをアタッチするプラグインがまだ実行されておらず、別のプラグインがプライマリ アーティファクトを要求すると、ディレクトリが与えられ${project.build.outputDirectory}
ます。一次成果物が添付された後に、その一次成果物が提供されます。
フェーズはtest
フェーズの前に発生するpackage
ため、. ではなくディレクトリを使用し.jar
ます。フェーズは後に発生するintegation-test
ため、常に.jar
.
マルチモジュール プロジェクトでは物事がより複雑になります (これについては、私の長い紹介が役に立ちます)。
Maven はテスト クラスパスを構築する必要があります。依存関係の 1 つがリアクター内にある場合、Maven はリアクターにアタッチされたアーティファクトを使用します。それ以外の場合は、ローカル キャッシュが使用されます (必要に応じてリモート リポジトリから入力されます)。
走るとき
mvn test
ルートからのマルチモジュール プロジェクトでは、デフォルトの (ディレクトリ ベースの) アーティファクトに代わるものはないため、モジュール内のクラスパスはtarget/classes
ディレクトリになります。
走るとき
mvn package
ただし、同じプロジェクトでは、各モジュールがライフサイクルを順番に完了するため、すべての依存モジュールは.jar
、添付されたアーティファクトとしてファイルにスワップされます。
これらすべてから、Maven が賢明なことを行っていることがわかります。これが役に立ったことを願っています。