序文
サーバは、企業のイントラネットに配備されている場合は、設定は、非常に小さい展開SpringBoot、アップロード速度は大丈夫ですが、(などのアリクラウド、クラウドサーバ、)公衆ネットワークを展開している場合、それが展開する頭痛があれば、ジャーパッケージの偉大翻訳されていますプロジェクトは、オープンソースコンポーネント(SpringCloud、等)の数を導入し、それがさらに大きくなるであろう。プロジェクトを実行するには、行のいくつかの微調整をしたい場合は、この時間は、それは非常に痛いです
次の方法は、jarファイルの内容を削減するために使用することができます
スリミングの準備
次のように1は、我々はジャーパッケージの予備的な理解を持っている必要があり、その内部構造があります
example.jar
|
+-META-INF
| +-MANIFEST.MF
+-org
| +-springframework
| +-boot
| +-loader
| +-<spring boot loader classes>
+-BOOT-INF
+-classes
| +-mycompany
| +-project
| +-YourClasses.class
+-lib // 依赖库的包
+-dependency1.jar
+-dependency2.jar
実行している場合はBOOT-INF / libには、JARパッケージの読み込みを依存からデフォルトのクラスは、ジャーBOOT-INF /クラスからロードされます。あなたは、外部依存関係の瓶を追加したい場合は、LOADER_PATHは、環境変数を設定することによって達成することができます。
このように、我々は我々が考えていることを確認することができます。
(例えば、ばね依存性、等ドライバデータベース、これらのアップグレードされたバージョンが更新されないなしなど)、それらの依存定数ジャーパッケージは、LIBSのように、別のディレクトリにフラットジャーから取り外され
- あなたがジャーを起動すると、設定・バイ・ステップLOADER_PATH使用LIBSに
java -Dloader.path="libs/" -jar ht-ui-web.jar
このように、私たちの最終的なパッケージのJARパッケージのサイズが大幅に削減されます、だけジャーのこの合理化されたバージョンであることができるの各反復後に更新する必要があります。
私たちは、ポンポンファイルでは無視依存関係を設定する必要があります。
- 設定するには、キーの必要性
MANIFEST.MF
ファイルはlibにパスを追加しました。 - それに続いて、通常のスタートのjarパッケージ。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!--不打包资源文件-->
<!--<excludes>-->
<!--<exclude>*.**</exclude>-->
<!--<exclude>*/*.xml</exclude>-->
<!--</excludes>-->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--MANIFEST.MF 中 Class-Path 加入前缀-->
<classpathPrefix>lib/</classpathPrefix>
<!--jar包不包含唯一版本标识-->
<useUniqueVersions>false</useUniqueVersions>
<!--指定入口类-->
<mainClass>com.XProApplication</mainClass>
</manifest>
<!--<manifestEntries>-->
<!--<!–MANIFEST.MF 中 Class-Path 加入资源文件目录–>-->
<!--<Class-Path>./resources/</Class-Path>-->
<!--</manifestEntries>-->
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
次のようにポンポン完全なファイルの内容があります。。
このプロジェクトは、別のパッケージでターゲットに設定パッケージのlibパッケージとアイテムを完了します。そして、アップロードコンテンツを分離。後で、合理化されたjarファイルのパッケージをアップロードすることができます
`` ``
<!--拷贝依赖 copy-dependencies-->
<!--也可以执行mvn copy-dependencies 命令打包依赖-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--spring boot repackage,依赖 maven-jar-plugin 打包的jar包 重新打包成 spring boot 的jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--重写包含依赖,包含不存在的依赖,jar里没有pom里的依赖-->
<includes>
<include>
<groupId>null</groupId>
<artifactId>null</artifactId>
</include>
</includes>
<layout>ZIP</layout>
<!--使用外部配置文件,jar包里没有资源文件-->
<addResources>true</addResources>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!--配置jar包特殊标识 配置后,保留原文件,生成新文件 *-run.jar -->
<!--配置jar包特殊标识 不配置,原文件命名为 *.jar.original,生成新文件 *.jar -->
<!--<classifier>run</classifier>-->
</configuration>
</execution>
</executions>
</plugin>
</build>
`` `