Gradle中的uberJar,fatJar和shadowJar有什么区别?

Dan*_*lla 10 java build gradle maven

我想知道我什么时候应该使用哪个.我知道他们都汇集了所有依赖类,但它们如何彼此不同?

osh*_*hai 13

这些术语有时可以互换使用,但通常指:

  • Fat jar(也称为Uber jar) - 用于描述一个 jar,该 jar 将依赖 jar 中的所有类直接压缩在正确的目录结构中,而不是其他 jar 中。这是一个很好的解释在这里

  • Shaded jar(或shaded classes)——通常是指更改类字节码以更改类的包名称的过程,并且在jar中使用时也会进行修改。它用于将类链接到其他类的特定版本并避免版本冲突。它可以由Maven Shade Plugin创建。阴影 jar 不需要包含所有需要的依赖项。

gradle这个阴影插件可以同时生成脂肪罐子和瓶子的阴影,以及同为行家阴影插件。我想这就是人们混合使用这些术语的原因。

注意:我见过将 fat jar 称为 jar 的案例,其中包含依赖项作为打包的 jars。


Tun*_*aki 1

没有任何区别。这些术语都是彼此的同义词。

术语“uber-jar”可能在文档中更常用(以maven-shade-plugin文档为例),但“fat-jar”也被广泛使用。