自分用備忘
環境
$ 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のセットアップ
コマンドの方
- neo4jを以下からダウンロード
https://neo4j.com/deployment-center/#:~:text=Launch%20Cloud%20Instance-,Graph%20Database%C2%A0,Self%2DManaged,-Enterprise%2Dgrade%20availability - 解凍して
/usr/local
に配置 - パス通す
export NEO4J_HOME=/usr/local/neo4j-community-5.26.3
export PATH=$NEO4J_HOME/bin:$PATH
Mavenの方
- 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のアプリケーションが起動し
scanやanalyzeの結果を確認することができる
基本的には上記の機能を使うのみで十分
出力結果を他環境に移したい場合
今回、分析対象となるソースコードを受け渡すことなく、scanによって出力したグラフDB用構造のデータのみを受け渡したいというニーズが発生
mvn jqassistant:export-database
というコマンドで出力可能というコメントも見られたが、今回利用しているバージョンでは当該機能の提供は確認できなかった
したがって、
- jQAssistantに内蔵のものではないneo4jインスタンスにデータを一旦読み込ませる
- その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配下のファイルパスが設定されているため、何も指定しないと物理ファイルとして出力するということ
以上により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/