我正在阅读Maven文档,偶然发现了uber-jar这个名字。uber-jar是什么意思,它有什么特点/优点?
uber-jar
qqrboqgw1#
Über是德语单词above或over(它实际上与英语over同源)。因此,在这种情况下,uber-jar是一个“over-jar”,比简单JAR(a)高一级,定义为在一个JAR文件中包含您的包 * 和 * 所有依赖项的JAR。这个名字可以被认为是来自于与ultrageek、超人、超空间和元数据相同的稳定,它们都有类似的“超越正常”的含义。好处是你可以分发你的uber-jar,而不关心是否在目的地安装了依赖项,因为你的uber-jar实际上没有依赖项。你自己的东西在uber-jar中的所有依赖关系也在uber-jar中。这些依赖关系的所有依赖关系也是如此。等等。(a)我可能 * 不应该 * 必须向Java开发人员解释JAR是什么,但为了完整起见,我将包括它。它是一个Java归档文件,基本上是一个单个文件,通常包含许多Java类文件沿着相关的元数据和资源。
Über
above
over
ykejflvf2#
有三种常见的构造Uber jar的方法:1.* * Unshaded:解包所有JAR文件,然后重新打包成一个JAR。使用Java的默认类加载器。工具maven-assembly-plugin1. * shaded:与unshaded相同,但重命名(即“shade”)所有依赖项的所有包*。使用Java的默认类加载器。避免某些(不是所有)依赖项版本冲突。工具maven-shade-plugin1.* * JAR中的JAR:**最终的JAR文件包含嵌入其中的其他JAR文件。避免依赖项版本冲突。保留所有资源文件。工具:Eclipse JAR File Exporterfor more
5q4ezhmt3#
PaxDiablo的定义真的很好。此外,如果你真的想发布一个软件,并且不想让客户自己下载依赖项,请考虑提供一个uber-jar有时是非常有用的。如果他们自己的策略不允许使用一些库,或者如果他们必须绑定一些额外的组件(slf 4j,系统兼容库,archspecialiezlibs...),这可能会增加他们的困难。您可以执行以下操作:
一个更干净的解决方案是分别提供他们的图书馆; maven-shade-plugin有预配置的描述符。这并不复杂(使用maven及其插件)。最后,一个非常好的解决方案是使用OSGIBundle。关于这方面有很多好的教程:)如需进一步配置,请阅读以下主题:
n9vozmp44#
Skinny-只包含您在代码编辑器中输入的代码,没有其他内容。精简-包含上述所有内容以及应用对应用的直接依赖关系(数据库驱动程序、实用程序库等)。Hollow-Thin的相反-仅包含运行应用所需的位,但不包含应用本身。基本上是一个预打包的“应用服务器”,您可以稍后将您的应用部署到其中,与传统的Java EE应用服务器具有相同的风格,但具有重要的差异。Fat/Uber-包含您自己编写的内容 * 加上 * 您的应用程序的直接依赖关系 * 加上 *“独立”运行您的应用程序所需的内容。
来源:Article from Dzone
转载自:https://stackoverflow.com/a/57592130/9470346
pobjuy325#
一个独立的、可执行的Java归档文件。在WildFly Swarm uberjars的情况下,它是一个单一的. jar文件,包含您的应用程序,支持它所需的WildFly部分,依赖项的内部Maven存储库,以及引导所有这些的shim。see this
niknxzdl6#
根据uber-JAR文档方法:构造uber-JAR有三种常见方法:
Unshaded解包所有JAR文件,然后重新打包成一个JAR。工具:Maven Assembly插件,Classworlds UberjarShaded与unshaded相同,但重命名(即“shade”)所有依赖项的所有包。工具:Maven Shade插件JAR中的JAR最终的JAR文件包含嵌入其中的其他JAR文件。工具:Eclipse JAR文件导出器,One-JAR。
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文件。
package phase
gradle
build task
META-INF
MANIFEST.MF
BOOT-INF
lib
.jar
7条答案
按热度按时间qqrboqgw1#
Über
是德语单词above
或over
(它实际上与英语over
同源)。因此,在这种情况下,uber-jar是一个“over-jar”,比简单JAR(a)高一级,定义为在一个JAR文件中包含您的包 * 和 * 所有依赖项的JAR。这个名字可以被认为是来自于与ultrageek、超人、超空间和元数据相同的稳定,它们都有类似的“超越正常”的含义。
好处是你可以分发你的uber-jar,而不关心是否在目的地安装了依赖项,因为你的uber-jar实际上没有依赖项。
你自己的东西在uber-jar中的所有依赖关系也在uber-jar中。这些依赖关系的所有依赖关系也是如此。等等。
(a)我可能 * 不应该 * 必须向Java开发人员解释JAR是什么,但为了完整起见,我将包括它。它是一个Java归档文件,基本上是一个单个文件,通常包含许多Java类文件沿着相关的元数据和资源。
ykejflvf2#
有三种常见的构造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
5q4ezhmt3#
PaxDiablo的定义真的很好。
此外,如果你真的想发布一个软件,并且不想让客户自己下载依赖项,请考虑提供一个uber-jar有时是非常有用的。如果他们自己的策略不允许使用一些库,或者如果他们必须绑定一些额外的组件(slf 4j,系统兼容库,archspecialiezlibs...),这可能会增加他们的困难。
您可以执行以下操作:
一个更干净的解决方案是分别提供他们的图书馆; maven-shade-plugin有预配置的描述符。这并不复杂(使用maven及其插件)。
最后,一个非常好的解决方案是使用OSGIBundle。关于这方面有很多好的教程:)
如需进一步配置,请阅读以下主题:
n9vozmp44#
不同的名称只是打包java应用的方式。
Skinny-只包含您在代码编辑器中输入的代码,没有其他内容。
精简-包含上述所有内容以及应用对应用的直接依赖关系(数据库驱动程序、实用程序库等)。
Hollow-Thin的相反-仅包含运行应用所需的位,但不包含应用本身。基本上是一个预打包的“应用服务器”,您可以稍后将您的应用部署到其中,与传统的Java EE应用服务器具有相同的风格,但具有重要的差异。
Fat/Uber-包含您自己编写的内容 * 加上 * 您的应用程序的直接依赖关系 * 加上 *“独立”运行您的应用程序所需的内容。
来源:Article from Dzone
转载自:https://stackoverflow.com/a/57592130/9470346
pobjuy325#
一个独立的、可执行的Java归档文件。在WildFly Swarm uberjars的情况下,它是一个单一的. jar文件,包含您的应用程序,支持它所需的WildFly部分,依赖项的内部Maven存储库,以及引导所有这些的shim。see this
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。
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
文件。