概要
- バッチ用の jar を作成
- ライブラリの jar も lib ディレクトリにまとめて展開用 zip を作る
- 実行可能 jar ではない (Fat.jar, Uber.jar とは厳密には異なる)
- 実行する際は zip を unzip して展開後、java コマンドで
- java -cp "batch.jar;lib/*" <実行クラス> <パラメータ> として起動を想定
環境
- jdk 1.8
- maven 3
- maven-assembly-plugin 2.2
ローカルリポジトリがある場合
- 下記構成にしてプロジェクト内のローカル jar を取得可能
- ${project.basedir}/lib/[localGroupId]/[localArtifactId]/[version]/[localArtifactId]-[version].jar
pom.xml
<repositories>
<repository>
<id>localRepositoryId</id>
<name>localRepositoryName</name>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>localGroupId</groupId>
<artifactId>localArtifactId</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
maven-jar-plugin
- pom.xml
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>false</index>
<manifest>
<mainClass>[main.class.name]</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
maven-assembly-plugin
- pom.xml
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- ファイル名に余計な文字列を付加しない -->
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>assembly/assembly.xml</descriptor>
</descriptors>
<finalName>${project.artifactId}</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
- assemby/assembly.xml
assembly.xml
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>assembly</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<!-- 自身の jar は lib に入れない -->
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
実行
mvn clean package -P [profile]
以上、お疲れ様でした!