为什么 gradle 在更新到 gradle 7.3.2 后生成 2 个 jar
Why is gradle generating 2 jars after update to gradle 7.3.2
我将 gradle 更新为 7.3.2 和影子插件:id“com.github.johnrengelman.shadow”版本“7.1.1”。
gradle 6 和旧版本的 shadow 1 在 运行 gradle 构建后生成了单个 fat jar。现在我得到 2 个罐子,1 个不包含其他库的罐子和一个名为“...-all.jar”的胖罐子。
在我的构建中,我有这一行:
build.dependsOn.add("shadowJar")
为什么会这样?如何在没有 -all 扩展名的情况下只获得 1 个胖罐?
有一点需要注意:
我不确定这是否是错误警告,但 IntelliJ 在“dependsOn”上显示以下警告:
No candidates found for method call build.dependsOn.
myProject.myModule
将有两个 JAR:一个来自任务 jar
,另一个来自 shadowJar
。前者只包含您的源代码的字节码,而后者不仅包含字节码,还包含来自第三方的 JAR。
您在旧版本中得到了单个 JAR,因为这两个 JAR 的文件名相同。 shadowJar
生成的一个简单地覆盖了另一个。您可以在 ./gradlew build
期间继续检查其大小。我认为这种行为是 Shadow 插件中的一个错误,后来在较新的版本中修复了。我注意到它是因为它只发生在 Linux 中,而不是在 MacOS 中(或者在 MacOS 中不在 Linux 中,我只是不记得了)。此 JAR 覆盖确实影响了 Gradle 缓存机制。
您可以通过设置 archiveClassifier
:
来更改输出名称
shadowJar {
archiveClassifier.set('')
}
参考资料
我将 gradle 更新为 7.3.2 和影子插件:id“com.github.johnrengelman.shadow”版本“7.1.1”。 gradle 6 和旧版本的 shadow 1 在 运行 gradle 构建后生成了单个 fat jar。现在我得到 2 个罐子,1 个不包含其他库的罐子和一个名为“...-all.jar”的胖罐子。 在我的构建中,我有这一行:
build.dependsOn.add("shadowJar")
为什么会这样?如何在没有 -all 扩展名的情况下只获得 1 个胖罐?
有一点需要注意: 我不确定这是否是错误警告,但 IntelliJ 在“dependsOn”上显示以下警告:
No candidates found for method call build.dependsOn.
myProject.myModule
将有两个 JAR:一个来自任务 jar
,另一个来自 shadowJar
。前者只包含您的源代码的字节码,而后者不仅包含字节码,还包含来自第三方的 JAR。
您在旧版本中得到了单个 JAR,因为这两个 JAR 的文件名相同。 shadowJar
生成的一个简单地覆盖了另一个。您可以在 ./gradlew build
期间继续检查其大小。我认为这种行为是 Shadow 插件中的一个错误,后来在较新的版本中修复了。我注意到它是因为它只发生在 Linux 中,而不是在 MacOS 中(或者在 MacOS 中不在 Linux 中,我只是不记得了)。此 JAR 覆盖确实影响了 Gradle 缓存机制。
您可以通过设置 archiveClassifier
:
shadowJar {
archiveClassifier.set('')
}