SBT 总是在 Docker、docker-compose 上下载 packages/scala 库
SBT always downloads the packages/scala libraries on Docker, docker-compose
我最近在 Docker Ubuntu 机器上安装了 SBT 以开始使用 Scala。当我最初启动 docker 时,它开始从远程位置 (https://repo.scala-sbt.org/scalasbt/debian/sbt-0.13.17.deb) 抓取所有 Java、sbt JAR。
但是,每当我 运行 sbt 命令时,它都会再次开始下载 sbt JAR。有没有一种维护全局缓存的方法,工件只下载一次,而不是每次我远程访问 docker 容器时?
我的解决方案是多阶段构建。
有一个“基础”docker 图像。
仅复制 build.sbt、projects.sbt 和设置项目中 sbt 版本的文件。
这定义了所需的依赖项。该基本图像的最后一行是“sbt update”——即获取它们。该“基础图像”具有依赖关系……并且是可重用的。当您更改库版本等以重建它时,请记住 运行 它。
在“构建”图像中……复制项目并照常进行……确保 sbt 从 maven-local 解析,并且它应该使用“缓存”……这在上面的段落中已经存在。
我很想听听其他答案,但这是我的解决方案……YMMV :-)。
这对我来说适用于云/Kube 管道。
我最近在 Docker Ubuntu 机器上安装了 SBT 以开始使用 Scala。当我最初启动 docker 时,它开始从远程位置 (https://repo.scala-sbt.org/scalasbt/debian/sbt-0.13.17.deb) 抓取所有 Java、sbt JAR。
但是,每当我 运行 sbt 命令时,它都会再次开始下载 sbt JAR。有没有一种维护全局缓存的方法,工件只下载一次,而不是每次我远程访问 docker 容器时?
我的解决方案是多阶段构建。
有一个“基础”docker 图像。
仅复制 build.sbt、projects.sbt 和设置项目中 sbt 版本的文件。
这定义了所需的依赖项。该基本图像的最后一行是“sbt update”——即获取它们。该“基础图像”具有依赖关系……并且是可重用的。当您更改库版本等以重建它时,请记住 运行 它。
在“构建”图像中……复制项目并照常进行……确保 sbt 从 maven-local 解析,并且它应该使用“缓存”……这在上面的段落中已经存在。
我很想听听其他答案,但这是我的解决方案……YMMV :-)。
这对我来说适用于云/Kube 管道。