web-dev-qa-db-ja.com

内部に依存関係のないSpringBoot完全実行可能jar

注:この質問を重複としてマークする前に、実行可能JAR完全に実行可能なSpringBootJAR の違いを確認してください。

Spring Bootの公式ドキュメント完全に実行可能JARをビルドする方法について説明しています。次に、生成されたJARファイルを/etc/init.d/からリンクし、JSVCなどの追加のスクリプトやツールを使用せずに、通常のUNIXサービスとして開始/停止/再起動/ステータスを取得できます。

ただし、生成されたJARにはすべてのライブラリが含まれており、サイズが十分に大きくなる可能性があります(私の場合は70Mb +)。

ライブラリなしでそのような完全に実行可能JARを生成したいのですが、Linux上でSystemVサービスとして実行し、何らかの方法で外部ライブラリ(JAR)をリンクできるようにします。

[〜#〜]更新[〜#〜]

デプロイ->テスト->修正サイクルをスピードアップするために、アーティファクトのサイズを小さくしたいと思います。モバイルネットワーク経由で作業しているときに、ファイルサイズが大きいと、ジョブの速度が大幅に低下することがあります。

単純な構成プロパティ、プロファイル、またはコマンドラインオプションがない場合は、一種のハックを使用します。

最初に、すべての依存関係を含むビルドを生成できます。次に、それを解凍して、すべてのライブラリを特別なフォルダに移動できます。

次に、なんらかの方法で完全に実行可能として再度パックし、ライブラリのあるフォルダーをポイントして実行する必要があります。

jarユーティリティは完全に実行可能なjarをfileとして認識するため、これをdataユーティリティで実行できるとは思いません。

$ file fully-executable.jar
file fully-executable: data

通常の瓶とは異なり

$ file usual.jar
usual.jar: Java Jar file data (Zip)
9
gumkins

Spring Boot Thin Launcher の使用を検討することをお勧めします。アプリケーションコードを使用してjarファイルを作成しますが、その依存関係は作成しません。 jarの実行時に、リモートMavenリポジトリまたはローカルキャッシュからアプリケーションの依存関係を解決する方法を知っている特別なシンランチャーを追加します。やりたいことの説明から判断すると、ローカルキャッシュオプションを利用します。

シンランチャーを使用する完全に実行可能なjarを生成するためのSpringBootのMavenプラグインの構成は次のようになります。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot.experimental</groupId>
                    <artifactId>spring-boot-thin-layout</artifactId>
                    <version>1.0.3.RELEASE</version>
                </dependency>
            </dependencies>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>
14
Andy Wilkinson