Sbt,编译编译桥

Ale*_*rov 6 scala sbt

我想用 sbt 构建一个 docker 镜像。

这是我所拥有的:

FROM kondaurov/jdk-alpine:jdk8slim

ENV SBT_VERSION=1.2.1

RUN \
 echo "$SBT_VERSION" && \
 curl -fsL https://github.com/sbt/sbt/releases/download/v${SBT_VERSION}/sbt-${SBT_VERSION}.tgz | tar xfz - -C /usr/local && \
 ln -s /usr/local/sbt/bin/* /usr/local/bin/ && \
 sbt sbtVersion

ENTRYPOINT sbt
Run Code Online (Sandbox Code Playgroud)

当我在我的 Scala 项目中使用这个图像时,我得到了这个:

[warn] Run 'evicted' to see detailed eviction warnings

[info] Compiling 4 Scala sources to /sbt_project/project/target/scala-2.12/sbt-1.0/classes ...

[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.6. Compiling...

[info]   Compilation completed in 53.746s.
Run Code Online (Sandbox Code Playgroud)

如您所见,sbt 总是为 Scala 编译编译器桥,这需要一些时间.. 是否可以在我的图像中编译桥?我猜sbt sbtVersion是不够的

lau*_*lic 6

它在第一次编译时触发,因此您可以将sbt sbtVersion行更改为sbt compile. 您很可能需要在工作目录中添加一个简单的 Scala 源文件来触发编译(然后清理生成的输出)。

您还可以设置特定的 Scala 版本而无需创建build.sbt

sbt 'set scalaVersion := "2.11.8"' compile
Run Code Online (Sandbox Code Playgroud)

甚至几个:

sbt 'set crossScalaVersions := Seq("2.11.8", "2.12.6")' '+compile'
Run Code Online (Sandbox Code Playgroud)

  • 空的 scala 源文件可以工作(`touch a.scala`)。 (2认同)