3

注意:在将此问题标记为重复项之前,请确保您知道可执行JARfully executable SpringBoot JAR之间的差异。SpringBoot完全可执行jar无内部依赖关系

The official Spring Boot documentation描述了如何构建可执行JAR的完全。然后生成的JAR文件可以从/etc/init.d/链接起来,并作为普通的unix服务启动/停止/重新启动/静态化,而无需其他脚本或JSVC工具。

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

我想生成这样的完全可执行JAR没有库,但然后能够运行它作为Linux上的SystemV服务和以某种方式链接外部库(JAR)。

UPDATE

我想降低成本,以加快deploy->测试 - >修正循环的工件尺寸。有时我通过移动网络工作,大文件大小可以显着降低我的工作速度。

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

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

然后我需要将它作为完全可执行文件再次打包并运行指向带库的文件夹。

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

为什么?然后,你只需要维护所有的外部依赖关系,这将需要另一个部署步骤等。 – Gregg

+0

@Gregg我已更新该帖子。请让我知道如果它仍然不清楚。 – gumkins

+0

您可以将其作为爆炸罐执行。因此,您可以创建胖罐,解压缩它,仅部署所需的工件,将其余的“缓存”。看到这篇文章的类似问题:http://bsideup.blogspot.com/2015/04/spring-boots-fat-jars-vs-docker.html – Gregg

回答

6

你可能要考虑使用Spring Boot Thin Launcher我不认为这可以jar工具来完成,因为file实用承认完全可执行的JAR文件作为data

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

不同于通常罐子。它使用您的应用程序代码创建了一个jar文件,但没有任何依赖关系。它增加了一个特殊的瘦启动器,知道如何在执行jar时从远程Maven仓库或本地缓存中解析应用程序的依赖关系。根据你想要做什么的描述来判断,你可以使用本地缓存选项。

春天启动的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>