Maven依赖关系图

60

有没有一种方法可以获得给定一组项目的Maven依赖关系图(如果可能,是图形化的),而不必显示第三方依赖项?或者在哪里可以选择不感兴趣的依赖关系?

我想把工具/插件指向一些POM文件,并查看这些项目之间的依赖关系描述。


1
如果您正在使用Eclipse,您可以在“依赖项”视图上以图形方式排除依赖项。 - Arnaud Denoyelle
1
这个视图仅适用于特定项目,我想要查看我的项目之间的关系。 - Simhor
有人尝试过 https://github.com/janssk1/maven-graph-plugin/wiki/Manual 吗? - Srikanth Malyala
5个回答

52
如果您使用mvn dependency:tree命令,可以使用-Dexcludes-Dincludes参数来指定需要排除或包含的文件。输出结果是一个ASCII艺术风格的依赖图。
更多信息请参见文档

2
但这仅仅是针对一个特定项目,不是吗?我真的很想看到我的项目之间的关系。 - Simhor
3
类似于这个插件 (http://mvnplugins.fusesource.org/maven/1.0/maven-graph-plugin/),但显然它不提供选择排除第三方库的选项。 - Simhor
1
@Simhor,所以您想要指向一些POM文件,并查看这些项目之间的关系图表? - Duncan Jones
或者程序可以通过提供顶层pom.xml文件来推断子模块。 - Simhor

34

有一个恰好符合你需求的工具,它叫做Pom Explorer

你可以在这里找到它的网站:github.com/ltearno/pom-explorer

它是一个用于处理Maven项目图形的工具。作为一个预告片,我可以说在我的机器上,它可以在4秒内分析4000个pom.xml文件。然后,在已分析的pom图之上提供了许多功能:

  • 依赖分析(谁依赖于GAV,这个GAV依赖于哪些gavs,包括传递性),
  • 解决方案(Pom Explorer知道在哪里定义属性,它管理依赖项和bom导入),
  • 操作(您可以使用它来转换您的pom图形,例如,如果您希望许多项目使用一个新版本的依赖项),
  • 构建(pom explorer分析您的pom图形,并知道应该按什么顺序构建它们,然后构建所有内容!它甚至可以监视您的项目目录以进行更改),
  • 导出(今天,有CSV和GRAPHML导出),
  • 可视化(pom explorer可以向您展示交互式3D可定制化的项目图形可视化)。

它目前正处于活跃开发阶段,所以请不要犹豫,尝试它、报告错误并要求有用功能!文档也还不完整,所以再次强调请不要犹豫,提问!

谢谢


很好的工具,你能解释一下如何简单地获取给定一组Maven项目的依赖关系图吗?到目前为止,我可以分析包含该项目集的文件夹并使用pom-explorer列出所有gav。我需要做什么才能获取这些项目之间(不包括第三方)的依赖关系图以进行进一步处理?我想要的只是在Maven项目之间有一个简单的图表,以了解如何按正确顺序构建项目。 - Moonlit
您可以使用 graph export [gav_filter] 命令导出代表您项目的 graphml 文件。然后,您可以使用 yEd 进行筛选。 如果您喜欢 3D WebGL 图形命令(graph),则可以直接在图形界面中筛选显示的 GAVs。 最好将此问题发布为 Github 项目上的文档问题,以便其他人受益... https://github.com/ltearno/pom-explorer/issues - Arnaud Tournier
抱歉,但GUI界面很繁琐。有没有命令行方式来使用这个工具? - RoyM
GUI试图像命令行一样。目前没有其他选择。也许期望在pom-explorer.jar周围编写一个小的命令行包装器。 - Arnaud Tournier

13
mvn com.github.ferstl:depgraph-maven-plugin:aggregate -Dincludes=com.yourcompany.pkg

对我来说很好。


1
到目前为止我尝试过的最好的,但它会被编译/测试依赖项所欺骗。默认情况下具有“test”范围的依赖关系,在子项目中被覆盖为“compile”,但未被考虑在内。某些依赖关系可能会出现多次。 - Laurent Caillette

5

我喜欢使用depgraph-maven-plugin来可视化多模块项目中的依赖关系,另请参见之前的回答

要以文本格式(如dependency:tree)获取您的模块的聚合结果,请使用:

mvn com.github.ferstl:depgraph-maven-plugin:aggregate -DgraphFormat=text -Dincludes=myGroupId

包含(includes)的语法与 maven-dependency-plugin 的包含语法 相同。
它有许多属性可自定义结果/行为。我更喜欢将其与graphviz一起使用,以便可以使用(默认)图形格式dot并让它创建放在target文件夹中的png文件。
mvn com.github.ferstl:depgraph-maven-plugin:aggregate -DcreateImage -Dincludes=myGroupId

还有其他有趣的目标,例如一个example目标用于快速测试属性。


2
您可以使用 POM2RDF 生成项目依赖关系的 RDF 图(以及它们的依赖关系等),然后可以查询以获得软件清单或可视化为依赖关系图。免责声明:我是作者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接