Maven Assembly Pluginを使って、特定のリソースをjar形式で配布する #Maven

概要

DDLなどのリソースがアプリケーションとリポジトリ(プロダクト)が別で管理されている場合に、別プロジェクトからそのリソースを参照したい場合があると思います。

例えば、UnitTest等の利用等が考えられます。

二重管理を避けるために、jar形式でリソースを配布するようにすれば、参照側では依存関係に追加するだけで済み、Mavenのバージョン管理に乗っかることも可能になります。

Maven Assembly Plugin を使えば、特定のディレクトリをjarやzipで固めることができるようになります。

pom.xml

Assembly Pluginを追加します。

<build>
    <plugins>
        <!-- 中略 -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <!-- 成果物の名前にassemblyがidを振ってしまうのを無効にする -->
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <!-- include/excludeなどの設定は外部ファイルに記述する -->
                    <descriptor>.assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <!-- packageフェーズでassemblyのゴールを呼び出すことで、jarにリソースを同梱させる -->
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

assembly.xml

includeやexcludeなどの設定は外部ファイルに記述します。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd
http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 ">

    <id>assembly-sample</id>
    <formats>
        <format>jar</format>
    </formats>
    <!-- ディレクトリ階層をプロジェクトルートにするかどうか -->
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <!-- 例えばflywayのデフォルトディレクトリのSQLを固めるのであればこんな感じ -->
            <directory>src/main/resources</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>db/migration/*.sql</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>

参考