Maven2 で jar ファイルを作るときに使われる maven-jar-plugin が対応している MANIFEST.MF のエントリは mainClass, addClassPath, addExtentions, classpathPrefix, packageName の 5 だけ なのだが,そこに Premain-Class やら Boot-Class-Path エントリなど自由にエントリを追加したい.
そのためには自前で MANIFEST.MF を用意しておく.pom.xml に書いてある mainClass などととマージできるので,必要なものだけを書いた MANIFEST.MF があればよい.
MANIFEST.MF の内容は以下の通り.置く場所は下の pom.xml と合わせる必要があるが,下の通りだと $basedir/src/main/resources/META-INF/ 以下に置いておく.
Premain-Class: your.package.name.PremainClass Boot-Class-Path: bootClasspath.jar
pom.xml の plugin の設定のところに以下のようなタグを加える.premain は Java 5 以降なので,コンパイル後のクラスファイルのバージョンも 1.5 用にしてるけど,いらないかも.・・・いや,うーん,いるかも.まぁ試していない.
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${basedir}/src/main/resources/META-INF/MANIFEST.MF</manifestFile>
<manifest>
<mainClass>your.MainClass</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
:
</plugins>
<build>
:
これで mvn package すると MANIFEST.MF に Premain-Class が含まれた jar ファイルが出来上がる.
上のようなものだと作成される MANIFEST.MF は以下のようなもの.
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: tamada Build-Jdk: 1.5.0_08 Extension-Name: artifactId Specification-Vendor: organization Implementation-Vendor: organization Implementation-Title: artifactId Implementation-Version: 2.1-SNAPSHOT Main-Class: your.MainClass Class-Path: dependencies-version.jar dependencies1-version.jar Premain-Class: your.package.name.PremainClass Boot-Class-Path: bootClasspath.jar
実行するときはこんな感じ.
$ java -javaagent:hoge.jar SomeClass