SBT迁移至AWS CodeArtifact后依赖解析过慢及中介消息问题
问题解决:Scala-SBT迁移至AWS CodeArtifact后的编译速度与Coursier启用问题
一、强制启用Coursier并切换缓存目录
命令行参数-Dsbt.ivy=false -Dsbt.coursier=true可能因sbt版本或全局配置覆盖失效,可通过以下方式修复:
- 在项目根目录创建
.sbtopts文件,写入:
直接指定Coursier专属缓存目录,替代默认的-Dsbt.coursier=true -Dsbt.ivy.home=${HOME}/.cache/coursier/v1~/.ivy2,同时强制启用Coursier。 - 检查项目配置:若
build.sbt中存在dependencyResolution := IvyDependencyResolution显式配置,删除该行——sbt 1.3+默认集成Coursier,自定义该配置会强制回退到Ivy。 - 执行
sbt clean cache cleanFiles清除旧缓存后重新编译。
二、消除dependency descriptor has been mediated日志
该日志源于sbt的依赖调解机制,AWS CodeArtifact返回的元数据更详细,导致多版本io.netty的冲突调解频繁触发。解决方式:
- 降低日志级别:启动sbt时添加参数
-Dsbt.log.level=warn,或在build.sbt中全局设置:
过滤掉调试级别的调解日志。ThisBuild / logLevel := Level.Warn - 锁定io.netty版本:在
build.sbt中显式指定统一的netty版本,避免依赖冲突触发调解:ThisBuild / dependencyOverrides ++= Seq( "io.netty" % "netty-all" % "4.1.94.Final", // 替换为项目适配的稳定版本 "io.netty" % "netty-handler" % "4.1.94.Final", "io.netty" % "netty-codec-http" % "4.1.94.Final" )
三、优化AWS CodeArtifact依赖解析速度
- 开启并行解析:在
.sbtopts中添加参数提升并行下载效率:-Dsbt.coursier.parallel=true -Dsbt.coursier.maxParallel=10 - 内网访问优化(AWS环境内构建):配置AWS CodeArtifact的VPC端点,通过内网访问仓库,规避公网延迟。
- 保留本地缓存:确保Coursier缓存目录(如
~/.cache/coursier)不被频繁清理,减少重复下载。 - 精简仓库配置:移除
build.sbt中旧的JFrog仓库地址,仅保留必要的AWS CodeArtifact仓库,减少解析时的仓库遍历次数。
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

