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
Stupid 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"))