你能帮忙解释什么是阴影罐子,maven-shade-plugin
有用吗?什么是超级罐。
答案 0 :(得分:20)
我将首先解释一下超级JAR是什么,因为这是阴影解释的基础。
Uber JAR
uber JAR是一个JAR,它包含多个JAR的内容(或者,不太常见的是,其他多个JAR本身)
您的应用程序几乎肯定会使用其他软件包,这些软件包可能会作为JAR提供。使用Maven时,这些依赖关系将表示如下:
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</dependency>
在运行时,您的应用程序将期望在其类路径中找到此JAR中包含的类。
您可以创建一个包含来自这些依赖JAR的所有类等的超级JAR,然后从这个超级JAR运行您的应用程序,而不是将每个依赖JAR与您的应用程序一起发送。
<强>底纹强>
Shading提供了一种创建超级JAR并重命名超级JAR包含的包的方法。如果您的超级JAR很可能被用作另一个应用程序中的依赖项,那么uber JAR中的依赖类版本可能会与此其他应用程序中相同依赖项的版本冲突。着色有助于通过重命名超级JAR中的包来避免任何此类问题。
例如:
Foo
库的v1.0.0的超级JAR。Bar
Bar
应用程序对Foo
有自己的依赖关系,但在该库的v1.2.0上。 现在,如果Foo
的版本1.0.0和1.2.0之间存在任何冲突,我们可能会遇到问题,因为Bar
的所有者无法依赖将加载哪一个,因此代码将行为不当或您的代码 - 在他们的应用程序中运行时 - 将会出错。
着色有助于避免此类问题,并且还允许Foo
的提供程序明确说明它使用的依赖库的版本。
maven-shade-plugin
允许你(a)创建一个超级JAR和(b)遮蔽其内容。
<强>摘要强>
创建超级JAR是一种简化部署过程的有用技术。
着色是超级JAR理念的扩展,通常仅限于使用
的用例