Maven Jar マニフェスト設定
Maven 3.0の参考サイトがないので書いてゆきます。
まぁ基本的には同じなんだけど。
まずはjar:jarのリファレンスから
http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
org.apache.maven.plugins maven-jar-plugin 2.4 ココにいろいろ設定を書いていきます。
manifestタグには以下のページで詳細に記載されてます。
http://maven.apache.org/shared/maven-archiver/index.html
よく使う manifest 設定エレメント
- addClasspath
- classpathLayoutType
- classpathPrefix
- customClasspathLayout
- mainClass
ひとつずつ説明していきます。
addClasspath
■説明
デフォルトfalseで、trueにすると依存関係のあるライブラリをマニフェストのClass-Pathに追加します。
■やってみた
依存関係が必要なのでテキトウにcommonsのライブラリをdependencyした。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version> </dependency> </dependencies>
そんで、manifestタグはこう書く。
<archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive>
実行してマニフェストファイルを確認してみる。
$ cat META-INF/MANIFEST.MF Manifest-Version: 1.0 Built-By: clash_m45 Build-Jdk: 1.6.0_26 Class-Path: commons-lang-2.6.jar commons-io-2.3.jar Created-By: Apache Maven 3.0.4 Archiver-Version: Plexus Archiver
classpathLayoutType
■説明
Class-Pathの記載フォーマットを設定できる。デフォルトは"simple"。他には"repository"と"custom"が設定できる。
"repository"を設定するとMavenリポジトリ構成になる。
"custom"を設定した場合は必ず"customClasspathLayout"エレメントを設定しないとダメ。
■やってみる
simpleはaddClasspathでやったのと同じ。
repositoryは、こんな感じになった。
<archive> <manifest> <addClasspath>true</addClasspath> <classpathLayoutType>repository</classpathLayoutType> </manifest> </archive>
Class-Path: commons-lang/commons-lang/2.6/commons-lang-2.6.jar commons-io/commons-io/2.3/commons-io-2.3.jar
ふぅん・・・。
customはのちほど。customClasspathLayoutと一緒に。
classpathPrefix
■説明
Class-Pathに入れる依存関係にプリフィックスを入れられます。デフォルトは""(空文字)。
■やってみる
<archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib</classpathPrefix> </manifest> </archive>
こんな感じになった。
Class-Path: lib/commons-lang-2.6.jar lib/commons-io-2.3.jar
こうすると依存ライブラリをまとめてlib以下においたりすることができます。
ライブラリ別に変更したりはできなそうだからそんなちょっと複雑なことがしたければcustomになるんだろうな。
customClasspathLayout
■説明
Class-Pathをカスタムできます。classpathLayoutTypeを"custom"にする必要あり。
■やってみる
プロパティとか使えるみたい。普通に文字列で直接指定とかでもOKです。
<archive> <manifest> <addClasspath>true</addClasspath> <classpathLayoutType>custom</classpathLayoutType> <customClasspathLayout>ext/${artifact.artifactId}.${artifact.extension}</customClasspathLayout> </manifest> </archive>
こんな感じになった。
Class-Path: Class-Path: ext/commons-lang.jar ext/commons-io.jar
artifactはdependencyの内容を扱えるみたい。
レイアウトを指定するものみたいだから、直接指定だと2回でちゃうみたい、まぁ問題ないからスルーしてもよし。
mainClass
■説明
Main-Classを設定します。
■やってみる
<archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.hello.App</mainClass> </manifest> </archive>
こんな感じになった。
Class-Path: commons-lang-2.6.jar commons-io-2.3.jar Main-Class: com.hello.App
そんで、実行できるか。
$ java -jar hello-1.0-SNAPSHOT.jar Hello World!
はいおっけー!