为类依赖关系生成图形数据的工具
是否有一些工具能够分析 Java 源文件,从中构建图表并以某种标准/可理解的格式提供图表数据?
Is there some tool that is able to analyze Java source files, construct a graph from it and provide the graph's data in some standard / understandable format?
它绝对不需要 GUI,我更喜欢命令行的东西,这样我就可以通过各种工具(用于分割、可视化等)处理输出.
It definitively does not need to have GUI, I'd prefer a command line thing so I can process the output by various tools (for segmentation, visualization,...).
推荐答案
我不确定命令行工具,但我喜欢使用 ObjectAid 逆向工程到类图:
I'm not certain about command line tools, but I like using ObjectAid for reverse engineering into class diagrams:
http://www.objectaid.com/
您可以轻松地将任何类及其关系添加到 ObjectAid 图表中.它以带有 ucls 扩展名的 XML 格式保存文件.这是一个示例:
You can easily add any class with it's relationships to an ObjectAid graph. It saves the file in an XML format with the ucls extension. Here's a sample:
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.4" icons="true"
always-add-relationships="true" generalizations="true" realizations="true"
associations="true" dependencies="true" nesting-relationships="true">
<class id="1" language="java"
name="my.classpath.common.controllers.AuthenticationInterceptor"
project="MyProject"
file="/SpecialPath/common/controllers/AuthenticationInterceptor.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="355" x="2222" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="2" language="java"
name="my.classpath.common.domain.CompanyAssignmentLocation" project="MyProject"
file="/SpecialPath/common/domain/CompanyAssignmentLocation.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="856" y="399" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="3" language="java"
name="my.classpath.common.domain.LocationsSpreadsheetReader" project="MyProject"
file="/SpecialPath/common/domain/LocationsSpreadsheetReader.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="348" x="680" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="4" language="java" name="my.classpath.common.domain.Stock"
project="MyProject" file="/SpecialPath/common/domain/Stock.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="210" x="430" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="5" language="java" name="my.classpath.common.util.FilesUtil"
project="MyProject" file="/SpecialPath/common/util/FilesUtil.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="277" width="218" x="1409" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="6" language="java" name="my.classpath.common.util.MyProjectUtil"
project="MyProject" file="/SpecialPath/common/util/MyProjectUtil.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="349" x="41" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="7" language="java" name="my.classpath.common.util.SpringUtil"
project="MyProject" file="/SpecialPath/common/util/SpringUtil.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="133" width="246" x="1936" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="8" language="java"
name="my.classpath.common.util.MyProjectUserUtil" project="MyProject"
file="/SpecialPath/common/util/MyProjectUserUtil.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="133" width="229" x="1667" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<class id="9" language="java" name="my.classpath.common.util.UnitConversion"
project="MyProject" file="/SpecialPath/common/util/UnitConversion.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="301" x="1068" y="37" />
<display autosize="true" stereotype="true" package="true"
initial-value="false" signature="true" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</display>
</class>
<dependency id="10">
<end type="SOURCE" refId="3" />
<end type="TARGET" refId="2" />
</dependency>
<classifier-display autosize="true" stereotype="true"
package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true"
private="true" static="true" />
<operations public="true" package="true" protected="true"
private="true" static="true" />
</classifier-display>
<association-display labels="true" multiplicity="true" />
</class-diagram>
您也可以使用 PlantUML,但它更适合正向工程而不是逆向工程:
You can also use PlantUML, but it's better for forward engineering than reverse engineering:
http://plantuml.sourceforge.net/
PlantUML 有自己独特的语法,您也可以从中获取源代码 - 但它不像 ObjectAid 那样容易整合
PlantUML has its own unique syntax that you can get source for, too - but it's not nearly as easy to pull together as ObjectAid
这两个都作为 eclipse 插件工作,抱歉,我不知道更多关于任何命令行工具可能能够完成您所要求的工作.
Both of these work as eclipse plug-ins, sorry that I don't know more about any command line tools that might be able to do what you're asking.
相关文章