0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jQAssistantで分析したクラス間の関係性をneo4j用のdumpファイルとして出力する

Last updated at Posted at 2025-03-13

自分用備忘

環境

$ java -version
openjdk version "17.0.10" 2024-01-16
$ mvn -version
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
$ neo4j --version
5.26.3

要約

  • mavenコマンドでクラス間の関係性を出力する
  • その出力先をローカルで動いているneo4jのbolt(ドライバ的なもの)にする
  • ローカルのneo4jにデータが取り込まれる
  • 取り込まれたデータをneo4jのadminコマンドでdump化して出力する

neo4jのセットアップ

コマンドの方

  1. neo4jを以下からダウンロード
    https://neo4j.com/deployment-center/#:~:text=Launch%20Cloud%20Instance-,Graph%20Database%C2%A0,Self%2DManaged,-Enterprise%2Dgrade%20availability
  2. 解凍して/usr/localに配置
  3. パス通す
export NEO4J_HOME=/usr/local/neo4j-community-5.26.3
export PATH=$NEO4J_HOME/bin:$PATH

Mavenの方

  1. pomに以下足す
                <plugin>
                    <groupId>com.buschmais.jqassistant</groupId>
                    <artifactId>jqassistant-maven-plugin</artifactId>
                    <version>2.5.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>scan</goal>
                                <goal>analyze</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

公式に書いてある通り。

出力、分析

mavenプロジェクトで以下を実行すると、target配下にneo4j用のデータが出力される

mvn jqassistant:scan

以下はjQAssistantのGitHubに添付の画像
scanによりグラフDB用構造のデータを出力し、
その後analyze(mvn jqassitant:analyze)によって分析を実施するというライフサイクル


https://github.com/jqassistant#the-jqassistant-lifecycle

そしてそれらの結果は、serverコマンドによってグラフィカルに表示できる

mvn jqassistant:server

こちらのコマンドを実行すると、内蔵されているneo4jのアプリケーションが起動し
image.png
scanやanalyzeの結果を確認することができる
image.png
image.png

基本的には上記の機能を使うのみで十分

出力結果を他環境に移したい場合

今回、分析対象となるソースコードを受け渡すことなく、scanによって出力したグラフDB用構造のデータのみを受け渡したいというニーズが発生
mvn jqassistant:export-databaseというコマンドで出力可能というコメントも見られたが、今回利用しているバージョンでは当該機能の提供は確認できなかった

したがって、

  1. jQAssistantに内蔵のものではないneo4jインスタンスにデータを一旦読み込ませる
  2. そのneo4jインスタンスからコマンドによってdumpデータを出力する

という方法を採った

jQAssistantに内蔵のものではないneo4jインスタンスとは、セットアップの項で「コマンドのもの」と言っているものと同義
まずはそちらのインスタンスを立ち上げるために起動コマンドを実行

neo4j start

この時、jQAssistantに内蔵のneo4jが起動していると、portがalready in useで失敗するため
mvn jqassistant:serverを実行している場合は停止させておく

neo4jは、webアプリケーションを動かすport(デフォルト:7474)と
boltというものを動かすport(デフォルト:7687)の二つを使用する

boltはとても大雑把に言うとneo4jにデータを注入するための入口のようなもの
なので、コマンドの方のneo4jのboltに対してjQAssistantの出力を向けてやることで、データの注入が行える

そのためのコマンドが以下

mvn jqassistant:scan -Djqassistant.store.uri=bolt://localhost:7688

この設定に関する公式の説明はこちら
デフォルトではtarget配下のファイルパスが設定されているため、何も指定しないと物理ファイルとして出力するということ
image.png

以上によりjQAssistantに内蔵のものではないneo4jインスタンス、
つまりコマンドによって起動したneo4jインスタンスの方にデータが取り込まれたので
あとはパッケージに内蔵されたコマンドでdumpファイルを出力してやればOK

データを掴んでいると出力できないようなので、一度プロセスを終了し

neo4j stop

neo4jのadminコマンドでdumpを出力する(パスは任意)

neo4j-admin database dump --to-path=./dumps neo4j --verbose

あとは生成したdumpファイルをアップロードするなり別環境でインポートするなりすればOK

追記

mvn cleanの直後などでコンパイル結果が生成されていない場合は正しく分析できない
一度mvn compileなどを行ってからmvn jqassistant:scanするのが吉

参考リンク

jQAssistant GitHub
https://github.com/jqassistant

neo4jのパッケージ入手はこちらから
https://neo4j.com/deployment-center/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?