什么是超级罐?

时间:2012-08-14 06:42:05

标签: maven uberjar

我正在阅读Maven文档并且遇到了'uber-jar'这个名字。

超级瓶是什么意思,它的特点/优势是什么?

7 个答案:

答案 0 :(得分:304)

Überaboveover的德语单词,与之前的国歌相同:Deutschland, Deutschland, über alles(德国,德国高于一切)。< / p>

因此,在这种情况下,uber-jar是一个“over-jar”,比简单的“jar”高一级,定义为包含你的包所有依赖的包。在一个JAR文件中。这个名称可以被认为来自与ultrageek,超人,超空间和元数据相同的稳定性,它们都具有“超越正常”的相似含义。

优点是您可以分发您的超级jar,而不管是否在目的地安装了依赖项,因为您的超级jar实际上 没有依赖项。

你自己的东西在uber-jar中的所有依赖关系都是也是在那个uber-jar中。这些依赖项的所有依赖项都是如此。等等。

答案 1 :(得分:55)

Paxdiablo定义非常好。

此外,如果您真的想要分发软件并且不希望客户自己必须下载依赖项,请考虑提供超级jar有时非常有趣。作为一个缺点,如果他们自己的策略不允许使用某些库,或者如果他们必须绑定一些额外的组件(slf4j,系统兼容的libs,arch expertiez libs,...),这可能会增加他们的困难

你可以执行:

更清洁的解决方案是单独提供该库; maven-shade-plugin为此预先配置了描述符。这不是更复杂(使用maven及其插件)。

最后,一个非常好的解决方案是使用OSGI Bundle。有很多很好的教程:)

有关进一步配置,请阅读以下主题:

答案 2 :(得分:40)

ubar jar 也称为 fat jar ,即带有依赖关系的 jar。
构建超级罐有三种常用方法:

  1. 无阴影:解压缩所有JAR文件,然后将它们重新打包到一个JAR中。 使用Java的默认类加载器。工具maven-assembly-plugin
  2. 阴影:与无阴影相同,但重命名(即“阴影”)所有依赖项的所有。使用Java的默认类加载器。避免一些(不是全部)依赖版本冲突。工具maven-shade-plugin
  3. JAR的JAR:最终的JAR文件包含其中嵌入的其他JAR文件。避免依赖版本冲突。保留所有资源文件。工具:Eclipse JAR File Exporter
  4. for more

答案 3 :(得分:4)

不同的名称只是打包Java应用程序的方式。

Skinny (瘦) –仅包含您在代码编辑器中实际键入的位,并且不包含其他任何内容。

–包含以上所有内容以及应用对应用的直接依赖关系(数据库驱动程序,实用程序库等)。

空心 –精简的反面–仅包含运行应用程序所需的位,但不包含应用程序本身。基本上是预打包的“应用服务器”,以后可以将其部署到该应用服务器,其样式与传统Java EE应用服务器相同,但有重要区别。

Fat / Uber –包含您从字面上为自己编写的内容 PLUS 应用程序的直接依赖项 PLUS 运行应用程序所需的位“在其自己的”。

来源:Article from Dzone

Visual representation of JAR types

转发自:https://stackoverflow.com/a/57592130/9470346

答案 4 :(得分:1)

自包含的可执行Java归档文件。在WildFly Swarm uberjars的情况下,它是一个包含你的应用程序的单个.jar文件,需要支持它的WildFly部分,一个内部Maven依赖项存储库,以及一个shim来引导它。 see this

答案 5 :(得分:0)

根据uber-JAR文档方法: 构建uber-JAR的常见方法有以下三种:

无阴影解压缩所有JAR文件,然后将它们重新打包为一个JAR。 工具:Maven汇编插件,Classworlds Uberjar

阴影与未阴影相同,但重命名(即“阴影”)所有依赖项的所有程序包。 工具:Maven阴影插件

JAR JAR (JAR的最终结果)最终的JAR文件包含嵌入其中的其他JAR文件。 工具:Eclipse JAR文件导出器,One-JAR。

答案 6 :(得分:0)

对于使用SpringBoot的Java开发人员,ÜBER/ FAT JAR 通常 maven的package phase的最终结果(如果是build task您使用gradle)。

在Fat JAR内可以找到一个META-INF目录,其中MANIFEST.MF文件包含有关Main类的所有信息。更重要的是,在META-INF目录的同一级别上,您会找到BOOT-INF目录所在的lib目录,其中包含所有与应用程序相关的.jar文件