离线环境下用Gradle构建Spring Boot可执行Jar时bootJar任务不存在的解决方法
离线环境下Gradle构建Spring Boot可执行Jar的报错解决方案
报错根源
Task 'bootJar' not found in root project 'demo' 报错的核心原因是build.gradle中被注释掉了Spring Boot官方的核心构建插件:仅保留原生java插件的情况下,Gradle不会自动注册bootJar这类Spring Boot专属构建任务,自然无法执行对应打包操作。
分步修复操作
1. 修正build.gradle的插件配置
将原本注释掉的两个Spring Boot配套插件取消注释,和你指定的2.4.2版本保持完全匹配:
plugins { // 取消两行注释,匹配SpringBoot 2.4.2的插件版本要求 id 'org.springframework.boot' version '2.4.2' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' }
两个插件的作用:
org.springframework.boot插件会自动注册bootJar、bootRun任务,自动完成可执行Jar的类路径配置、依赖内嵌打包逻辑io.spring.dependency-management插件会统一管控Spring Boot生态的依赖版本,规避版本冲突问题
2. 适配离线构建的前置准备
离线模式下Gradle不会访问任何远程仓库,所有构建资源都必须从本地缓存读取,因此需要提前确认:
- 本地Gradle用户目录(
GRADLE_USER_HOME)的缓存中,已经完整存好上述两个构建插件、项目所有依赖的安装包 - 建议在首次配置完成后,先在联网环境下执行一次普通构建,把所有需要的资源全部同步到本地缓存,后续断网运行就不会出现资源拉取失败的问题
3. 执行打包命令
配置修正完成后,在项目根目录执行命令即可生成可执行Jar:
gradlew bootJar --offline --stacktrace
打包完成的可执行Jar文件默认存放在项目路径下的build/libs目录中。
常见踩坑提示
- 当前使用的Gradle 6.6.1版本和Spring Boot 2.4.2完全兼容,不需要调整
gradle-wrapper.properties里的Gradle发行版配置 - 如果取消插件注释后仍报任务不存在,先去掉
--offline参数在联网模式下执行一次gradlew build,把所有缺失的资源同步到本地缓存后,再切回离线模式构建
内容的提问来源于stack exchange,提问作者fujisaway
相关产品推荐
相关产品推荐

