将 Maven 依赖关系可视化为图表

问题描述 投票:0回答:1

我的项目由多个模块组成,这些模块相互依赖,记住什么依赖什么并不是那么简单,因此我希望将依赖关系图可视化。

我知道可以以点格式创建依赖项的文本描述:

mvn dependency:tree -Dincludes=ch.sahits.game -DappendOutput=true
                    -DoutputType=dot -DappendOutput=true
                    -DoutputFile=output.dot

这将在每个模块中生成output.dot 文件。由于基本上有一个模块收集了所有其他模块,我只想看看那个模块,它看起来像这样:

digraph "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" { 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:OpenPatricianImage:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:OpenPatricianData:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:OpenPatricianSound:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:OpenPatricianJavaFX:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:MarvinFXEssentials:jar:0.8.0-SNAPSHOT:test" ; 
    "ch.sahits.game:OpenPatricianDisplay:jar:0.8.0-SNAPSHOT" -> "ch.sahits.game:OpenPatricianServer:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianImage:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:OpenPatricianModel:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianModel:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:GameEvent:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianSound:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:OpenPatricianUtilities:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianJavaFX:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:OpenPatricianGameEvent:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianGameEvent:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:OpenPatricianClientServerInterface:jar:0.8.0-SNAPSHOT:compile" ; 
    "ch.sahits.game:OpenPatricianServer:jar:0.8.0-SNAPSHOT:compile" -> "ch.sahits.game:OpenPatricianEngine:jar:0.8.0-SNAPSHOT:compile" ; 
 }

但就我的目的而言,它是不完整的,因为它忽略了

OpenPatricianJavaFX
OpenPatricianImage
的依赖关系。为了弥补这个问题,我四处收集了所有缺失的信息,以便我可以使用 graphviz 生成图形图像:

dot -Tpng output.dot -o dependencies.png

结果是一团糟,虽然它是正确的表示,但对记录依赖关系没有帮助。 enter image description here 有一些帖子解决了同样的问题,但它们都有点过时了:

  1. 如何生成 Maven 项目的所有模块之间的依赖关系图?提供了基于 Eclipse 的解决方案,但似乎特定插件已不再存在。
  2. Maven 依赖关系图 基本上描述了我选择的相同方法。 这篇文章也有更多细节。
  3. A Visual Maven Dependency Tree View 可能就是第一点提到的插件。
  4. Maven 依赖关系图 看起来像是 IntelliJ 的完美解决方案,但我在任何地方都找不到该插件。

所以我的问题归结为关于两个步骤的建议:

  1. 在我的项目中生成依赖项模型,同时忽略第三方依赖项:是否有比
    maven-dependency-plugin
    更好的方法?
  2. 如何从步骤 1) 的输出生成可读的图表?可能的选项还包括在导出到图像之前手动调整布局的某种方式。
maven intellij-idea
1个回答
0
投票

这是一个老问题,但我只是偶然发现它并找到了一个希望有用的答案。有 depgraph-maven-plugin,它能够按照您的问题或评论中提到的方法创建更漂亮的图表。它还支持使用

reactor
目标仅显示多模块项目中的工件的能力。像这样使用它:

mvn com.github.ferstl:depgraph-maven-plugin:reactor

您会发现一个新文件

target/dependency-graph.dot
,其中包含依赖关系图。

如果需要,请使用

dot
.dot
文件创建 PDF 或 PNG 文件:

dot -Tpdf target/dependency-graph.dot -o target/dependency-graph.pdf
dot -Tpng target/dependency-graph.dot -o target/dependency-graph.png

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.