Javaアプリケーションの配布方式
- Webアプリケーション以外の配布方式をよく悩む
- jar-with-dependenciesがいいのか、それともtar.gzなのか
- 設定ファイルを修正したくなるので、tar.gzがいいのかと思ったりもする。
- でも、配布後に設定ファイル修正されてしまうってのも考えものなので、修正していいファイルとそうでないファイルは分けたいような気もする。
- いったん今日は固め方のみ
ベースとなるプロジェクト
- v5-sample
- バッチのサンプルプロジェクト
- jarで固めて実行するだけなのだけれど、packageしたものをNexusなどに登録しておく前提で考えてみた。
maven-assembly-pluginで固めて配布
- 以下のように定義してみる。
(pom.xml)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/bin.xml</descriptor>
<finalName>${artifactId}-${pom.version}</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
- assemblyの定義
(bin.xml)
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>bin</id>
<formats>
<format>tar.gz</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/script</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
</fileSet>
<!-- <fileSet> これ書くと、src/main/resourcesがconfに出力
<directory>src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
</fileSet> -->
<fileSet>
<directory>target</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
(start.sh)
# !/bin/bash
SCRIPT_DIR=$(cd $(dirname $0);pwd)
PARENT_DIR=$(cd $(dirname $0);cd ..;pwd)
AP_CLASSPATH="${PARENT_DIR}/*:${PARENT_DIR}/lib/*"
MAIN_CLASS="org.springframework.batch.core.launch.support.CommandLineJobRunner"
java -cp "${AP_CLASSPATH}" ${MAIN_CLASS} META-INF/jobs/job01.xml job01
- 要は、
- 自分で書いた部分をjarにまとめて、dependencyのjarをlibディレクトリに集める。
- 起動スクリプトをsrc/main/scriptに書いておいて、packageでbin/start.shに移動。
- で、全部をtar.gzで固めて配布(Nexusなどにdeploy)
成果物
- tar.gzの中身は以下のようになる。
drwxr-xr-x 6 xxxx staff 192 1 26 00:48 .
drwxr-xr-x 11 xxxx staff 352 1 26 00:33 ..
drwxr-xr-x 3 xxxx staff 96 1 26 00:33 bin
drwxr-xr-x 37 xxxx staff 1184 1 26 00:33 lib
-rw-r--r-- 1 xxxx staff 12616 1 26 00:20 projectName-5.1.0.RELEASE.jar
- あとは、confどうするか。もっと綺麗な形を悩んでみよう