什么是超广口瓶?


Answers:


357

Überabove或的德语单词over(实际上与英语同源over)。

因此,在这种情况下,uber-jar是一个“ over-jar”,比简单的JAR (a)高出一个级别,JAR (a)定义为在一个JAR文件中同时包含您的软件包及其所有依赖项。可以认为该名称来自与ultrageek,超人,超空间和元数据相同的稳定器,它们的含义均类似“超出正常范围”。

其优点是,你可以发布你的尤伯杯罐子,并在所有与否依赖于目标安装不在乎,因为你的尤伯杯罐子其实没有依赖关系。

您自己的东西在uber-jar中的所有依赖性也都在该uber-jar中。这些依赖项的所有依赖项也是如此。等等。


(a)我可能不必向Java开发人员解释什么是JAR,但是为了完整起见,我将其包括在内。它是一个Java存档,基本上是一个文件,通常包含许多Java类文件以及相关的元数据和资源。


奇怪...我是德国人,当然知道“über”一词及其含义。但是为什么在Maven上下文中使用它呢?在这种情况下,这意味着一个或多个事物被聚集在一起,并且可以通过生成的jar访问。不幸的是,这个提示并没有解决我的专家问题;-)
Bjoern 2015年

7
BTW,überover在老日耳曼一个系统的声乐转变也可在这些字对观察到的结果:geben/giveleben/livehaben/haveheben/heave等等。
biziclop,2015年

很聪明的描述:示例链接
Veniamin

考虑到我对教育人们的忧虑,我决定删除一些人一直抱怨的东西。我仍然在德语的上下文中定义uber,但是(有点冗长的)历史课现在已经消失了:-)
paxdiablo

57

Paxdiablo的定义确实很好。

此外,如果您确实要分发软件并且不希望客户必须自己下载依赖项,请考虑有时提供一个uber-jar很有意思。缺点是,如果他们自己的策略不允许使用某些库,或者必须绑定一些额外的组件(slf4j,与系统兼容的库,arch specialiez库等),这可能会给他们增加困难。

您可以执行以下操作:

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

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

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


57

ubar jar也称为胖jar,具有依赖性的jar。
有三种常见的构造uber jar的方法:

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

更多


4

一个自包含的可执行Java归档文件。对于WildFly Swarm uberjars,它是一个单个.jar文件,其中包含您的应用程序,支持该应用程序所需的WildFly部分,一个内部Maven依赖项存储库以及一个用于引导所有应用程序的垫片。看到这个


0

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

–仅包含您在代码编辑器中实际输入的位,而没有其他内容。

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

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

脂肪/尤伯杯 -包含位您字面上写自己PLUS您的应用程序的直接依赖PLUS为“自身”运行你的应用程序所需的位。

资料来源:Dzone的文章

可视化的JAR类型

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.