java - Gradle 中的 uberJar、fatJar 和 shadowJar 有什么区别?

我试图了解什么时候应该使用哪个。我知道它们都组装了所有依赖类,但是它们之间有什么不同呢?

最佳答案

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

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

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

gradle shadow plugin可以生成 fat jars 和 shaded jars,对于 maven shaded 插件也是如此。我想这就是人们混合这些术语的原因。

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

https://stackoverflow.com/questions/33779185/

相关文章:

c++ - 在 C++ 中将默认参数值放在哪里?

c++ - std::string 到 char*

c++ - 按降序对 vector 进行排序

c++ - 单例:应该如何使用

php - 在 Git Workflow 中生成 API 文档

c# - 构建软件补丁的好习惯是什么?

c++ - 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows?

build - 使用 RequireJS 的优化器和单个构建文件来生成多个输出

eclipse - 从命令行刷新eclipse

c++ - 结合 C++ 和 C - #ifdef __cplusplus 如何工作?