【问题标题】:Deploying spring boot fat jar部署spring boot fat jar
【发布时间】:2016-10-02 20:19:04
【问题描述】:

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

【问题讨论】:

  • 你用的是什么构建工具,Maven,Gradle?
  • 我正在使用 maven。
  • 这是一个问题,因为?删除包装时,您基本上也删除了所有依赖项。现在,在升级某些内容时,您还必须确保将其复制到该 /lib 文件夹。最终,由于/lib 文件夹中的旧/缺少依赖项,某些东西会中断,有人删除了一些东西,复制了一些看起来很方便的东西等等。通常这会给/带来更多麻烦,然后解决。只需为您的存储库设置适当的内务管理(例如,仅保存最后的 x 版本)。

标签: java spring-boot


【解决方案1】:

您有几个选择,最简单的方法 (and suggested by official docs) 就是提取 fat 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>

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 2021-06-03
    • 2020-09-07
    • 2021-02-27
    • 2017-06-18
    • 2015-04-16
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多