java 什么是Uberjar?

s2j5cfk0  于 2023-06-28  发布在  Java
关注(0)|答案(7)|浏览(273)

我正在阅读Maven文档,偶然发现了uber-jar这个名字。
uber-jar是什么意思,它有什么特点/优点?

qqrboqgw

qqrboqgw1#

Über是德语单词aboveover(它实际上与英语over同源)。
因此,在这种情况下,uber-jar是一个“over-jar”,比简单JAR(a)高一级,定义为在一个JAR文件中包含您的包 * 和 * 所有依赖项的JAR。这个名字可以被认为是来自于与ultrageek、超人、超空间和元数据相同的稳定,它们都有类似的“超越正常”的含义。
好处是你可以分发你的uber-jar,而不关心是否在目的地安装了依赖项,因为你的uber-jar实际上没有依赖项。
你自己的东西在uber-jar中的所有依赖关系也在uber-jar中。这些依赖关系的所有依赖关系也是如此。等等。
(a)我可能 * 不应该 * 必须向Java开发人员解释JAR是什么,但为了完整起见,我将包括它。它是一个Java归档文件,基本上是一个单个文件,通常包含许多Java类文件沿着相关的元数据和资源。

ykejflvf

ykejflvf2#

    • ubar jar也被称为fat jar**,即* * 有依赖的jar文件。**

有三种常见的构造Uber jar的方法:
1.* * Unshaded:解包所有JAR文件,然后重新打包成一个JAR。使用Java的默认类加载器。工具maven-assembly-plugin
1.
* shaded:与unshaded相同,但重命名(即“shade”)所有依赖项的所有
*。使用Java的默认类加载器。避免某些(不是所有)依赖项版本冲突。工具maven-shade-plugin
1.* * JAR中的JAR:**最终的JAR文件包含嵌入其中的其他JAR文件。避免依赖项版本冲突。保留所有资源文件。工具:Eclipse JAR File Exporter
for more

5q4ezhmt

5q4ezhmt3#

PaxDiablo的定义真的很好。
此外,如果你真的想发布一个软件,并且不想让客户自己下载依赖项,请考虑提供一个uber-jar有时是非常有用的。如果他们自己的策略不允许使用一些库,或者如果他们必须绑定一些额外的组件(slf 4j,系统兼容库,archspecialiezlibs...),这可能会增加他们的困难。
您可以执行以下操作:

一个更干净的解决方案是分别提供他们的图书馆; maven-shade-plugin有预配置的描述符。这并不复杂(使用maven及其插件)。
最后,一个非常好的解决方案是使用OSGIBundle。关于这方面有很多好的教程:)
如需进一步配置,请阅读以下主题:

n9vozmp4

n9vozmp44#

不同的名称只是打包java应用的方式。

Skinny-只包含您在代码编辑器中输入的代码,没有其他内容。
精简-包含上述所有内容以及应用对应用的直接依赖关系(数据库驱动程序、实用程序库等)。
Hollow-Thin的相反-仅包含运行应用所需的位,但不包含应用本身。基本上是一个预打包的“应用服务器”,您可以稍后将您的应用部署到其中,与传统的Java EE应用服务器具有相同的风格,但具有重要的差异。
Fat/Uber-包含您自己编写的内容 * 加上 * 您的应用程序的直接依赖关系 * 加上 *“独立”运行您的应用程序所需的内容。

来源:Article from Dzone

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

pobjuy32

pobjuy325#

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

niknxzdl

niknxzdl6#

根据uber-JAR文档方法:构造uber-JAR有三种常见方法:

Unshaded解包所有JAR文件,然后重新打包成一个JAR。工具:Maven Assembly插件,Classworlds Uberjar
Shaded与unshaded相同,但重命名(即“shade”)所有依赖项的所有包。工具:Maven Shade插件
JAR中的JAR最终的JAR文件包含嵌入其中的其他JAR文件。工具:Eclipse JAR文件导出器,One-JAR。

e0bqpujr

e0bqpujr7#

对于使用SpringBoot的Java开发人员,ÜBER/FAT JAR通常 * 是maven的package phase的最终结果(如果使用gradle,则为build task)。
在Fat JAR中,可以找到一个META-INF目录,其中MANIFEST.MF文件包含有关Main类的所有信息。更重要的是,在META-INF目录的同一级别,您可以找到BOOT-INF目录,其中包含目录lib,并包含作为应用程序依赖项的所有.jar文件。

相关问题