部署spring boot fat jar

时间:2016-10-02 20:19:04

标签: java spring-boot

我有一个弹簧启动应用程序,它在生产环境中运行良好,但最近我有一些关于胖罐部署策略的问号。胖罐的总大小约为80 MB,因为它全部捆绑为单罐,每次即使我换了一行,也重新部署了这个80 MB的包。如何将这个胖罐分成一个主jar和/ lib目录中的其他罐子(我不是由我开发的)。我有什么选择?

1 个答案:

答案 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>