升级Spring Boot插件后,自定义BootJar任务报错如何解决?
解决Spring Boot 2.x中自定义BootJar任务的问题
我来帮你搞定这个升级Gradle任务时遇到的坑,你碰到的两个错误都是因为对Spring Boot 2.x Gradle插件的任务类型使用逻辑理解错了:
先理清两个错误的根源
- 第一个错误(找不到BootJar属性):你直接用
BootJar作为任务类型,但Gradle没识别到这个类——要么是你没正确引入Spring Boot Gradle插件,要么是没显式使用它的全限定类名。 - 第二个错误(类型转换失败):
bootJar是Spring Boot插件自动创建的任务实例,不是任务类型,所以不能用它来指定自定义任务的type,必须用对应的类类型来声明。
正确的自定义BootJar任务写法
第一步:确保已应用Spring Boot插件
这是所有操作的前提,先在build.gradle里正确引入插件:
// 推荐的现代Gradle写法 plugins { id 'org.springframework.boot' version '2.0.2' id 'java' } // 老版本Gradle可以用这种写法 // apply plugin: 'org.springframework.boot' // apply plugin: 'java'
第二步:定义自定义BootJar任务
你需要用BootJar的全限定类名(或插件应用后直接用类名)声明任务类型,同时配置必要参数:
task adminBoot(type: org.springframework.boot.gradle.tasks.bundling.BootJar, dependsOn: adminJar) { // 指定admin应用的主类 mainClassName = 'com.yourpackage.admin.AdminApplication' // 从adminJar的输出中获取内容,打包成fat jar from adminJar.outputs // 自定义输出的jar文件名 archiveFileName = 'admin-boot.jar' } // 同理定义worker的BootJar任务 task workerBoot(type: org.springframework.boot.gradle.tasks.bundling.BootJar, dependsOn: workerJar) { mainClassName = 'com.yourpackage.worker.WorkerApplication' from workerJar.outputs archiveFileName = 'worker-boot.jar' }
如果你的Gradle脚本已经正确应用了Spring Boot插件,也可以直接简写为type: BootJar,不过用全限定类名能避免潜在的命名冲突,更稳妥。
额外小提示
- 如果你想复用默认
bootJar任务的配置,可以通过configure方法继承,但因为你需要两个独立的产物,完全自定义两个任务是更合适的选择。 - 要确保
adminJar和workerJar任务已经正确配置,能生成对应的普通Jar文件,这样adminBoot这类任务才能依赖它们打包成fat jar。
内容的提问来源于stack exchange,提问作者Arash
相关产品推荐
相关产品推荐

