Gradle 7.4.2强制使用内部JFrog Artifactory拉取SpringBoot依赖异常
问题原因
你当前配置存在三个遗漏点,导致Gradle绕过配置的内部仓库请求外部地址:
plugins {}块的插件拉取逻辑不受项目级repositories配置控制,默认会访问Gradle官方插件门户、repo.gradle.org地址拉取插件和其传递依赖- 没有配置全局仓库强制规则,部分插件自带的仓库声明会触发外部地址请求,当前配置没有拦截这类逻辑
- JFrog Artifactory插件仅做了引入,没有配置解析规则,无法实现仓库请求重定向
配置步骤
1. 配置settings.gradle全局锁仓库(Gradle 7.x 最有效方案)
在项目根目录的settings.gradle中添加如下配置,全局接管所有插件、项目依赖的仓库源,禁止任何子项目、插件私自声明外部仓库:
pluginManagement { repositories { maven { url 'https://artifactory-local/artifactory/dss-core-maven-virtual/' credentials { username = "${artifactory_user}" password = "${artifactory_password}" } } } } dependencyResolutionManagement { // 发现项目/插件私自声明仓库直接报错,禁止偷偷访问外部源 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { maven { url 'https://artifactory-local/artifactory/dss-core-maven-virtual/' credentials { username = "${artifactory_user}" password = "${artifactory_password}" } } } }
2. 精简修改build.gradle配置
删掉原来冗余的buildscript、项目级repositories块(这些配置已经被settings.gradle全局接管,留着反而会触发规则报错),调整插件声明方式,补全Artifactory插件配置:
plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'maven-publish' id 'war' id 'idea' // 直接在plugins块声明Artifactory插件版本,不再通过buildscript拉取 id 'com.jfrog.artifactory' version '4.27.1' } // 原有依赖配置保持不变即可 dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.h2database:h2:2.1.212' testImplementation 'org.apache.httpcomponents:httpclient' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.junit.jupiter:junit-jupiter-api' testImplementation 'org.junit.jupiter:junit-jupiter-engine' } // 配置Artifactory插件解析规则,避免插件默认请求官方地址 artifactory { contextUrl = 'https://artifactory-local/artifactory' resolve { repository { repoKey = 'dss-core-maven-virtual' username = "${artifactory_user}" password = "${artifactory_password}" maven = true } } }
3. 前置校验内部仓库配置
确保内部Artifactory的dss-core-maven-virtual虚拟仓库已经聚合了所有必需的上游源:
- Gradle插件门户
- Maven Central
- Spring Release官方仓库
如果虚拟仓库没代理对应上游,就算锁死仓库地址,也会因为找不到依赖构建失败。
4. 验证配置
执行构建时添加info日志参数,确认所有依赖都从内部地址拉取:./gradlew clean build --info
如果日志中不再出现repo.gradle.org相关请求,说明配置生效。
内容的提问来源于stack exchange,提问作者sfgroups
相关产品推荐
相关产品推荐

