倭マン's BLOG

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

Assembly -- ビルドと同時に assembly を作成する

今回は、Maven2 を用いてビルドを行う際に、自動的に assembly が生成されるようにします。

もう少し具体的に。 assembly を作成するのは謂わばパッケージングなので、package フェーズが実行されたときに一緒に assembly が作成されるようにします。

POM ファイルの設定


前回のサンプル POM ファイルを、package フェーズの実行と同時に assembly を作成するように変更(設定を追加)してみましょう:

<?xml version="1.0"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sample</groupId>
  <artifactId>sample</artifactId>
  <version>1.0</version>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <!-- 以下を追加 -->
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>attached</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

変更した部分は 「plugin/executions」 要素です。

<executions> 要素下に <execution> 要素を追加し、その下に <id>, <phase>, <goals> 要素を追加します:

<id>
この処理(実行 execution)の id です。 この POM ファイルを継承した POM ファイルで何らかの処理を割り込ませる際に使います*1
<phase>
この処理を割り込ませるフェーズです。 ここでは、パッケージングと同時に assembly を作成したいので、フェーズに "package" を指定しています*2
<goals>
子要素である <goal> 要素に、上記のフェーズに実際に割り込ませる処理を指定します。 指定できる処理は Assembly Plugin に定義されているゴールです。 ここではそれ用のゴールである "attached" ゴールを指定しています*3。 

assembly の作成


当初の目的通り、以下のように package フェーズを実行すれば assembly が作成されます:

mvn package

当然のことながら、普通に package フェーズを実行したときに行われる処理(compile や test)も行われます。 また、 install フェーズのような、暗に package フェーズを実行するフェーズを実行すると、やはり assembly が作成されます。

assembly が作成されるフォルダassembly 名前回の場合と同じです。 上記のサンプル POM ファイルの場合、「target」フォルダに sample-1.0-jar-with-dependencies.jar という Jar ファイルが作成されます。

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

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

*1:aspect 指向プログラミングの pointcut の宣言みたいなもの。

*2:aspect 指向プログラミングでの pointcut の指定みたいなもの。

*3:aspect 指向プログラミングでの advice の指定みたいなもの。