Prev / Next / たまにっき。

Maven2 で作成される jar の MANIFEST.MF に Premain-Class を加える

Category: [Maven2]
2006-10-06

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


Category: [Maven2]