注意:请在将此问题标记为重复之前确保您知道可执行 JAR 和 fully executable SpringBoot JAR 之间的区别.
The official Spring Boot documentation描述了如何构建完全 可执行的 JAR。然后生成的 JAR 文件可以从 /etc/init.d/
链接并作为普通的 unix 服务启动/停止/重新启动/状态,无需额外的脚本或工具,如 JSVC。
但生成的 JAR 包含所有库,并且大小足够大(在我的例子中为 70Mb+)。
我想生成这种没有库的完全可执行 JAR,然后能够在 Linux 上将其作为 SystemV 服务运行并以某种方式链接外部库 (JAR)。
更新
我想减小 Artifact 大小以加快部署->测试->修复周期。有时我通过移动网络工作,大文件会显着降低我的工作速度。
如果没有简单的配置属性或配置文件或命令行选项,我会使用一种 hack。
一开始,我可以生成一个包含所有依赖项的构建。 然后我可以解压缩它并将所有库移动到一个特殊的文件夹中。
然后我需要以某种方式将它再次打包为完全可执行文件,并通过指向包含库的文件夹运行。
我不认为这可以通过 jar
实用程序来完成,因为 file
实用程序将完全可执行的 jar 识别为 data
$ file fully-executable.jar
file fully-executable: data
不像通常的 jar
$ file usual.jar
usual.jar: Java Jar file data (zip)
最佳答案
您可能需要考虑使用 Spring Boot Thin Launcher .它使用您的应用程序代码创建一个 jar 文件,但不包含任何依赖项。它添加了一个特殊的瘦启动器,它知道如何在执行 jar 时从远程 Maven 存储库或从本地缓存解析应用程序的依赖性。根据您想要执行的操作的描述,您将使用本地缓存选项。
Spring Boot 的 Maven 插件生成使用瘦启动器的完全可执行 jar 的配置如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-thin-layout</artifactId>
<version>1.0.3.RELEASE</version>
</dependency>
</dependencies>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
关于java - SpringBoot完全可执行的jar,内部没有依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44707574/