前回書いた "optional" な依存性や以前の記事に書いた POM ファイルの書き間違いのために、ライブラリの依存関係をカスタマイズしようとすると結構 POM ファイルがごちゃごちゃしてきます。
Maven2 でライブラリの依存関係を管理するには <dependencyManagement> 要素を用いるのが正規の方法ですが、親 POM ファイル(そのうち解説する予定)に複雑さが固まってしまうので、ここでは別の方法を紹介します(一覧)。
ここで紹介する方法の概要は以下の通り:
- まず、カスタマイズした依存性を記した POM ファイルのみのプロジェクト(以下依存性プロジェクト)を作成する
- 通常のプロジェクトのように、依存性プロジェクトを(ローカル・リポジトリへ)インストールする
- 開発を行うプロジェクトの 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・オープンソース・ビルドツール
- 作者: 野瀬直樹,横田健彦
- 出版社/メーカー: 技術評論社
- 発売日: 2006/12/13
- メディア: 大型本
- 購入: 8人 クリック: 141回
- この商品を含むブログ (97件) を見る
Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集
- 作者: Timothy M. O'Brien,長瀬嘉秀(監訳),株式会社テクノロジックアート
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/08/20
- メディア: 大型本
- 購入: 2人 クリック: 38回
- この商品を含むブログ (38件) を見る