Maven Dependency Plugin:调整依赖树GraphML输出格式
嘿,我之前用老版本的Maven Dependency Plugin生成GraphML依赖图时也碰到过这个糟心的问题——节点塞了一堆没用的信息,导入yEd后简直没法看。给你几个针对性的解决办法,亲测有效:
1. 用内置参数自定义节点标签
Maven Dependency Plugin 2.4其实支持直接指定节点显示的内容,不用改其他配置。你只需要在命令里加上-DgraphmlNodeLabel参数,自定义想要的格式就行。比如只想保留groupId:artifactId:version,命令改成:
mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml -DgraphmlNodeLabel='${groupId}:${artifactId}:${version}'
如果觉得还是太啰嗦,也可以只保留artifactId:version:
mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml -DgraphmlNodeLabel='${artifactId}:${version}'
这个参数会直接替换默认的节点内容,生成的GraphML导入yEd后清爽很多。
2. 自定义XSLT实现精细控制
如果需要更灵活的内容过滤(比如只保留artifactId,或者添加自定义字段),可以写一个简单的XSLT样式表来转换生成的GraphML文件。
先创建一个名为custom-graphml.xsl的文件,内容如下(示例是只保留artifactId和version):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:graphml="http://graphml.graphdrawing.org/xmlns"> <xsl:output method="xml" indent="yes"/> <!-- 复制所有原始内容,只修改节点标签 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 替换节点的label数据,拼接artifactId和version --> <xsl:template match="graphml:data[@key='d0']"> <graphml:data key="d0"> <xsl:value-of select="concat(../graphml:data[@key='d2'], ':', ../graphml:data[@key='d3'])"/> </graphml:data> </xsl:template> </xsl:stylesheet>
然后在Maven命令里指定这个样式表:
mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml -DxsltStylesheet=custom-graphml.xsl
这样生成的GraphML节点就会按照你定义的规则显示内容,完全可控。
3. 升级插件版本(备选方案)
如果你的项目环境允许,建议把Maven Dependency Plugin升级到3.x及以上版本(比如3.6.0)。新版本的插件默认生成的GraphML内容更简洁,而且有更多配置选项。升级后的命令可以这样写:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:tree -DoutputType=graphml -DoutputFile=dependency.graphml
要是升级后还是觉得内容多,同样可以用上面的graphmlNodeLabel参数自定义。
额外小技巧
生成干净的GraphML后,导入yEd时可以试试用Hierarchical Layout(层级布局)或者Organic Layout(有机布局),然后批量调整节点的字体大小和尺寸,进一步提升图表的可读性。
内容的提问来源于stack exchange,提问作者André Gasser

