11

我正在尝试从项目的根目录开始检索整个依赖关系树及其 pom。我从文件系统中已经存在的 POM 开始,但我不确定如何从存储库中检索依赖项 pom。

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

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<Dependency> deps = project.getDependencies();

// Get dependency details
for (Dependency d: deps) {          
    System.out.print(d.getArtifactId());
    System.out.print(":");
    System.out.println(d.getVersion()); 
}           
4

2 回答 2

4

实际上,您已经非常接近阅读依赖项了。所缺少的是:

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<Dependency> deps = model.getDependencies();

for (Dependency d: deps) {          
    System.out.print(d.getArtifactId());
} 

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

于 2014-12-26T17:16:42.513 回答
1

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

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

顺便说一句,如果您只需要依赖项,您也可以直接使用maven-dependency-plugin(这在例如上调用mvn dependency:tree- 请参阅此线程以获取示例)。

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

于 2012-07-25T21:42:06.427 回答