我正在为我的公司开发一个应用程序,它需要解决 Maven 项目的依赖关系。这是一个独立的应用程序,而不是 Maven 插件。我现在唯一想做的就是打印已解决的依赖项以确认它们已找到。我正在使用 Apache Maven 模型 (
v4.0.0-alpha-2
)、Apache Maven Artifact Resolver (v1.8.2
) 和 Maven Artifact Resolver Implementation (v1.8.2
) 来支持我的努力。
初始设置真的让我感到厌烦。我没有运气找到最新的示例或文档。这是我起草的代码:
public static void main(String[] args)
throws LoadException, IOException, XmlPullParserException, DependencyResolutionException {
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader(new File("C:\\Users\\lc70844\\eclipse-workspace\\test\\pom.xml")));
DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
DefaultRepositorySystem repositorySystem = new DefaultRepositorySystem();
for (Dependency dependency : model.getDependencies()) {
DependencyRequest request = new DependencyRequest();
request.setRoot(new DefaultDependencyNode(
new org.eclipse.aether.graph.Dependency(toArtifact(dependency), dependency.getScope())));
DependencyResult result = repositorySystem.resolveDependencies(session, request);
result.getArtifactResults().stream().map(a -> a.getArtifact())
.map(a -> a.getGroupId() + ":" + a.getArtifactId() + ":" + a.getVersion()).forEach(System.out::println);
}
}
它抛出一个异常说“存储库系统会话的本地存储库管理器不能为空。”这是不言自明的;我们都知道我需要做什么。但是,
DefaultRepositorySystemSession#setLocalRepositoryManager(LocalRepositoryManager)
需要一个LocalRepositoryManager
参数,这是我在弄清楚如何设置时遇到的问题。我想使用的存储库是本地存储库:%userprofile%/.m2/repository
.
我发现了一些与我的问题相关的类似问题,但它们似乎有错误的上下文或者正在使用不推荐使用的库来达到目的。我希望有一个可靠的、最新的解决方案。
希望我至少朝着正确的方向前进。我还需要做什么才能获得我的依赖项列表?