Maven 依存関係



📦 Maven依存関係管理

プロジェクト開発において、外部ライブラリの利用は不可欠です。しかし、ライブラリの管理は複雑になりがちです。そこで登場するのが、Mavenの強力な機能「依存関係管理」です。この機能を使えば、必要なライブラリを簡単にプロジェクトに追加し、管理することができます。

今回は、Apache Commons Lang 3ライブラリを例に、Mavenでの依存関係の追加方法から、ビルドの仕組み、そして依存関係のツリー表示方法まで、ステップごとに詳しく見ていきましょう。

🧐 依存関係管理の基本

Mavenは、プロジェクトに必要なライブラリ(=依存関係)とその依存関係がさらに必要とするライブラリ(推移的依存関係)を自動的に解決します。

依存関係は、主に以下の場所から取得されます。

  1. ローカルリポジトリ: 📥 Mavenはまず、ローカルマシンにキャッシュされたライブラリを探します。一度ダウンロードされたライブラリはここに保存され、次回からは高速に利用できます。

  2. Mavenセントラルリポジトリ: 🌐 デフォルトで設定されているオンライン上の巨大なライブラリ集積所です。世界中の多くのオープンソースライブラリがここに公開されています。

🔍 依存関係のスコープとは?

Mavenは、依存関係がプロジェクトのどの段階で必要になるかを制御するために、スコープという概念を持っています。よく使われる4つのスコープは以下の通りです。

スコープ説明
compileデフォルト。コンパイル、テスト、実行時に必要。
runtime実行時にのみ必要。コンパイル時には不要。
testテスト時のみ必要。本番コードのコンパイルや実行時には不要。
providedコンテナ(例: Tomcat)が提供するため、コンパイル時には必要だが、実行時には不要。


📝 ステップ1: 依存関係の追加と失敗

外部ライブラリorg.apache.commons.lang3.StringUtilsをプロジェクトで使いたいとします。コードにimport文を追加し、StringUtils.split()メソッドを使ってみましょう。

Application.java

// StringUtilsのインポート
import org.apache.commons.lang3.StringUtils;

public class Application {
    // 文字列の単語数を数えるメソッド
    public int countWords(String words) {
        // StringUtilsを使ってスペースで単語を分割
        String[] splitWords = StringUtils.split(words);
        return splitWords.length;
    }

    public static void main(String[] args) {
        Application app = new Application();
        // countWordsメソッドを呼び出し
        int count = app.countWords("I have four words");
        System.out.println("The word count is: " + count);
    }
}

この状態でビルドを実行すると、当然ながらエラーが発生します。Mavenはorg.apache.commons.lang3ライブラリの存在を知らないため、「パッケージが見つかりません」というエラーを吐き出すのです。

🔎 ステップ2: Maven Centralでライブラリを探す

エラーを解消するために、pom.xmlに依存関係を追加しましょう。

  1. Maven Centralの検索: ブラウザで「Maven Central」と検索し、ウェブサイトにアクセスします。

  2. ライブラリの検索: 検索ボックスに「commons-lang3」と入力して検索します。

  3. 依存関係情報を取得: 検索結果から「org.apache.commons」の「commons-lang3」を見つけ、最新の安定版バージョン(例: 3.14.0)をクリックします。すると、Maven用の<dependency>タグが表示されるので、これをコピーします。

✍️ ステップ3: pom.xmlに依存関係を追加

pom.xmlファイルを開き、<project>タグの中に新しい<dependencies>セクションを追加します。

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.14.0</version>
    </dependency>
  </dependencies>

  <build>
    ...
  </build>
</project>

ヒント: <dependencies>タグは、<version>タグと<build>タグの間に配置するのが一般的です。

ファイルを保存し、mvn clean compileを実行すると、MavenはCentralリポジトリからcommons-lang3ライブラリを自動でダウンロードし、ビルドは無事成功します。


🌳 ステップ4: 依存関係ツリーの確認

プロジェクトが多くの依存関係を持つようになると、それらが互いにどのように関連しているかを知ることは重要です。Mavenは、依存関係のツリー構造を表示する便利なコマンドを提供しています。

ターミナルで以下のコマンドを実行します。

mvn dependency:tree

このコマンドは、プロジェクトが直接・間接的に依存しているすべてのライブラリをツリー形式で表示します。これにより、予期せぬ依存関係やバージョンの競合などを特定するのに役立ちます。

出力結果をファイルに保存したい場合は、以下のようにリダイレクトします。 mvn dependency:tree > dependency-list.txt

💻 変更をGitにプッシュする

作業が完了したら、変更内容をGitにコミットし、プッシュしましょう。

  1. 変更の確認: git status

  2. コミット: git commit -a -m "StringUtilsの使用とcommons-lang3への依存関係を追加"

  3. プッシュ: git push

これで、pom.xmlApplication.javaの変更がリモートリポジトリに反映されます。

Mavenの依存関係管理をマスターすれば、プロジェクトのセットアップが劇的に簡単になります。



前の記事:Maven プラグイン

次の記事:Maven ユニットテスト