我的项目由多个模块组成,这些模块相互依赖,记住什么依赖什么并不是那么简单,因此我希望将依赖关系图可视化。
我知道可以以点格式创建依赖项的文本描述:
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
结果是一团糟,虽然它是正确的表示,但对记录依赖关系没有帮助。 有一些帖子解决了同样的问题,但它们都有点过时了:
所以我的问题归结为关于两个步骤的建议:
maven-dependency-plugin
更好的方法?这是一个老问题,但我只是偶然发现它并找到了一个希望有用的答案。有 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
希望有帮助!