Gradle中的uberJar,fatJar和shadowJar有什么区别?
我试图了解我什么时候应该使用哪个。我知道它们都组装了所有依赖类,但是它们彼此之间有什么不同呢?
我试图了解我什么时候应该使用哪个。我知道它们都组装了所有依赖类,但是它们彼此之间有什么不同呢?
这些术语有时可以互换使用,但通常是指:
Fat jar(也称为Uber jar) - 用于描述一个jar,该jar将所有来自依赖jar的类直接压缩在正确的目录结构中,而不是在其他jar中。这里有一个很好的解释。
Shaded jar(或 shaded classes) - 通常是指更改类字节码以更改类的包名称的过程,并且还修改在jar中使用了它。它用于将类链接到其他类的特定版本并避免版本冲突。它可以由Maven Shade Plugin创建。着色 jar 不必包含所需的所有依赖项。
gradle 阴影插件可以生成胖罐和阴影罐,对于 maven 阴影插件也是如此。我想这就是为什么人们把这些术语混为一谈的原因。
注意:我见过将胖罐称为罐子的情况,其中包含作为包装罐的依赖项。