Я пытаюсь привести в порядок мою огромную многопроектную сборку SBT.В настоящее время у меня есть все в одном большом файле SBT, но я пытаюсь разделить его на несколько каталогов.
В двух словах, это моя структура папок:
root
+-foo
| +-foofoo
| | +-build.sbt
| +-build.sbt
| |
| +-foobar
| | +-build.sbt
| +-build.sbt
| |
| bar
| +-barfoo
| | +-build.sbt
| +-build.sbt
| |
+-build.sbt
In root/build.sbt
У меня есть:
lazy val root = project.
in(file(".")).
settings(publishArtifact := false).
aggregate(foo,
bar)
lazy val foo = project in file("foo")
lazy val bar = project in file("bar")
В foo/build.sbt
У меня есть:
lazy val foo = project.
in(file(".")).
settings(publishArtifact := false).
aggregate(foofoo,
foobar)
lazy val foofoo = project in file("foofoo")
lazy val foobar = project in file("foobar")
В bar/build.sbt
У меня есть:
lazy val bar = project.
in(file(".")).
settings(publishArtifact := false).
aggregate(barfoo)
lazy val barfoo = project in file("barfoo")
Теперь я хочуbarfoo
зависит от foofoo
, поэтому наивно я определил в barfoo/build.sbt
:
lazy val barfoo = project.in(file(".")).dependsOn(foofoo)
Но при запуске sbt compile
он жалуется, что не может найти foofoo
.
Итак, как правильно ссылаться на эти внутрипроектные зависимости?
В настоящее время я могу думать только о том, чтобы сначала запустить sbt foo/publishLocal
, а затем добавить это как libraryDependencies
.Это единственный способ или есть другой?
Followup 1
После некоторого копания я прочитал, что ProjectRef
должен добиться цели, но это дает мне еще одну ошибку:
У меня есть некоторые общие зависимости в Dependencies.scala
объекте в моей подпапке project
.Это найдено всеми подпроектами.Однако, когда я определяю:
lazy val foofoo = ProjectRef(file("foo/foofoo"), "foofoo")
lazy val barfoo = project.in(file(".")).dependsOn(foofoo)
я получаю это:
C:\Somewhere\bar\barfoo\build.sbt:1: error: not found: object Dependencies
import Dependencies._
^
Продолжение 2
Я получил его на работу, но я не знаю, если этоправильный подход, поэтому я оставляю это здесь, но не публикую это как ответ:
lazy val foofoo = project in file("../../foo/foofoo")
lazy val barfoo = project.in(file(".")).dependsOn(foofoo)