解決済みの依存関係を取得するMavenプラグインを作成しています。単一のモジュールプロジェクト/ pomでは正常に動作しますが、複数のモジュールプロジェクトでは失敗します。Mavenプラグインのすべてのモジュール間で依存関係をどのように解決しますか?
ここでは、コードスニペット
@Mojo(
name="scan",
aggregator = true,
defaultPhase = LifecyclePhase.COMPILE,
threadSafe = true,
requiresDependencyCollection = ResolutionScope.TEST,
requiresDependencyResolution = ResolutionScope.TEST,
requiresOnline = true
)
public class MyMojo extends AbstractMojo {
@Parameter(property = "project", required = true, readonly = true)
private MavenProject project;
@Parameter(property = "reactorProjects", required = true, readonly = true)
private List<MavenProject> reactorProjects;
@Override
public void execute() throws MojoExecutionException {
for(MavenProject p : reactorProjects) {
for(Artifact a : p.getArtifacts()) {
...consolidate artifacts
}
}
}
}
は、上記のコードは、すべてのモジュール間ですべて解決の依存関係を統合しますが、それはいくつかの追加のものが含まれています。
ここでは、使用するサンプルプロジェクトを示します。あなたはモジュール/プロジェクトコアはコモンズに依存していることを、この
[INFO] ------------------------------------------------------------------------
[INFO] Building core 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ core ---
[INFO] com.github:core:jar:0.1-SNAPSHOT
[INFO] \- axis:axis:jar:1.4:compile
[INFO] +- commons-logging:commons-logging:jar:1.0.4:runtime
[INFO] \- commons-discovery:commons-discovery:jar:0.2:runtime
[INFO] \- (commons-logging:commons-logging:jar:1.0.3:runtime - omitted for conflict with 1.0.4)
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building web 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ web ---
[INFO] com.github:web:war:0.1-SNAPSHOT
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] \- com.github:core:jar:0.1-SNAPSHOT:compile
[INFO] \- axis:axis:jar:1.4:compile
[INFO] +- (commons-logging:commons-logging:jar:1.0.4:runtime - omitted for conflict with 1.1.1)
[INFO] \- commons-discovery:commons-discovery:jar:0.2:runtime
[INFO] \- (commons-logging:commons-logging:jar:1.0.3:runtime - omitted for conflict with 1.1.1)
[INFO] ------------------------------------------------------------------------
お知らせのような出力が表示され、
mvn dependency:tree -Dverbose -Dincludes=commons-logging
を実行してくださいモジュール・プロジェクトのメインフォルダからthis github repo
をダウンロードしてくださいロギング1.0.4およびコモンズロギング1.0.3がありますが、競合のため1.0.3は省略され、1.0.4は解決されます。 これは、独自にコアを構築する場合は、コモンズロギング1.0.4のみを取得する必要があることを意味します。
module/project ウェブは、commons-loggingの競合するバージョンにも依存しますが、1.1.1に解決されています。
"mvn package"コマンドを使用して "プロジェクト全体"(modules-project)をビルドする場合は、modules-project/web/target/myweb/WEB-INF/libにすべての依存関係を解決し、コモンズロギング1.1.1のみを含みます。モジュール・プロジェクト、コア、およびウェブ:
はここで上記のコードでコード
に問題だ、reactorProjectsは3 MavenProjectのでインスタンス化されます。
modules-projectおよびwebの場合、commons-logging 1.1.1を解決して返します。しかし、コアのプロジェクトでは、commons-logging 1.0.4を解決して返します。
私はコモンズ・ログ1.1.1はビルドが生成されます依存であることを知っている私のプラグインのコードをしたい、としませコモンズ・ログ1.0.4
任意の考え?
このプラグインの目的は何ですか?あなたは何をしたいですか? – khmarbaise
"mvn package"が生成するすべての依存関係を取得したいだけです – kane
すでにこのようなことができるmaven-assembly-pluginを使うべきです...依存関係を取得したいのとは別に、あなたはなぜそれらを必要としているのですか? – khmarbaise