Javaプロジェクトが利用しているライブラリは、どのように確認すればよいのでしょうか。
単純に直接依存しているライブラリを確認するだけでは不十分です。たとえば、ある依存ライブラリがさらに別のライブラリに依存しているという関係性(推移的依存)があるからです。ほかにも、単純にwarファイルを展開して含まれているjarの名称を確認するだけでは、fat jar(uber-jar) の存在をカバーすることができません。
誤った方法で確認してしまうと、調査漏れが発生してしまう危険性があります。このため、本記事では比較的容易かつ確実性の高い方法を紹介します。
前提
下記の両方を満たしていることが必要です。
- 調査対象がMavenプロジェクトとして構成されていること
- 作業端末において、Mavenにパスが通っていること (参考: WindowsへのMavenインストール)
具体的な手順
例として、Apache Solr Core 8.11.0の依存ライブラリを確認してみます。
2021-12-10, Apache Solr affected by Apache Log4J CVE-2021-44228 によると、Apache Solr releases prior to 8.11.1 were using a bundled version of the Apache Log4J library vulnerable to RCE.
とのことです。このため、8.11.0には log4j 2.15 より前のバージョンが依存ライブラリに含まれているのではないかと思われます。
1. pomファイルの取得
pom(Project Object Model)ファイルとは、Mavenプロジェクトにおける設定を記述したファイルです。通常のMavenプロジェクトでは、pom.xmlというファイル名で利用されています。
今回は、Maven Repository: org.apache.solr » solr-core » 8.11.0 のFiles欄にあるpomファイルをダウンロードします。
2. ライブラリの依存ツリーを出力
pomファイルをダウンロードしたディレクトリに移動し、dependency:treeコマンドを実行します。
mvn -f solr-core-8.11.0.pom -DoutputFile=mvn_dependency_tree.txt dependency:tree
オプションの説明は下記の通りです。
オプション | 説明 |
---|---|
-f | pomファイル名を指定します。指定しない場合は pom.xml が利用されます |
-DoutputFile | 出力先のファイル名を指定します。指定しない場合はコンソールに出力されます |
3. 結果の確認
出力された mvn_dependency_tree.txt ファイルを確認します。
org.apache.solr:solr-core:jar:8.11.0
(中略)
+- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
これらの文字列は、コロン区切りで groupId:artifactId:packaging:version:goal
を意味します。結果を対照させると、下記の表にまとめることができます。
Key | 依存先モジュール |
---|---|
groupId | org.apache.logging.log4j |
artifactId | log4j-core |
packaging | jar |
version | 2.14.1 |
goal | compile |
つまり、org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
という文字列からは、「プロジェクトをcompileするとき」に「org.apache.logging.log4jグループ」の「log4j-coreアーティファクト」の「jarでパッケージ化された」「バージョン2.14.1」に依存していることがわかります。
関連記事