倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Assembly -- assembly の名前を変えてみよう!

前回、実行可能 Jar ファイルの作成の仕方を見ました。

しかしこれだけでは、作成された assembly の名前に必ず "-jar-with-dependencies.jar" という拡張子(?)が付いてしまって、チョット不格好な感じがします。 なので、今回は assembly の名前を変更する方法を模索してみましょう。

<finalName> を変更する (ゴールのパラメータを設定する)


まず、Assembly Plugin に定義されているゴール(assembly:assembly, assembly:attached)に指定できるパラメータを見てみると、 <finalName> というものがあったので、これを変更してみましょう。

具体的な変更の仕方は、<configuration> 要素下に要素名が "finalName" の要素を付け加えて、子テキストに使用したい名前を指定します:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <finalName>s</finalName>    <!-- finalName を指定 -->
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

この設定で assembly を作成すると、

s-jar-with-dependencies.jar

という名前の Jar ファイルが作成されます。 うーむ。

assembly 記述子を作成する


<finalName> を変えるだけでは assembly の名前を変えることは出来ないようなので、assembly 記述子 (assembly descriptor) を新たに作成してみましょう。 手順は

  1. assembly 記述子を作成する
  2. POM ファイルで assembly 記述子を指定する

です。

まず assembly 記述子を作成します。 assembly の作成の仕方は jar-with-dependencies の場合と同じでよいので、jar-with-dependencies の assembly 記述子(Predefined Descriptor に載ってます)をそのまま使いましょう。 ただし、<id> の子テキストを assembly 拡張子(?)に使用したい文字列にします(ここでは "exe"):

<assembly>
  <id>exe</id>  <!-- ここだけ変更 -->
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory></outputDirectory>
      <outputFileNameMapping></outputFileNameMapping>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>target/classes</directory>
      <outputDirectory></outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

これを、例えば "exe.xml" というファイル名で作成し、Maven2 プロジェクト内の「src/assembly」フォルダ下に配置します。

次に、POM ファイルでこの assembly 記述子を指定します。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <finalName>s</finalName>
          <descriptors>
            <descriptor>src/assembly/exe.xml</descriptor>  <!-- assembly 記述子を指定 -->
          </descriptors>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

<descriptorRefs> 要素は削除して下さい*1

これで設定が完了したので、assembly を作成してみましょう。 すると、

s-exe.jar

という Jar ファイルが作成されます。 パチパチ。

バージョンを付け加える (プロパティの使用)


成果物のバージョンは結構大事なので、Jar ファイル名にバージョンを付け加えてみましょう。

これには、POM ファイルの <finalName> の箇所を少しいじります。

<project>
  ...
  <version>1.0</version>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <finalName>s-${version}</finalName>  <!-- プロパティを使って指定 -->
          <descriptors>
            <descriptor>src/assembly/exe.xml</descriptor>
          </descriptors>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

assembly を作成してみると

s-1.0-exe.jar

という Jar ファイルが作成されます。 <finalName> 要素の子テキストに含まれている ${version} の部分は <project> 要素下の <version> 要素の子テキストで置き換えられます。 まぁ、こんな感じで。

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

*1:ちなみに、<descriptorRefs> 要素を残しておけばそれに対応した assembly が作成されます。