简体   繁体   中英

How to resolve maven dependencies inside the maven plugin?

Im trying to use ArtifactResolver.resolve(ArtifactResolutionRequest) with flag resolveTransitively=true and it takes 10min for separated module of my project.

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);

If i just build it with mvn it takes ~4sec.

How maven resolve all transitive dependencies before compile and how to use it in code?

//The separate module of project heavily use parents, import dependencies and finally have 350 dependency artifacts. So may it be what maven build cuts some processing steps or ArtifactResolver do something additionally?

This is the code I use to resolve an artifact and get a File reference to it:

// 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();

The repositories references are class-level attributes which are resolved via dependency inject in maven. You just need to declare them in your class:

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

/** 
 * @parameter default-value="${project.remoteArtifactRepositories}" 
 * @readonly
 * @required
 */
protected java.util.List<ArtifactRepository> remoteRepositories;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM