【问题标题】:Prefetch SBT versions, Scala, and Ivy Resources with SBT for creating an image使用 SBT 预取 SBT 版本、Scala 和 Ivy 资源以创建图像
【发布时间】:2016-04-23 22:12:21
【问题描述】:

我希望创建一个内置多个 SBT 组件的 docker 镜像(docker 部分不相关)。如果我只是从 deb 或 rpm 安装 sbt 而没有做任何事情,那么第一次调用它时仍然需要下载互联网才能启动。

因此,我需要能够指定以下内容:

1 SBT 版本 - 例如0.12, 0.13.1, 0.13.2, ...

2 个 Scala 版本 - 2.9.1、2.10.4、2.11.5、...

3 常用库-play框架等

我想知道确保这些已预先缓存的最佳方法是什么。

【问题讨论】:

  • 即使有了答案,我仍然对你在做什么感到困惑。为什么在 docker 镜像上需要sbt?当您在项目外执行 sbt 时,它将下载默认依赖项以运行(您实际上安装了 sbt-launcher,它将启动 sbt)。您需要sbt 来处理项目之外的任何事情吗?
  • 我正在为自定义部署 drone.io 构建映像。使用带有 sbt 的无人机的默认图像可以正常工作,但由于它获取当前使用的 sbt 的版本、scala 版本和依赖项,因此需要很长时间来构建。我希望大大减少这个。
  • Scala 及其与 Docker 生态系统交互的方式存在问题。 Scala 希望 SBT 进行构建/运行。缓慢的构建和大量的依赖是有问题的。

标签: scala sbt


【解决方案1】:

这是我在 Dockerfile 中预取多个 scala 版本的操作:

RUN echo 'crossScalaVersions := Seq("2.10.6", "2.11.7")' > build.sbt \
    && echo 'object Hi { def main(args: Array[String]) = println("Done") }' > src.scala \
    && sbt "+run" \
    && rm build.sbt src.scala

您可以通过在 cli 上指定 sbt 版本 ( sbt -Dsbt.version=0.x.y "+run" ) 轻松地进一步自定义它,或者向 build.sbt 添加一些 libraryDependencies。

HTH

【讨论】:

    【解决方案2】:

    好吧,如果您创建一个项目,其中包含您想要列为依赖项的所有内容 - 包括 SBT 和 Scala 版本,然后运行 ​​update 以检索所有这些依赖项,它们将全部缓存在 .ivy2\cache 上。这应该适用于几乎所有事情,但 SBT 本身似乎有大量独立的依赖项,如 here 所见,或者在 ivy2 缓存的本地磁盘上。

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 2015-05-31
      • 2016-08-22
      • 2020-12-25
      • 2013-11-10
      • 2015-05-17
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多