web-dev-qa-db-ja.com

クラスの依存関係のグラフデータを生成するツール

できるツールはありますかJavaソースファイルを分析し、そこからグラフを作成しますそして、グラフのデータを標準/理解可能な形式で提供します

確かにGUIは必要ありません。さまざまなツール(セグメンテーション、視覚化など)で出力を処理できるように、コマンドラインを使用することをお勧めします。

26
Rostislav Matl

コマンドラインツールについては確信がありませんが、ObjectAidを使用してクラス図をリバースエンジニアリングするのが好きです。

http://www.objectaid.com/

ObjectAidグラフへの関係を持つ任意のクラスを簡単に追加できます。ファイルをXML形式で保存し、ucls拡張子を付けます。サンプルを次に示します。

<?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プラグインとして機能します。残念ながら、あなたが求めていることを実行できる可能性のあるコマンドラインツールについて詳しく知りません。

9
Jason Lowenthal

Class Dependency Analyzer(CDA) です。

このツールの目的は、Java™クラスファイルを分析して、それらのクラス間の依存関係についてさらに学習することです。

APIは次のとおりです。 http://www.dependency-analyzer.org/#PluginAPI

5
lichengwu

MLGraph 役に立つかもしれません。このようなグラフ作成ツールのほとんどと同様に、GraphViz/dotを活用します。私はそれを使ったことがないので、レビューをすることはできません。

そうは言っても、GraphVizとドットを使用するだけで、独自の最小限の図表作成ツールを実行できる場合もあります。

GraphViz/dotを使用して、Springコンテキストの視覚化からIntelliJモジュールの依存関係、複雑なXMLドキュメントの視覚化まで、多くの便利なタイプの図を生成しました。周りを見て、見つけたものを見てください。

2
MikeThomas

http://blog.schauderhaft.de/degraph/ から:

Degraphを使用してクラスファイルとjarを分析し、結果としてgraphmlファイルを取得できます。これは、yedを使用してレンダリングできます。

2
Hilmar

パッケージ間の依存関係のグラフを分析して表示する最小限のツールを作成しました。多くの対話や他のプログラムは必要ありません。

https://github.com/battlesnake/jorgy

簡単なハックプロジェクトであるため、ドキュメント化されていませんが、基本的には実行して、ソースディレクトリへのパスを最初の引数として渡します。

ディレクトリ名やファイル名は気にしませんが、次のものが必要です。

  • 各ファイルのpackage宣言。

  • 最上位で定義された正確に1つのタイプ(その中にネストされたゼロまたは多くの内部タイプは問題ありません)。

GraphStyleクラスのApplicationインターフェイスをニーズに合わせて変更できます。このインターフェースは、どの依存関係が弱いかをグラフビルダーに伝える方法を提供します。依存関係はグラフに表示されるべきではありません。

1
Mark K Cowan

それでも問題が解決しない場合は、Code Irisプラグインを使用してみてください。 Intellij Ideaで動作します http://plugins.jetbrains.com/plugin/7324

クラス、パッケージ、およびモジュールレベルの依存関係グラフを視覚的に表現します。さらに、データをjson形式にエクスポートできます。

まだ更新されており、無料です。

1
Gaket

コマンドラインツールについては、jdepsをご覧ください。

https://docs.Oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html

jdeps -cp <your cp> -v <path to your .class file>
1
Daniel Alencar

IDE- IntelliJ Idea でこの機能を使用しています

詳細とスクリーンショットについては、このページを参照してください http://www.jetbrains.com/idea/features/uml_class_diagram.html

1
MartenCatcher

Google CodePro Analytix を試してください。このツールは dependencies についての優れた洞察を提供します。

ただし、コマンドラインの観点からは使用していません。レポートエクスポートをサポートすることを期待しており、ツールチェーンのさらに下で解析できます。

0
vasanth