我正在阅读Maven文档,偶然发现了super -jar这个名字。
超级罐子是什么意思?它有什么特点/优势?
我正在阅读Maven文档,偶然发现了super -jar这个名字。
超级罐子是什么意思?它有什么特点/优势?
当前回答
Über是德语中“以上”或“超过”的意思(它实际上与英语中的“over”同源)。
因此,在这个上下文中,super - JAR是一个“over-jar”,比简单的JAR (a)高一级,定义为在一个JAR文件中包含包及其所有依赖项的JAR。这个名字可以被认为与ultrageek、superman、hyperspace和metadata来自同一个群体,它们都有类似的“超出正常”的含义。
这样做的好处是,您可以分发您的super -jar,而完全不关心是否在目的地安装了依赖项,因为您的super -jar实际上没有依赖项。
所有你自己的东西在super -jar中的依赖关系也在这个super -jar中。这些依赖关系的所有依赖关系也是如此。等等。
(a)我可能不应该向Java开发人员解释JAR是什么,但为了完整起见,我将包括它。它是一个Java存档,基本上是一个单独的文件,通常包含许多Java类文件以及相关的元数据和资源。
其他回答
根据super - jar文档方法: 有三种构造super - jar的常用方法:
解包所有JAR文件,然后将它们重新打包到一个JAR中。 工具:Maven汇编插件,Classworlds Uberjar
阴影与无阴影相同,但重命名(即“阴影”)所有依赖的所有包。 工具:Maven阴影插件
JAR中的JAR最后的JAR文件包含嵌入其中的其他JAR文件。 工具:Eclipse JAR文件导出器,One-JAR。
Paxdiablo的定义非常好。
另外,如果你真的想发布一个软件,并且不希望客户自己下载依赖项,请考虑交付一个super -jar有时是非常有用的。作为一个缺点,如果他们自己的策略不允许使用某些库,或者如果他们必须绑定一些额外的组件(slf4j,系统兼容库,arch specialiez库,…),这可能会增加他们的困难。
你可以这样做:
基本上是用maven-assembly-plugin maven-shade-plugin更进一步
一个更清洁的解决方案是分别提供他们的库;Maven-shade-plugin已经为此预配置了描述符。这并不复杂(使用maven及其插件)。
最后,一个非常好的解决方案是使用OSGI Bundle。有很多关于这方面的好教程:)
有关进一步的配置,请阅读这些主题:
是否应该在客户端jar中提供依赖库? 构建和部署Clojure应用程序的最佳实践:好的教程?
Über是德语中“以上”或“超过”的意思(它实际上与英语中的“over”同源)。
因此,在这个上下文中,super - JAR是一个“over-jar”,比简单的JAR (a)高一级,定义为在一个JAR文件中包含包及其所有依赖项的JAR。这个名字可以被认为与ultrageek、superman、hyperspace和metadata来自同一个群体,它们都有类似的“超出正常”的含义。
这样做的好处是,您可以分发您的super -jar,而完全不关心是否在目的地安装了依赖项,因为您的super -jar实际上没有依赖项。
所有你自己的东西在super -jar中的依赖关系也在这个super -jar中。这些依赖关系的所有依赖关系也是如此。等等。
(a)我可能不应该向Java开发人员解释JAR是什么,但为了完整起见,我将包括它。它是一个Java存档,基本上是一个单独的文件,通常包含许多Java类文件以及相关的元数据和资源。
乌巴罐也被称为肥罐,即罐与依赖。 制作超级罐子有三种常见的方法:
Unshaded: Unpack all JAR files, then repack them into a single JAR. Works with Java's default class loader. Tools maven-assembly-plugin Shaded: Same as unshaded, but rename (i.e., "shade") all packages of all dependencies. Works with Java's default class loader. Avoids some (not all) dependency version clashes. Tools maven-shade-plugin JAR of JARs: The final JAR file contains the other JAR files embedded within. Avoids dependency version clashes. All resource files are preserved. Tools: Eclipse JAR File Exporter
更多的
不同的名称只是包装java应用程序的方式。
瘦-只包含你字面上输入到你的代码编辑器的位,没有其他。
瘦-包含以上所有的应用程序,加上应用程序对你的应用程序的直接依赖(db驱动程序,实用程序库等)。
中空-薄的逆-只包含运行应用程序所需的位,但不包含应用程序本身。基本上是一个预先打包的“应用程序服务器”,您可以稍后将应用程序部署到其上,其风格与传统Java EE应用程序服务器相同,但有重要区别。
Fat/Uber -包含你自己写的部分,加上你的应用程序的直接依赖项,再加上运行你的应用程序“自己”所需的部分。
来源:Dzone的文章
转载自:https://stackoverflow.com/a/57592130/9470346