SBT Resolvers работает в build.sbt, не работает в Build.scala

Когда-то в далекой стране существовал проект с небольшим 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 ответ

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 вы можете в основном делать все, что раньше было ограничено Build.scalaтак что мой совет - использовать только .sbt файлы в эти дни.


Так что оставь project/build.sbtили лучше переименуйте его в project/plugins.sbt так что меньше путаницы, и используйте это как ./build.sbt:

lazy val root = Project("plugins", file("."))
  .dependsOn(uri("../scala-js-resource/plugin"))
  .dependsOn(uri("../scala-js-workbench"))
Другие вопросы по тегам