mavenでプラットフォーム依存のassemblyを生成する
Mavenのassemblyプラグインで、成果物を作成する際に、OSごとに異なる配布物を生成したいというのままある事です。例えば、MacOS用のhoge-macosx-bin.zipと、windows用のhoge-win32-bin.zipを別に生成したいとしましょう。
その場合、pom.xmlの方で以下のようにfinalNameを指定します。
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <finalName>${project.artifactId}-${version}-${os.name}-${os.arch}</finalName> <descriptors> <descriptor>src/main/assembly/bin.xml</descriptor> <descriptor>src/main/assembly/src.xml</descriptor> </descriptors> </configuration> </plugin>
OS名は、javaのシステムプロパティのos.nameから取ってきますので、Mac OS Xの場合「Mac OS」のように空白が入ってしまいますが、まあ良しとしましょう。os.archはアーキテクチャ名で、例えば上からは以下の2ファイルが生成されます。
ただ、この場合、アセンブリディスクリプタsrc.xmlで作成している-src.zipにもOS名等が入ってしまいました。これで困る場合、たとえば-bin.zipにはOS名を含め、-src.zipにはOS名を含めたくない場合はどうするかというと、binの方のアセンブリディスクリプタファイル(src/main/assembly/bin.xml)の方だけに
<assembly> <id>${os.name}-${os.arch}-bin</id>
とこうすれば良いわけです。