我正在阅读Maven文档并且遇到了'uber-jar'这个名字。
超级瓶是什么意思,它的特点/优势是什么?
答案 0 :(得分:304)
Über
是above
或over
的德语单词,与之前的国歌相同: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。
构建超级罐有三种常用方法:
答案 3 :(得分:4)
Skinny (瘦) –仅包含您在代码编辑器中实际键入的位,并且不包含其他任何内容。
瘦 –包含以上所有内容以及应用对应用的直接依赖关系(数据库驱动程序,实用程序库等)。
空心 –精简的反面–仅包含运行应用程序所需的位,但不包含应用程序本身。基本上是预打包的“应用服务器”,以后可以将其部署到该应用服务器,其样式与传统Java EE应用服务器相同,但有重要区别。
Fat / Uber –包含您从字面上为自己编写的内容 PLUS 应用程序的直接依赖项 PLUS 运行应用程序所需的位“在其自己的”。
答案 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
文件