SBT解析器在build.sbt中工作,不在Build.scala中工作

时间:2013-12-26 07:29:47

标签: scala sbt

曾几何时,在遥远的土地上,存在一个带有project/build.sbt文件的项目,如下所示:

resolvers += Resolver.url("scala-js-snapshots",
  url("http://repo.scala-js.org/repo/snapshots/")
)(Resolver.ivyStylePatterns)

addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.2-SNAPSHOT")

在项目加载时,事情看起来很棒,并且土地上有和平:

[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] downloading http://repo.scalajs.org/repo/snapshots/org.scalalang.modules.scalajs/scalajs-sbtplugin/scala_2.10/sbt_0.13/0.2-SNAPSHOT/jars/scalajs-sbt-plugin.jar ...
[info]  [SUCCESSFUL ] org.scala-lang.modules.scalajs#scalajs-sbt-plugin;0.2SNAPSHOT!scalajs-sbt-plugin.jar (1936ms)
[info] Done updating.

有一天,又创建了另一个项目。与第一个项目不同,这个项目既大又复杂,所以它有project/project/Build.scala,如下所示:

import sbt._
import Keys._
object Build extends sbt.Build {
  import sbt._

  override lazy val projects = Seq(root)
  lazy val root =
    Project("plugins", file("."))
      .settings(
        resolvers += Resolver.url("scala-js-snapshots",
          url("http://repo.scala-js.org/repo/snapshots/")
        )(Resolver.ivyStylePatterns),
        addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.2-SNAPSHOT")
      )
      .dependsOn(uri("../../scala-js-resource/plugin"))
      .dependsOn(uri("../../scala-js-workbench"))
}

在我看来,这应该以与早期安排相同的方式设置SBT插件。毕竟,build.sbt但是一堆设置是什么?唯一的区别是它依赖于其他一些本地项目,因此不能是一个简单的.sbt文件。

但是在加载时,发生了一件可怕的事情:

[warn]  module not found: org.scala-lang.modules.scalajs#scalajs-sbt-plugin;0.2-SNAPSHOT
[warn] ==== typesafe-ivy-releases: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/org.scalalang.modules.scalajs/scalajs-sbt-plugin/scala_2.10/sbt_0.13/0.2-SNAPSHOT/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.scalalang.modules.scalajs/scalajs-sbt-plugin/scala_2.10/sbt_0.13/0.2-SNAPSHOT/ivys/ivy.xml
[warn] ==== local: tried
[warn]   C:\Users\Haoyi\.ivy2\local\org.scala-lang.modules.scalajs\scalajs-sbt-plugin\scala_2.10\sbt_0.13\0.2-SNAPSHOT\ivys\ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/org/scala-lang/modules/scalajs/scalajs-sbt-plugin_2.10_0.13/0.2-SNAPSHOT/scalajs-sbt-plugin-0.2-SNAPSHOT.pom

愚蠢Build.scala,你甚至没有尝试我给你的解析器!我甚至告诉你在哪里寻找该死的模块,为什么你甚至没有尝试就放弃了?你的小弟弟build.sbt发现它非常好。

任何人都知道会给出什么,以及我如何让Build.scala像我想要的那样工作?

1 个答案:

答案 0 :(得分:6)

project/build.sbt 不是 project/Build.scala的小弟弟。前者定义了sbt 插件,而后者是实际的构建文件。如果你愿意,它的小弟弟将是<root-dir>/build.sbt

您应该将插件定义保留在project/build.sbt中。拥有这两个文件没有任何问题。

您的项目定义(以及dependsOn)应该在project/Build.scala中,或者您使用<root-dir>/build.sbt,在sbt 0.13中,您基本上可以执行以前仅限于{{{ 1}},所以我的建议是这些天只使用Build.scala个文件。


请离开.sbt,或者更好地将其重命名为project/build.sbt,以减少混淆,并将其用作project/plugins.sbt

./build.sbt