什么是超级瓶子?
我正在阅读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超级瓶子:
- 无阴影:解压缩所有JAR文件,然后将其重新打包到单个JAR中。 适用于Java的默认类加载器。 工具maven-assembly-plugin
- 着色:与无阴影相同,但重命名(即“阴影”)所有依赖关系的所有包 。 适用于Java的默认类加载器。 避免一些(不是全部)依赖版本的冲突。 工具maven-shade-plugin
- JAR的JAR:最终的JAR文件包含embedded其中的其他JAR文件。 避免依赖版本冲突。 所有资源文件都被保留。 工具: Eclipse JAR文件导出器
为更多
自包含的可执行Java归档文件。 在WildFly Swarm uberjars的情况下,它是一个单独的.jar文件,其中包含您的应用程序,支持它的WildFly部分,依赖关系的内部Maven存储库,以及用于引导所有这些的Shim。 看到这个