【发布时间】:2017-11-26 05:10:35
【问题描述】:
注意:在将此问题标记为重复问题之前,请确保您知道 executable JAR 和 fully executable SpringBoot JAR 之间的区别。
The official Spring Boot documentation 描述了如何构建完全可执行的 JAR。然后生成的 JAR 文件可以从 /etc/init.d/ 链接,并作为普通的 unix 服务启动/停止/重新启动/状态使用,无需额外的脚本或 JSVC 等工具。
但是生成的 JAR 包含所有库,并且大小可以足够大(在我的情况下为 70Mb+)。
我想在没有库的情况下生成这种完全可执行的 JAR,然后能够在 Linux 上将其作为 SystemV 服务运行并以某种方式链接外部库 (JAR)。
更新
我想减小工件大小以加快部署->测试->修复周期。有时我通过移动网络工作,大文件会显着降低我的工作速度。
如果没有简单的配置属性或配置文件或命令行选项,我会使用一种 hack。
一开始,我可以生成一个包含所有依赖项的构建。 然后我可以解压缩并将所有库移动到一个特殊文件夹。
然后我需要以某种方式再次将其打包为完全可执行文件并指向包含库的文件夹来运行。
我认为 jar 实用程序无法做到这一点,因为 file 实用程序将完全可执行的 jar 识别为 data
$ file fully-executable.jar
file fully-executable: data
不像一般的罐子
$ file usual.jar
usual.jar: Java Jar file data (zip)
【问题讨论】:
-
为什么?然后你只需要在外部维护所有依赖项,这将需要另一个部署步骤,等等。
-
@Gregg 我已经更新了帖子。如果还不清楚,请告诉我。
-
你可以将它作为一个爆炸的jar来执行。因此,您可以创建 fat jar,解压缩,只部署您想要的工件,将其余部分“缓存”。有关类似问题,请参阅本文:bsideup.blogspot.com/2015/04/…
-
@JarrodRoberson 这根本不是重复的。我知道如何创建一个简单的 JAR 可执行 JAR。但我问的是完全可执行的 JAR。我已经解释了它们之间的区别。
-
@JarrodRoberson 完全可执行的 jar 文件和可执行的 jar 文件之间存在差异。这两个术语都存在于 Spring Boot 的文档中。前者在文件中附加了一个 bash 脚本,可以使用
./foo.jar运行。后者不能也只能使用java -jar foo.jar运行。我重新打开了这个问题,因为它不是重复的
标签: java maven spring-boot executable-jar spring-boot-maven-plugin