Gradle 7.4.2构建Scala项目报错无法解析compileClasspath依赖
问题描述
参照Gradle官方Scala应用构建教程开发项目,执行jar、build、run三类Gradle命令时均触发构建失败,核心报错为:app:compileScala任务执行失败,无法解析:app:compileClasspath配置下的全部依赖,请求Maven中央仓库资源时触发Connection reset错误,最终目标为成功生成项目可执行jar包。
核心错误日志如下:
Task :app:compileScala FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileScala'. Could not resolve all files for configuration ':app:compileClasspath'. Could not resolve org.scala-lang:scala-library:2.13.6. Required by: project :app Could not resolve org.scala-lang:scala-library:2.13.6. Could not get resource 'https://repo.maven.apache.org/maven2/org/scala-lang/scala-library/2.13.6/scala-library-2.13.6.pom'. Could not GET 'https://repo.maven.apache.org/maven2/org/scala-lang/scala-library/2.13.6/scala-library-2.13.6.pom'. Connection reset Could not resolve com.google.guava:guava:30.1.1-jre. Required by: project :app Could not resolve com.google.guava:guava:30.1.1-jre. Could not get resource 'https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1.1-jre/guava-30.1.1-jre.pom'. Could not GET 'https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1.1-jre/guava-30.1.1-jre.pom'. Connection reset * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 8s 1 actionable task: 1 executed
根因判断
- 报错和Scala代码逻辑、Gradle任务本身配置无关,纯粹是依赖拉取环节的网络连通性问题:Gradle默认配置的Maven中央仓库连接被重置,导致scala-library、guava等编译必需的依赖包无法下载,缺少类库支撑的Scala编译任务直接失败。
解决步骤
1. 基础连通性校验
打开终端执行测试命令,确认到Maven中央仓库的网络是否通畅:
curl -I https://repo.maven.apache.org/maven2/org/scala-lang/scala-library/2.13.6/scala-library-2.13.6.pom
如果返回连接超时、重置类错误,先排查本地防火墙、系统代理规则是否拦截了该地址的HTTPS请求;本地开了代理的要确认Gradle已正确读取代理配置。
2. 替换Maven仓库为国内可正常访问的镜像源
这是解决该问题最高效的方案,直接修改项目根目录下的settings.gradle文件,把原有配置里的mavenCentral()替换为国内公共镜像,参考配置如下:
pluginManagement { repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenLocal() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenLocal() } }
如果使用的是7.0以前的老版本Gradle,仓库配置统一写在根目录
build.gradle的repositories块中,直接替换块内的mavenCentral()即可。
3. 清理损坏缓存后重新构建
之前下载失败会在本地生成损坏的依赖缓存,必须先清理再重新拉取:
# 清理构建产物并强制刷新依赖 ./gradlew clean --refresh-dependencies # 执行jar任务生成项目jar包 ./gradlew jar
构建成功后,生成的jar包会存放在app/build/libs/目录下。如果需要直接运行项目,执行./gradlew run即可。
可选:配置全局镜像(所有Gradle项目生效)
如果不想每个项目单独修改配置,可以在Gradle用户目录(默认路径:Linux/macOS为~/.gradle/,Windows为C:\Users\当前用户名\.gradle\)下新建init.gradle文件,写入全局仓库配置,后续所有Gradle项目拉取依赖都会优先走配置的镜像源,不用重复修改项目文件。
内容的提问来源于stack exchange,提问作者HSILS

