Apache Maven

Mavenプロジェクトで「Fat JAR」を作る

FAT JAR を作る方法は Maven では大きく 3 種類あります。

  1. maven-shade-plugin(素の Java で最も一般的)
  2. maven-assembly-plugin(古いが柔軟)ZIP/TAR も作れる。
  3. 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 が毎回起動するため “無駄な処理は走る” が、 アプリ自体は正常に起動します。

スポンサーリンク
タイトルとURLをコピーしました