我想做什么?
- 给定本地文件系统上的 POM 文件。
我想以编程方式获取该 POM 文件的有效 POM。具体来说,我想执行以下操作:
- 解决 POM 依赖关系
- 确保处理所有父 POM
- 获取完全解析的POM的依赖列表
- 等等...
我不需要获取传递依赖。
什么有效?
我正在使用 Maven Resolver Provider哪种作品。然而
我必须使用包私有(private)类 org.apache.maven.repository.internal.DefaultModelResolver
这里是您可以运行的示例 Maven 项目的 GitHub 链接:https://github.com/sahilm/maven-resolver-test
示例程序执行以下操作:
- 从 Maven Central 下载最新的 spring boot POM。
- 打印出它的直接依赖关系(包括父级依赖)
你可以运行程序:
mvn exec:java -Dexec.mainClass="com.sahilm.maven_resolver_test.Test"
我需要什么帮助?
- 我需要帮助来理解为什么我必须使用包私有(private)类来让东西工作。
- 还有其他方法可以获取我需要的信息吗?
最佳答案
您可以(在您的项目中)在包下创建一个公共(public)类:org.apache.maven.repository.internal
,它扩展了 package-accessibility 类。只需使用供应商将来不可能使用的类名。
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);
关于java - 使用 Maven Resolver Provider 以编程方式获取有效的 POM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55527844/