Mar 10, 2009
何かに依存するライブラリを使用する
たまに「何かに依存するライブラリ」というものがある。
例えば、JDK のバージョンに依存する json-lib。
例えば、OS に依存する Eclipse SWT。
この様なライブラリは groupId, artifactId, version 以外の属性で jar を切り替えるものと考えることができる。
素晴らしいことに Maven2 ではこの様な状況も想定し、classifier という属性が用意されている。
pom.xml に classifier を指定することで「依存する何か」で jar を切り替えることができる。
- Maven Documentation - Technical Project Descriptor
- http://maven.apache.org/ref/current/maven-model/maven.html#class_dependency
pom.xml の記述方法
pom.xml の dependency に classifier を指定するだけで良い。 OS 毎に Eclipse SWT を切り替える場合は以下の様になる。 ちなみに、http://repo1.maven.org/maven2/ にはこの例の jar は登録されていない。
<project>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>swt</artifactId>
<version>3.4</version>
<classifier>carbon-macosx</classifier>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
properties を使用すると設定が楽になる。
<project>
<properties>
<swt-classifier>carbon-macosx</swt-classifier>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>swt</artifactId>
<version>3.4</version>
<classifier>${swt-classifier}</classifier>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
リモートリポジトリの構成
リモートリポジトリのディレクトリ構成、pom.xml は classifier 無しのものと同じ。 異なるのは jar ファイルが classifier 毎に複数用意されるというところ。 jar ファイル名は <artifactId>-<version>-<classifier>.jar となる。 上の Eclipse SWT の例の jar を登録する場合、下記の様な構成となる。
$REPOSITORY_HOME
└ org
└ eclipse
└ swt
└ swt
└ 3.4
├ swt-3.4.pom
├ swt-3.4-carbon-macosx.jar
└ swt-3.4-gtk-linux-x86.jar
TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Maven/20090310_01.trackback
writeback message: Ready to post a comment.
