小编典典

SpringBoot完全可执行的jar,内部没有依赖项

spring-boot

注意:在将这个问题标记为重复之前,请确保您知道 可执行JAR 完全可执行SpringBoot
JAR
之间的区别。

Spring Boot的官方文档描述了如何构建 完全
可执行的JAR。然后,可以将生成的JAR文件/etc/init.d/作为普通的Unix服务从其链接和启动/停止/重新启动/状态化,而无需使用其他脚本或工具(例如JSVC)。

但是生成的JAR包含所有库,并且可以足够大(在我的情况下为70Mb +)。

我想生成不带库的 完全 可执行的JAR,但是然后能够在Linux上作为SystemV服务运行它并以某种方式链接外部库(JAR)。

更新

我想减小工件的大小,以加快部署->测试->修复周期。有时我正在通过移动网络工作,而大文件大小会大大降低我的工作速度。

如果没有简单的配置属性,配置文件或命令行选项,我会使用一种技巧。

首先,我可以生成一个包含所有依赖项的构建。然后,我可以将其解压缩并将所有库移动到一个特殊的文件夹。

然后,我需要以某种方式将其重新打包为完全可执行文件,然后指向带有库的文件夹运行。

我不认为这可以使用jar实用file程序完成,因为实用程序将完全可执行的jar识别为data

$ file fully-executable.jar
file fully-executable: data

不像通常的jar

$ file usual.jar
usual.jar: Java Jar file data (zip)

阅读 471

收藏
2020-05-30

共1个答案

小编典典

您可能要考虑使用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>
2020-05-30