【问题标题】:SBT: Where does compiler-interface go once it is built?SBT:编译器接口构建后会去哪里?
【发布时间】:2014-11-18 19:48:40
【问题描述】:

我注意到我在 CircleCI 服务器上的 Play 2.3 项目的构建时间相对于我的本地构建机器非常慢。这样做的一个原因是,在每次构建时,SBT 都会打印出以下内容:

[info] 'compiler-interface' 尚未为 Scala 2.11.4 编译。正在编译...

然后继续花费大约一分钟编译编译器。在我的笔记本电脑上,这恰好发生了一次,然后再也没有发生过。我的假设是,在我的笔记本电脑上,编译器被缓存在某个地方,以便下次不必再次重建它,而在 CI 服务器上,该缓存目录被炸毁。

CircleCI 允许您指定在构建之间不会被破坏的缓存目录(或者更准确地说,被破坏然后重建)所以对我来说一个简单的解决方案是告诉 CircleCI 保存该目录。

问题是,我不知道它在哪里。我已经保存了~/.sbt~/.ivy2,但它没有帮助。编译器是否构建到我可以缓存的不同位置?除了降级我的 Scala 编译器之外,关于如何解决这个问题的任何其他想法?

【问题讨论】:

    标签: scala playframework sbt typesafe-activator


    【解决方案1】:

    我查看了我的设置,似乎compiler-interface 确实应该在~/.sbt~/.ivy2 中。

    您的问题可能来自您如何保存这些目录。您确定将它们保存给正确的用户吗?您必须保存它们以供启动 sbt 命令使用。

    【讨论】:

    • 你是对的。事实证明,Circle 过早地保存了这些目录,即在编译器放入之前。
    • 看起来它在~/.ivy2/cache/org.scala-sbt/下有几个不同的名字
    • @Joe 您能找到解决您提到的问题的方法吗?我有一个类似的 scala 设置并循环缓存主包的所有依赖项,但不缓存测试包的所有依赖项,因为它只是被拉下来并为测试而编译。
    • @infomofo - 某种程度上,我能够通过在依赖项步骤中调用activator compile 来解决我首先描述的特定缓存问题,但是缓存测试包依赖项是另一个我没有解决的问题解决了。​​
    【解决方案2】:

    @joe:您可以使用sbt compile:test 而不是sbt compile 来获取缓存中的测试依赖项(以及确保编译接口包含在缓存中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多