使用 bootJar 行为覆盖项目的 jar 任务
Posted
技术标签:
【中文标题】使用 bootJar 行为覆盖项目的 jar 任务【英文标题】:Override jar task for project with bootJar behavior 【发布时间】:2021-09-24 20:05:04 【问题描述】:我刚刚将 Gradle SpringBoot 插件版本升级到 2.5.2 并发现了 jar
和 bootJar
任务之间的区别 - 前者构建了一个后缀为 -plain.jar
的工件,而后者构建了一个实际的可执行工件.我还有一个自定义插件,它使用jar
任务的输出,如下所示:
@Override
void apply(Project project)
project.copy
from project.jar
into someDir
鉴于project.jar
是一个实际上不可执行的-plain.jar
,有没有办法修改jar
任务的行为,这样我就不必修改插件了?要复制的工件必须是可执行应用程序。
【问题讨论】:
【参考方案1】:看起来您的插件依赖于 jar
和 bootJar
任务创建同名的 jar 文件。这并不理想。例如,在上面显示的代码中,不能保证bootJar
在复制之前已经构建了可执行的 jar 文件。如果可能的话,我建议更新插件以从bootJar
复制而不是jar
。
如果您无法更改插件,您应该能够通过禁用 jar
任务并删除其分类器来恢复旧行为:
jar
enabled = false
classifier = ''
这将导致jar
任务与bootJar
任务具有相同的输出位置并禁用它,以便一个任务的输出不会被另一个任务覆盖。
【讨论】:
谢谢!这成功了,更新插件现在也在我们的 TODO 上。 另外,为什么只添加 enabled = false 不起作用?为什么我们还需要设置分类器? 分类器是输出文件名的一部分。如果您不将其设置为空字符串,则您的副本将查找名为…-plain.jar
的文件。以上是关于使用 bootJar 行为覆盖项目的 jar 任务的主要内容,如果未能解决你的问题,请参考以下文章
使用 gradle bootJar 而不是 jar 任务并在 Jenkins 中构建失败
Gradle kotlin Springboot多模块导致无法引用kotlin的类文件(BootJar)
Gradle kotlin Springboot多模块导致无法引用kotlin的类文件(BootJar)
如何使用 Spring Boot“bootJar”插件创建 gradle 任务以生成爆炸性战争?