如何理解关于可执行jar

时间:2016-03-23 07:49:02

标签: java spring jar spring-boot

我是Spring Boot的新手,我看到了关于spring-boot的可执行jar。 它说:

  

可执行jar和Java

     

Java没有提供任何加载嵌套jar文件的标准方法(即   jar文件本身包含在jar中)。这可以   如果你想分发一个自给自足的问题   应用

     

为了解决这个问题,许多开发人员使用“超级”罐子。一个超级罐子   只需将所有类中的所有类打包到一个存档中。该   这种方法的问题是很难看出哪个   您实际在应用程序中使用的库。它也可以   如果使用相同的文件名(但内容不同)有问题   在多个罐子里。

     

Spring Boot采用不同的方法,允许您实际嵌套   直接罐子。

我想知道超级罐子或肥胖罐子是否有一些缺点,即我们必须重新部署整个超级罐子,可能会遇到关于NoSuchMethodError的麻烦。如何从超级罐子中获取Spring启动可执行罐子。由于它有许多缺点,为什么弹簧靴仍然使用这种类型的罐子?

1 个答案:

答案 0 :(得分:3)

使用Spring Boot,您可以使用spring-boot-maven-plugin或spring-boot-gradle-plugin,它可以使用所有依赖项重新打包JAR。这叫做胖JAR。这与优步JAR不同。

Spring Boot打包:包含JAR依赖关系的JAR存档。 Uber JAR:包含所有依赖项的已编译类文件的JAR存档。

所以Spring Boot就像带有嵌入式tomcat的WAR。这样您就可以将其作为JAR执行。这变成了托管云原生应用程序的最现代方法。

如果你使用的是API不兼容版本的传递依赖,理论上你可以得到NoSuchMethodError,但是这个问题也存在于WAR包装中。