SpringBoot完全可执行jar,里面没有依赖项

gum*_*ins 8 java executable-jar maven spring-boot spring-boot-maven-plugin

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

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

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

我想生成没有库的完全可执行的JAR,但是能够在Linux上以SystemV服务的形式运行它并以某种方式链接外部库(JAR).

UPDATE

我想减少工件大小,以加快deploy-> test-> fix cycle.有时我通过移动网络工作,大文件大小会大大降低我的工作速度.

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

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

然后我需要以某种方式再次打包它作为完全可执行文件并运行指向带有库的文件夹.

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

$ file fully-executable.jar
file fully-executable: data
Run Code Online (Sandbox Code Playgroud)

不像通常的罐子

$ file usual.jar
usual.jar: Java Jar file data (zip)
Run Code Online (Sandbox Code Playgroud)

And*_*son 14

您可能需要考虑使用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>
Run Code Online (Sandbox Code Playgroud)

  • 这将下载依赖项。maven可以只在另一个文件夹中添加依赖项吗? (2认同)