如何在Gradle中为不同构建环境配置不同Maven仓库
问题背景
我有一个基于Spring/Gradle/Kotlin的后端应用,需要在两种网络环境下构建:
- 可访问互联网的环境
- 仅能访问内网私有Maven仓库的环境
当前build.gradle.kts的仓库配置片段如下:
... repositories { mavenLocal() mavenCentral() maven (url = "https://artifactory.my.private.url/artifactory/maven-group/") } ...
遇到的问题
- 联网环境下构建正常,但内网环境构建失败:Gradle会优先尝试
mavenLocal(可能无对应依赖)、再尝试mavenCentral,此时因内网无法访问外网导致超时失败,而Gradle只有在收到404时才会切换到下一个仓库,因此根本不会尝试私有仓库。 - 若调整仓库顺序(把私有仓库放前面),则联网环境下构建会失败。
需求:用单份构建脚本适配两种环境,无需在CI/CD中维护两份build.gradle.kts文件。
解决方案
通过Gradle的项目属性(Project Properties)动态切换仓库配置,实现单脚本适配双环境:
修改build.gradle.kts中的仓库配置:
repositories { if (properties.containsKey("isProd")) { println("using prod maven url") maven (url = "https://artifactory.my.private.url/artifactory/maven-group/") } else { mavenLocal() mavenCentral() } }
构建命令
- 内网环境(使用私有仓库):
./gradlew clean bootjar -P isProd=true
- 联网环境(使用公共仓库):
直接执行默认命令即可,无需添加属性:
./gradlew clean bootjar
内容的提问来源于stack exchange,提问作者Tamás
相关产品推荐
相关产品推荐

