我想以编程方式获取该POM文件的有效POM。具体来说,我想执行以下操作:
我不需要获取传递依赖。
我正在使用Maven Resolver Provider这类作品。然而
我必须使用包私有类org.apache.maven.repository.internal.DefaultModelResolver
以下是GitHub链接,您可以运行一个示例Maven项目:https://github.com/sahilm/maven-resolver-test
示例程序执行以下操作:
您可以使用以下命令运行程序:
mvn exec:java -Dexec.mainClass="com.sahilm.maven_resolver_test.Test"
答案 0 :(得分:4)
您可以(在您的项目中)在包下创建公共类:org.apache.maven.repository.internal
,以扩展包可访问性类。只需使用供应商无法使用的类名即可。
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);
答案 1 :(得分:1)
也许您可以使用ProjectModelResolver
。这是一个代码段,
DefaultRepositorySystem repositorySystem =
new DefaultRepositorySystem();
repositorySystem.initService(locator);
ModelResolver modelResolver =
new ProjectModelResolver(session, requestTrace,
repositorySystem, remoteRepositoryManager, repos,
ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT,
null);
我已包含工作代码here。