使用 bootJar 行为覆盖项目的 jar 任务
Override jar task for project with bootJar behavior
我刚刚将 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
任务的行为,这样我就不必修改插件?要复制的工件必须是可执行应用程序。
看起来您的插件依赖于 jar
和 bootJar
任务创建同名的 jar 文件。这并不理想。例如,在您上面显示的代码中,无法保证 bootJar
会在复制之前构建可执行 jar 文件。如果可能的话,我建议更新插件以从 bootJar
而不是 jar
.
复制
如果您无法更改插件,您应该能够通过禁用 jar
任务并删除其分类器来恢复旧行为:
jar {
enabled = false
classifier = ''
}
这将导致 jar
任务与 bootJar
任务具有相同的输出位置并禁用它,这样一个任务的输出就不会被另一个任务覆盖。
我刚刚将 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
任务的行为,这样我就不必修改插件?要复制的工件必须是可执行应用程序。
看起来您的插件依赖于 jar
和 bootJar
任务创建同名的 jar 文件。这并不理想。例如,在您上面显示的代码中,无法保证 bootJar
会在复制之前构建可执行 jar 文件。如果可能的话,我建议更新插件以从 bootJar
而不是 jar
.
如果您无法更改插件,您应该能够通过禁用 jar
任务并删除其分类器来恢复旧行为:
jar {
enabled = false
classifier = ''
}
这将导致 jar
任务与 bootJar
任务具有相同的输出位置并禁用它,这样一个任务的输出就不会被另一个任务覆盖。