2

フラグresolveTransitively=trueを指定してArtifactResolver.resolve(ArtifactResolutionRequest)を使用しようとしていますが、プロジェクトの個別のモジュールに 10 分かかります。

ArtifactResolutionRequest request = new ArtifactResolutionRequest()
        .setArtifact( project.getArtifact() )
        .setArtifactDependencies( project.getDependencyArtifacts() )
        .setLocalRepository( localRepository )
        .setManagedVersionMap( project.getManagedVersionMap() )
        .setForceUpdate(false)
        .setResolveTransitively(true)
        .setOffline(true)
        .setListeners(listeners);
result = artifactResolver.resolve(request);

mvn でビルドするだけなら、4 秒ほどかかります。

コンパイル前にすべての推移的な依存関係を解決する方法と、それをコードで使用する方法は?

//プロジェクトの別のモジュールは、親を多用し、依存関係をインポートし、最終的に 350 の依存関係アーティファクトを持ちます。それで、Mavenビルドがいくつかの処理ステップを削減するか、ArtifactResolverが追加で何かを行うのでしょうか?

4

1 に答える 1

1

これは、アーティファクトを解決し、それへのファイル参照を取得するために使用するコードです。

// get maven artifact representing this mojo artifact
org.apache.maven.artifact.Artifact ma = ...; // create artifact reference
// resolve the maven artifact
try {
    resolver.resolve(ma, remoteRepositories, localRepository );
} catch (ArtifactNotFoundException ex) {
    throw new MojoExecutionException("could not find deploy artifact ["+a+"]", ex);
} catch (ArtifactResolutionException ex) {
    throw new MojoExecutionException("could not resolve deploy artifact ["+a+"]", ex);
}
File maFile = ma.getFile();

リポジトリ参照はクラスレベルの属性であり、maven の依存性注入によって解決されます。クラスでそれらを宣言するだけです。

/** 
 * @parameter default-value="${localRepository}" 
 * @readonly
 * @required
 */
protected ArtifactRepository localRepository;

/** 
 * @parameter default-value="${project.remoteArtifactRepositories}" 
 * @readonly
 * @required
 */
protected java.util.List<ArtifactRepository> remoteRepositories;
于 2012-02-24T17:00:15.953 に答える