概要
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>