Gradle构建Spring Boot项目时assemble任务因无动作被跳过怎么办?
问题原因
- Jenkins执行构建的工作目录错误,没有定位到包含
build.gradle、settings.gradle的项目根目录,Gradle找不到有效构建配置,会将assemble识别为无动作的空任务直接跳过。 - Jenkins环境的Gradle版本与本地版本不兼容,与项目引入的Spring Boot Gradle插件版本不匹配,导致bootJar/jar打包任务没有正确绑定到assemble任务的执行链上。
- 构建命令或配置存在CI环境的特殊逻辑:要么Jenkins执行的Gradle命令带了
-x bootJar/-x jar这类跳过打包任务的参数,要么build.gradle中写了针对CI环境禁用打包任务的条件判断。 - 多模块项目的任务指向错误:Jenkins执行构建时没有指定对应业务模块,assemble任务没有绑定到子模块的打包动作上。
解决方案
- 校验并修正构建工作目录
在Jenkins的构建步骤中,执行Gradle命令前新增一行脚本打印当前工作目录和目录下的文件,确认构建配置文件存在:
pwd && ls -la
如果路径不符合预期,要么调整构建步骤的工作目录配置,要么在Gradle命令中加-p <项目根目录相对路径>参数指定构建位置。
- 统一Gradle构建版本
项目使用Gradle Wrapper执行构建,不要依赖Jenkins全局安装的Gradle。本地生成gradlew、gradlew.bat和对应的wrapper配置文件提交到代码仓库,Jenkins构建时直接执行wrapper脚本:- Linux环境:
./gradlew clean build - Windows环境:
gradlew.bat clean build
- Linux环境:
- 排查构建命令和配置
确认Jenkins的Gradle命令没有带跳过打包任务的参数,同时检查build.gradle中是否存在类似if (System.getenv('CI') != null) { bootJar.enabled = false }的CI环境特殊逻辑,如有则调整逻辑,或者在构建命令中加参数开启打包任务。 - 多模块项目指定构建模块
如果是多模块项目,构建时指定需要打包的模块任务即可,例如:./gradlew :demo-web:clean :demo-web:build
验证方式
可以在Jenkins构建时新增命令./gradlew tasks --group=build,查看输出的任务列表中是否存在bootJar/jar任务,确认打包任务是否正常注册。
内容的提问来源于stack exchange,提问作者yogesh kumar
相关产品推荐
相关产品推荐

