PR

Mavenで導入したライブラリ(jar)の依存関係を確認する方法

プログラミング
記事内に広告が含まれています。
この記事でわかること
  • mavenでjarの依存関係を確認する具体的な手順

mavenはライブラリの依存関係を自動で解決して必要なライブラリをダウンロードしてくれるので便利ですよね。

しかし、便利な反面、自分が知らないうちにライブラリが導入され、利用しているライブラリをすべて把握できてない方も多いのではないでしょうか。

脆弱性が発見されたときなど、ライブラリを把握できていないと、自分のシステムに影響があるか調査できないので困ります。

そこでこの記事では、mavenによってプロジェクトに導入されたライブラリを簡単に確認する手順を紹介します。

ライブラリのバージョンも併せて確認できますので、開発者にとって役立つ内容となっています。

ぜひ最後までご覧ください。

確認対象のpom.xml

以下のpom.xmlが配置されたプロジェクトに対して確認していきます。

内容はシンプルで、SpringとJDBC、コネクションプールライブラリのHikariCPを導入しただけのpom.xmlとなっています。プロジェクト名は「my-project」とし、 maven-shade-pluginを利用することで生成されるjarに必要なjarを含ませます。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <hikaricp.version>5.0.1</hikaricp.version> <!-- HikariCPのバージョンを指定 -->
    </properties>

    <dependencies>
        <!-- HikariCP -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>${hikaricp.version}</version>
        </dependency>

        <!-- JDBCドライバ(例:MySQL) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <!-- その他の依存関係 -->
        <!-- 例:Spring Frameworkを使用する場合 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.9</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.Main</mainClass> <!-- 実行可能JARのエントリーポイント -->
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

mavenでインストールされたライブラリの確認方法

mavenで導入されたライブラリを確認する方法は難しくありません。ターミナルでコマンドを実行するだけでできます。

実行するコマンド

プロジェクトに導入されたライブラリとバージョンを確認するコマンドはこちらです。

mvn dependency:tree -Dverbose

上記コマンドを実行すると、こちらのような結果が表示されます。

D:\data\test>mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.example:my-project >-----------------------
[INFO] Building my-project 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- dependency:3.7.0:tree (default-cli) @ my-project ---
[INFO] com.example:my-project:jar:1.0-SNAPSHOT
[INFO] +- com.zaxxer:HikariCP:jar:5.0.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] +- mysql:mysql-connector-java:jar:8.0.26:compile
[INFO] |  \- com.google.protobuf:protobuf-java:jar:3.11.4:compile
[INFO] \- org.springframework:spring-context:jar:5.3.9:compile
[INFO]    +- org.springframework:spring-aop:jar:5.3.9:compile
[INFO]    +- org.springframework:spring-beans:jar:5.3.9:compile
[INFO]    +- org.springframework:spring-core:jar:5.3.9:compile
[INFO]    |  \- org.springframework:spring-jcl:jar:5.3.9:compile
[INFO]    \- org.springframework:spring-expression:jar:5.3.9:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.488 s
[INFO] Finished at: 2024-10-31T07:36:11+09:00
[INFO] ------------------------------------------------------------------------

結果の見方

説明が不要で直感的にわかると思いますが、どのライブラリがどのライブラリを利用しているかが階層構造で表示されます。

この結果から、ライブラリが依存しているライブラリの祖先までわかります。

詳細な情報の確認

上記コマンドは、利用されているライブラリの最終的な結果が表示されています。 オーバーライドされたライブラリのバージョンも含めて確認したい場合は、「Dverbose」オプションを指定します。

実行するコマンド

以下のコマンドのようになります。

mvn dependency:tree -Dverbose

こちらのような結果が表示されます。

[INFO] -----------------------< com.example:my-project >-----------------------
[INFO] Building my-project 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- dependency:3.7.0:tree (default-cli) @ my-project ---
[INFO] com.example:my-project:jar:1.0-SNAPSHOT
[INFO] +- com.zaxxer:HikariCP:jar:5.0.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] +- mysql:mysql-connector-java:jar:8.0.26:compile
[INFO] |  \- com.google.protobuf:protobuf-java:jar:3.11.4:compile
[INFO] \- org.springframework:spring-context:jar:5.3.9:compile
[INFO]    +- org.springframework:spring-aop:jar:5.3.9:compile
[INFO]    |  +- (org.springframework:spring-beans:jar:5.3.9:compile - omitted for duplicate)
[INFO]    |  \- (org.springframework:spring-core:jar:5.3.9:compile - omitted for duplicate)
[INFO]    +- org.springframework:spring-beans:jar:5.3.9:compile
[INFO]    |  \- (org.springframework:spring-core:jar:5.3.9:compile - omitted for duplicate)
[INFO]    +- org.springframework:spring-core:jar:5.3.9:compile
[INFO]    |  \- org.springframework:spring-jcl:jar:5.3.9:compile
[INFO]    \- org.springframework:spring-expression:jar:5.3.9:compile
[INFO]       \- (org.springframework:spring-core:jar:5.3.9:compile - omitted for duplicate)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.817 s
[INFO] Finished at: 2024-10-31T09:45:12+09:00
[INFO] ------------------------------------------------------------------------

結果の見方

「-Dverbose」オプションをつけない場合と比べて、()の情報が追加で出力されます。 この情報は、
「pom.xmlの内容に記述はあったが、他のpom.xmlの内容によってオーバーライド(上書き)、または、重複のため排除されたライブラリバージョン」
です。

利用ライブラリの最終結果に至るまでの確認が必要な場合に役立ちそうです。

まとめ

  • 依存関係を確認するときは「mvn dependency:tree」コマンドを利用する
  • 詳細な情報を確認したいときは「-Dverbose」オプションを付与する

mavenは依存関係を自動で解決してくれてとても便利ですが、ライブラリの把握が難しくなりがちです。

システムは作って終わりではなく、脆弱性対応などの運用が必要のため、利用ライブラリを把握が必要不可欠です。

脆弱性対応など、利用ライブラリの把握が必要になったときは、本記事の内容を参考にしてみてください。

本記事が皆様の参考になれば幸いです。

関連記事:LambdaをJavaで作成するには?環境構築方法からデプロイ方法まで徹底解説!

コメント

タイトルとURLをコピーしました