2016-10-02 133 views
0

我有一个在生产环境中运行良好的弹簧引导应用程序,但最近我有一些关于脂肪罐部署策略的问题。脂肪罐的总大小约为80 MB,因为它全部捆绑为单个jar,每次我改变一行,这个80 MB的软件包就会重新部署。我如何将这个胖罐子分割到/ lib目录下的主jar和其他罐子中(这些jar不是我开发的)。我有什么选择?部署弹簧引导脂肪罐

+0

你在用什么构建工具,Maven,Gradle? – Magnus

+0

我正在使用maven。 – cacert

+0

这是一个问题,因为?在删除包装时,您基本上也会删除所有依赖关系。现在,在升级某些东西时,您还必须确保将其复制到'/ lib'文件夹中。最终,由于/ lib文件夹中的旧/缺失依赖关系,某人删除了某些内容,将其复制到某些看起来很方便的东西中,从而导致某些内容会被破坏。通常这会给解决它带来麻烦。只需为您的存储库设置适当的内务管理(例如仅保存最后的x个版本)。 –

回答

1

你有几个选择,最简单的方法(and suggested by official docs)就是提取fat jar文件。

$ unzip -q myapp.jar 
$ java org.springframework.boot.loader.JarLauncher 

有几个与这个问题,首先是所有的应用程序代码现在是一堆类文件(而不是在它自己的jar)。
第二个问题是您仍在使用弹簧引导加载程序,该加载程序不再提供多少实用程序,并且还会污染文件系统。

另一种选择是改变你的构建,为你提供你想要的。
随着gradle你可以使用application plugin,与maven,我会建议appassembler plugin

Appassembler生成目录target/appassembler/,其中包含带有启动脚本的bin目录以及包含所有依赖关系的repo目录。

要使用它,你需要禁用spring-boot:repackage任务,并告诉appassembler插件你的主类是什么。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>1.10</version> 
      <configuration> 
       <programs> 
        <program> 
         <mainClass>com.example.MyMainClass</mainClass> 
         <id>myappname</id> 
        </program> 
       </programs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

我会检查第二个选项,谢谢。 – cacert