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