FAT JAR を作る方法は Maven では大きく 3 種類あります。
- maven-shade-plugin(素の Java で最も一般的)
- maven-assembly-plugin(古いが柔軟)ZIP/TAR も作れる。
- spring-boot-maven-plugin(Spring Boot 専用)
Spring Boot プロジェクトの場合は 3 の spring-boot-maven-plugin を使うのが標準です。
1.maven-shade-plugin(素の Java で最も一般的)
素の Java プロジェクトで FAT JAR を作る場合、shade plugin が最も標準的です。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.oha_yo.sample.hikaricp.DbTest2</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.maven-assembly-plugin(古いが柔軟)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.oha_yo.sample.hikaricp.DbTest2</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
この場合以下のような2つのJARが作成されますが、FAT Jarは「*-jar-with-dependencies.jar」の方です。(仕様上2つ作成される事になっています。ファイル名が気に入らない場合自分でリネームするのがスマートです)
target/*-jar-with-dependencies.jar
target/*.jar
Spring Boot Parent を使う
Spring Boot 3.x では @SpringBootApplication を持つクラスが自動検出されるため、mainClass を書く必要はありません。そのためとてもシンプルです
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
決しておすすめはしませんが動作します
Sprong Bootを使わない(素のSpring )でも素のJAVAプログラムであってもspring-boot-maven-plugin の repackage を使えば FAT JAR は作る事ができます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.oha_yo.sample.hikaricp.DbTest2</mainClass>
</configuration>
</plugin>
</plugins>
</build>
この裏技方式(spring-boot-maven-plugin の repackage を素の Java で使う)では、 Spring Boot Loader が毎回起動するため “無駄な処理は走る” が、 アプリ自体は正常に起動します。

