使用 Maven Resolver Provider 以编程方式获取有效的 POM

Programatically getting an effective POM using Maven Resolver Provider

我想做什么?

什么有效?

我正在使用 Maven Resolver Provider 哪种类型的作品。然而 我必须使用私有包 class org.apache.maven.repository.internal.DefaultModelResolver

这里是一个 GitHub link 示例 Maven 项目,您可以 运行: https://github.com/sahilm/maven-resolver-test

示例程序执行以下操作:

您可以 运行 使用以下程序: mvn exec:java -Dexec.mainClass="com.sahilm.maven_resolver_test.Test"

我需要什么帮助?

您可以(在您的项目中)在包下创建一个 public class:org.apache.maven.repository.internal 以扩展包可访问性 class。只需使用一个 class 供应商以后不可能使用的名称。

package org.apache.maven.repository.internal;
public class VisibleDefaultModelResolver extends DefaultModelResolver{

    public VisibleDefaultModelResolver(RepositorySystemSession session, RequestTrace trace, String context, ArtifactResolver resolver, VersionRangeResolver versionRangeResolver, RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories) {
        super(session, trace, context, resolver, versionRangeResolver, remoteRepositoryManager, repositories);
    }

}

那么你的代码就变成了:

ModelResolver modelResolver = new VisibleDefaultModelResolver(session, requestTrace, "context", artifactResolver, versionRangeResolver, remoteRepositoryManager, repos);

也许你可以使用 ProjectModelResolver。这是一个代码片段,

    DefaultRepositorySystem repositorySystem =
            new DefaultRepositorySystem();
    repositorySystem.initService(locator);

    ModelResolver modelResolver =
            new ProjectModelResolver(session, requestTrace,
                    repositorySystem, remoteRepositoryManager, repos,
                    ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT,
                    null);

我已经包含了一个工作代码 here