什么是超级瓶子?

我正在阅读Maven文档,遇到“超级jar子”这个名字。

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

Über是德国人的一个字,可以是上一首国歌: Deutschland, Deutschland, über alles (德国,德国,高于一切)。

因此,在这种情况下,uber-jar是一个“超级jar”,从简单的“jar”升级到一个层级,定义为一个包含你的包及其所有依赖关系的单个JAR文件。 这个名字可以被认为来源于与ultrageek,superman,hyperspace和metadata相同的稳定性,它们都具有“超越正常”的相似含义。

优点是你可以分发你的超级jar,而不pipe在目的地是否安装依赖,因为你的超级jar实际上没有依赖关系。

你自己的东西在超级jar子里的所有依赖关系也在这个超级jar子里面。 这些依赖关系的所有依赖关系都是如此。 等等。

Paxdiablo的定义是非常好的。

另外,如果你真的想分发一个软件,而不想让客户自己下载依赖关系,那么请考虑提供一个超级jar。 作为一个缺点,如果他们自己的策略不允许使用某个库,或者如果他们必须绑定一些额外的组件(slf4j,系统兼容的库,arch专业库,…),这可能会增加他们的困难。

你可以执行:

  • 基本上用maven-assembly-plugin
  • maven-shade-plugin更进一步

一个更清洁的解决scheme是分别提供这个库。 maven-shade-plugin具有预configuration的描述符。 这并不复杂(使用maven及其插件)。

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

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

  • 你应该在客户端jar中提供依赖库吗?
  • 构build和部署Clojure应用程序的最佳实践:好的教程?

ubar jar也被称为fat jar,jar与依赖关系。
有三种常用的方法来构build超级瓶子:

  1. 无阴影:解压缩所有JAR文件,然后将其重新打包到单个JAR中。 适用于Java的默认类加载器。 工具maven-assembly-plugin
  2. 着色:与无阴影相同,但重命名(即“阴影”)所有依赖关系的所有 。 适用于Java的默认类加载器。 避免一些(不是全部)依赖版本的冲突。 工具maven-shade-plugin
  3. JAR的JAR:最终的JAR文件包含embedded其中的其他JAR文件。 避免依赖版本冲突。 所有资源文件都被保留。 工具: Eclipse JAR文件导出器

为更多

自包含的可执行Java归档文件。 在WildFly Swarm uberjars的情况下,它是一个单独的.jar文件,其中包含您的应用程序,支持它的WildFly部分,依赖关系的内部Maven存储库,以及用于引导所有这些的Shim。 看到这个