java 生成类依赖关系图数据的工具[已关闭]

nhn9ugyo  于 2023-01-29  发布在  Java
关注(0)|答案(9)|浏览(162)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
四年前关闭了。
Improve this question
是否有某种工具能够分析Java源文件,从中构造图形并以某种标准/可理解的格式提供图形数据
它肯定不需要有图形用户界面,我更喜欢一个命令行的东西,这样我就可以处理各种工具的输出(分割,可视化,...)。

x9ybnkn6

x9ybnkn61#

我对命令行工具不太确定,但我喜欢使用ObjectAid对类图进行反向工程:
http://www.objectaid.com/
您可以轻松地将任何类及其关系添加到ObjectAid图中。它以扩展名为ucls的XML格式保存文件。以下是一个示例:

<?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,但它更适合于正向工程而不是反向工程:
http://plantuml.sourceforge.net/
PlantUML有它自己独特的语法,您也可以获得源代码--但是它不像ObjectAid那样容易组合
这两个工具都是eclipse插件,很抱歉我不知道有什么命令行工具可以满足你的要求。

lsmd5eda

lsmd5eda2#

至于命令行工具,您可能想看看jdeps
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html

jdeps -cp <your cp> -v <path to your .class file>
piok6c0g

piok6c0g3#

这里是Class Dependency Analyzer (CDA)
此工具的目的是分析Java™类文件,以便了解有关这些类之间依赖关系的更多信息。
下面是API:http://www.dependency-analyzer.org/#PluginAPI

jdgnovmf

jdgnovmf4#

https://github.com/riy/degraph开始
你可以用Degraph分析类文件和jar文件,得到一个graphml文件作为结果,这可以用yed渲染。

3wabscal

3wabscal5#

你可能会用到UMLGraph。它和大多数图形工具一样,利用了GraphViz/dot。我还没有用过它,所以我不能给予它一个评价。
话虽如此,您也可以使用GraphViz和dot来创建自己的极简图形工具。
我已经使用GraphViz/dot生成了许多有用的图表类型,从Spring上下文的可视化到IntelliJ模块依赖关系,再到复杂XML文档的可视化。

4dc9hkyq

4dc9hkyq6#

试试Google CodePro Analytix。这个工具提供了关于dependencies的很好的洞察力。
但是我还没有尝试过从命令行的Angular 使用它,我希望它能支持报表导出,这可以在工具链中进一步解析。

qmelpv7a

qmelpv7a7#

我在IDE中使用此功能-IntelliJ Idea
更多信息和屏幕截图请参见此页面http://www.jetbrains.com/idea/features/uml_class_diagram.html

js5cn81o

js5cn81o8#

如果问题仍然存在,请尝试使用Code Iris插件。它与Intellij Idea http://plugins.jetbrains.com/plugin/7324一起工作
它提供了类、包和模块级依赖图的可视化表示,并且可以将数据导出为JSON格式。
它仍然是更新和免费的。

i34xakig

i34xakig9#

我刚刚创建了一个最小的工具,它可以分析和显示包之间的依赖关系图,不需要太多的交互,也不需要其他程序。
https://github.com/battlesnake/jorgy
这是一个没有文档记录的项目,因为它是一个快速的黑客项目,但基本上你运行它,并传递到你的源目录的路径作为第一个参数给它。
它不关心目录名或文件名,但要求:

  • 每个文件中的package声明。
  • 在顶层定义一个类型(可以不包含内部类型,也可以包含许多内部类型)。

你可以修改Application类中的GraphStyle接口来满足你的需要。这个接口提供了一种方法来告诉图形生成器哪些依赖性弱,哪些不应该显示在图形上,等等。

相关问题