倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

POM ファイルを書こう! 其ノ伍- 依存性のカスタマイズ

前回書いた "optional" な依存性や以前の記事に書いた POM ファイルの書き間違いのために、ライブラリの依存関係をカスタマイズしようとすると結構 POM ファイルがごちゃごちゃしてきます。

Maven2 でライブラリの依存関係を管理するには <dependencyManagement> 要素を用いるのが正規の方法ですが、親 POM ファイル(そのうち解説する予定)に複雑さが固まってしまうので、ここでは別の方法を紹介します(一覧)。

ここで紹介する方法の概要は以下の通り:

  1. まず、カスタマイズした依存性を記した POM ファイルのみのプロジェクト(以下依存性プロジェクト)を作成する
  2. 通常のプロジェクトのように、依存性プロジェクトを(ローカル・リポジトリへ)インストールする
  3. 開発を行うプロジェクトの POM ファイルに、依存性プロジェクトへの依存性を含める

以下では、以前の記事に書いたcommons-logging-1.1 への依存性に対して、余計なライブラリへの依存性を除去するようにカスタマイズした依存性を作成します。

依存性プロジェクトを作成する


まず、依存性プロジェクトを作成しましょう。 作成場所は適当な場所で結構です。 POM ファイルの書き方は、通常の POM ファイルと同じです。 依存性(<dependencies> 要素)も同様です。 ただし、<project> 要素下に

<packaging>pom</packaging>

を付け加えて下さい:

<?xml version="1.0"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>waman.dependency</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.1</version>

  <!-- <packaging> 要素を付け加える -->
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
      
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
          <groupId>logkit</groupId>
          <artifactId>logkit</artifactId>
        </exclusion>
        <exclusion>
          <groupId>avalon-framework</groupId>
          <artifactId>avalon-framework</artifactId>
        </exclusion>
        <exclusion>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</project>

ちなみに、groupId, artifactId, version は適当に決めてかまいません。 これは開発を行うプロジェクトの POM ファイルで指定します。

依存性プロジェクトをインストールする


依存性プロジェクトは通常のプロジェクトなので、インストールの仕方も同じです。 コマンド・プロンプトを開いて、依存性プロジェクトのルートフォルダ上で

mvn install

というコマンドを実行してください。

カスタマイズした依存性を参照する


最後は、開発を行っているプロジェクトの POM ファイルから上記の依存性プロジェクトへの依存性を設定します。 依存性の設定は、通常のライブラリへの依存性のように <dependencies> 要素から設定します。 ただし、依存性プロジェクトへの依存性には、<dependency> 要素下に

<type>pom</type>

を付け加えて下さい:

<?xml version="1.0"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sample</groupId>
  <artifactId>sample</artifactId>
  <version>1.0</version>

  <dependencies>
    <dependency>
      <groupId>waman.dependency</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
      <!-- <type> 要素を指定 -->
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

別のプロジェクトから同じ依存性を設定したいときでも、上記の依存性プロジェクトへの依存性を含めるだけで、カスタマイズした依存性を設定できます。

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

Apache Maven 2.0入門 Java・オープンソース・ビルドツール


Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集

Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集