【发布时间】:2016-05-24 09:47:43
【问题描述】:
我有一个关于 SBT 看似不必要的重新编译的问题。我有以下场景:我在 docker 容器中运行 SBT,通过将带有我的应用程序源代码的卷附加到容器,并以 sbt 作为入口点启动容器。如果我在该容器中持续运行 SBT,它不会重新编译整个应用程序,这很好。
但是,如果我在 OS X 上本地启动 SBT,它会进行完整的重新编译。如果之后我在 docker 中再次启动它,它会再次进行完整的重新编译。这需要很长时间,而且真的很烦人。这种行为的原因可能是什么?
这是我在容器中启动 SBT 的方式:
docker run --name=bla -it --net=host -v /Users/me/.ivy2:/tmp/.ivy2 \
-v /Users/me/.aws/config:/root/.aws/config \
-v /Users/me/.sbt:/root/.sbt \
-v /Users/me/projects/myapp:/src 01ac0b888527 \
/bin/sh -c 'sbt -Dsbt.ivy.home=/tmp/.ivy2 -Divy.home=/tmp/.ivy2 -jvm-debug 5005 -mem 3072'
我的 Java、Scala 和 SBT 版本在主机和容器中是相同的。具体来说:Scala 2.11.8、Java 1.8.0_77、SBT 0.13.11
【问题讨论】:
-
你有类似的 sbt/ivy 配置吗?两种情况下的常春藤存储库文件夹是否相同?
-
是的,是一样的。事实上,我也将
~/.ivy2和~/.sbt目录映射到容器。否则它每次都会获取所有依赖项,这需要 40 分钟 :(