我有一个弹簧启动应用程序,它在生产环境中运行良好,但最近我有一些关于胖罐部署策略的问号。胖罐的总大小约为80 MB,因为它全部捆绑为单罐,每次即使我换了一行,也重新部署了这个80 MB的包。如何将这个胖罐分成一个主jar和/ lib目录中的其他罐子(我不是由我开发的)。我有什么选择?
答案 0 :(得分:1)
您有几个选项,最简单的方法(and suggested by official docs)就是提取胖jar文件。
$ unzip -q myapp.jar
$ java org.springframework.boot.loader.JarLauncher
这有几个问题,首先你的应用程序代码现在将是一堆类文件(不在它自己的jar中)。
第二个问题是你仍在使用spring-boot加载器,它不再提供那么多的实用程序,也污染了文件系统。
另一个选择是更改您的构建以提供您想要的内容 使用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>