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

标签 java maven gradle build

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

最佳答案

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

  • 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。

关于java - Gradle 中的 uberJar、fatJar 和 shadowJar 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779185/

相关文章:

java - 如何使用freebase api获取一个城市的所有旅游景点?我只能从返回的 JSON 中获取 10

java - 将一个 Maven 项目添加到另一个 Maven 项目中导致无法解析依赖项错误

android - 如何设置 gradle 任务来提取 dex jar 和 c 库?

java - Spring MVC 中带有变量文件名的 Jsp 包含文件指令

java - 如何在不使用 glRotateF 内置函数的情况下在 JOGL 中绕 Z 轴旋转图像

java - 如何使用 Java 中的 REST API 为 DocuSign 中的复选框定义条件字段?

java - 使用 JSF 进行 Spring 注入(inject)

java.xml XMLConstants.FEATURE_SECURE_PROCESSING 无法解析或不是字段

jenkins - 将动态参数传递给Gradle Jenkins插件

angular - 使用 Gradle 的 spring bootRun 和 Angular buildWatch