如何使用Maven的Java API访问Maven Artifact POM?

我试图从项目的根目录开始检索整个依赖树和它们的poms。 我开始使用已存在于我的文件系统中的POM,但我不确定如何从存储库中检索依赖poms。

我使用以下代码来访问依赖项列表。 从列表中我可以获得有关工件的所有信息。 我只是不确定如何访问存储库。

FileReader reader = null; Model model = null; MavenXpp3Reader mavenreader = new MavenXpp3Reader(); File pomfile = new File("pom.xml"); model.setPomFile(pomfile); MavenProject project = new MavenProject(model); List deps = project.getDependencies(); // Get dependency details for (Dependency d: deps) { System.out.print(d.getArtifactId()); System.out.print(":"); System.out.println(d.getVersion()); } 

实际上你非常接近阅读依赖项。 所有缺失的是:

 Model model = mavenreader.read(new FileReader(pomFile)); 

完整示例:

 MavenXpp3Reader mavenreader = new MavenXpp3Reader(); File pomfile = new File("pom.xml"); Model model = mavenreader.read(new FileReader(pomFile)); List deps = model.getDependencies(); for (Dependency d: deps) { System.out.print(d.getArtifactId()); } 

这不会使您获得依赖关系树,但您可以为找到的依赖关系重复它。

不幸的是,这不是那么简单:-)我可以给你一些建议(考虑到你只需要来自中央仓库的工件)。

这是我在Github上找到的一个很好的示例代码 。 另一种方法是使用中央存储库的REST API 。 这是一个如何以编程方式执行此操作的示例。

顺便说一句,如果你只需要依赖项,你也可以直接使用maven-dependency-plugin (这可以在例如mvn dependency:tree上调用 – 参见这个例子的线程 )。

可能你的方法也可以工作,但我想它需要一些缺失的部分。