【问题标题】:How to resolve maven dependencies inside the maven plugin?如何解决 maven 插件中的 maven 依赖项?
【发布时间】:2012-02-24 06:06:40
【问题描述】:

我尝试将 ArtifactResolver.resolve(ArtifactResolutionRequest) 与标志 resolveTransitively=true 一起使用,我的项目的分离模块需要 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 秒。

maven如何在编译前解决所有传递依赖以及如何在代码中使用它?

//项目的独立模块大量使用parents,导入依赖,最终有350个依赖工件。那么可能是 maven build 削减了一些处理步骤还是 ArtifactResolver 做了一些额外的事情?

【问题讨论】:

    标签: java maven maven-plugin maven-embedder


    【解决方案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;
    

    【讨论】:

    • 谢谢,但我需要解决工件的所有传递依赖关系,而不是工件本身。
    • 抱歉回答错问题。你是在 maven 邮件列表上问的吗?因为有人问了一个相同的问题,答案是查看 Maven API Spec 页面中的 requiresDependencyResolution。
    • 是的,这是我的问题。我从 maven-eclipse-plugin 代码开始很笨,只是错过了对插件开发人员的一般帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2012-01-12
    • 2018-03-27
    相关资源
    最近更新 更多