2016-10-02 5 views
0

私は、実稼働環境でうまく動作するスプリングブートアプリケーションを持っていますが、最近はファットジャーの展開戦略について疑問があります。ファットジャーのサイズは約80 MBです。単一のジャー、私は1つの行を変更するたびに、この80 MBのパッケージが再展開されます。どのようにしてこの大粒の瓶をメインの瓶と他の瓶(私が開発したものではない)に/ libディレクトリで分けることができます。どのような選択肢がありますか?スプリングブートファットジャーのデプロイ

+0

Maven、Gradleはどのビルドツールを使用していますか? – Magnus

+0

私はmavenを使用しています。 – cacert

+0

これは問題なのですか?パッケージを削除すると、基本的にすべての依存関係も削除されます。今、何かをアップグレードするときに、その '/ lib'フォルダにコピーされていることを確認する必要があります。最終的には、その/ libフォルダの古い/欠落している依存関係のために何かが壊れてしまいます。誰かが何かを削除したり、便利に見えるものをコピーしたりします。リポジトリの適切なハウスキーピングを設定するだけです(例えば、最後のxバージョンのみを保存する)。 –

答えて

1

あなたはいくつかのオプションがありますが、最も簡単な方法(and suggested by official docs)はfat jarファイルを抽出することです。

$ unzip -q myapp.jar 
$ java org.springframework.boot.loader.JarLauncher 

これで問題のカップルがありますが、すべてのアプリケーションコードの最初は、今(ではない、それ自身のジャーに)クラスファイルの束になります。
2番目の問題は、まだ多くのユーティリティーを提供していないスプリングブートローダーを使用しており、ファイルシステムを汚染していることです。

もう1つのオプションは、ビルドを変更して必要なものを提供することです。
gradleを使用すると、application pluginをmavenと併用することができます。appassembler pluginをお勧めします。

Appassemblerは、target/appassembler/というディレクトリを作成します。このディレクトリには、起動スクリプトを含むbinディレクトリと、すべての依存関係を持つrepoディレクトリが含まれています。

これを使用するには、spring-boot:repackageタスクを無効にし、appassemblerプラグインにメインクラスが何であるかを伝える必要があります。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>1.10</version> 
      <configuration> 
       <programs> 
        <program> 
         <mainClass>com.example.MyMainClass</mainClass> 
         <id>myappname</id> 
        </program> 
       </programs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

2番目のオプション、ありがとうございます。 – cacert