离线Linux服务器环境下如何正确配置sbt预加载依赖库
问题解决方法
问题根源
- 未开启sbt离线模式,sbt默认仍会尝试联网校验、拉取依赖
- 本地依赖存储路径与sbt默认查找路径不匹配:你个人电脑拉取的依赖存在于
~/.ivy2/cache目录下,而sbt默认优先查找~/.ivy2/local目录,两者目录结构不一致,导致sbt识别不到已有的依赖文件 - 仓库配置存在路径拼接错误,报错中的
~/.ivy2/localorg.scala-lang明显缺失了local后的路径分隔符,属于配置书写问题
正确操作步骤
1. 开启sbt离线模式
两种生效方式二选一即可:
- 临时生效:每次执行sbt命令时添加
-offline参数,示例:sbt -offline compile - 永久生效:编辑离线服务器上的
~/.sbt/1.0/global.sbt文件(不存在则新建),添加如下配置:offline := true
2. 修正仓库查找配置
编辑离线服务器上的~/.sbt/repositories文件(不存在则新建),写入以下配置,完全屏蔽远程仓库,优先读取本地已有依赖:
[repositories] local ivy-cache: file://${user.home}/.ivy2/cache, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
注意:如果原有配置中存在maven中央仓库等远程地址,需要全部删除,避免sbt触发联网请求
3. 校正目录权限
确保复制到离线服务器的~/.ivy2、~/.sbt目录的所有者与运行sbt的用户一致,避免权限不足导致读不到文件,可执行以下命令修正:
chown -R $USER:$USER ~/.ivy2 ~/.sbt
可选:使用publishLocal预发布依赖(路径不匹配问题兜底方案)
如果以上配置后仍提示路径找不到,可在个人联网电脑的测试项目根目录执行:
sbt publishLocal
该命令会将所有依赖按照sbt本地仓库的标准结构发布到~/.ivy2/local目录下,再将该目录同步到离线服务器的对应路径即可完全匹配sbt的默认查找规则。
内容的提问来源于stack exchange,提问作者Harold
相关产品推荐
相关产品推荐

