JavaのWebアプリケーションやSpring Bootバッチは、ビルドすると依存ライブラリ(外部jar)も同梱された一つのwarやjarが生成されますが、Spring Batchの場合は依存ライブラリはjarに同梱されないため、別途ライブラリだけリリースする必要があるためめんどい。
依存ライブラリが増えた場合に、jarのリリース忘れがあったりするので危険。
やりたいこと
Spring Batchアプリケーションのビルドする際に依存ライブラリも同梱したjarを生成したい。
ビルドツール
Maven
やり方
eclipse-jarinjarloader を使用する。
pom.xml に <properties> と <build>、<repository> を下記のように記載(追記)する。
・・・
<properties>
<main.class>org.springframework.batch.core.launch.support.CommandLineJobRunner</main.class>
<jarinjarloader.version>1.0</jarinjarloader.version>
</properties>
<build>
<finalName>sample-spring-batch</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/classes/lib
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>test</includeScope>
</configuration>
</execution>
<execution>
<id>unpack</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.raisercostin</groupId>
<artifactId>eclipse-jarinjarloader</artifactId>
<version>${jarinjarloader.version}</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>
${project.build.directory}/classes
</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>
org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
<Rsrc-Main-Class>${main.class}</Rsrc-Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>jcenter-bintray</id>
<name>Bintray JCenter Maven Repository</name>
<url>https://jcenter.bintray.com/</url>
</repository>
</repositories>
・・・
この状態で maven install すると、依存ライブラリが同梱されたjarが生成される。
ただし、Maven Repository に存在しないjarは同梱されないので注意!