В сборке проектов SBT, как ссылаться на проекты из других папок? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь привести в порядок мою огромную многопроектную сборку 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)

1 Ответ

0 голосов
/ 19 сентября 2018

Ну, вы более или менее уже ответили на него сами, но тем не менее вот мой способ сделать это:

lazy val core = RootProject(file("../../../myCoreProject/"))
lazy val main = Project(
   id = "mySubProject", 
   base = file(".")
).dependsOn(core)

, где core - проект, на который я хочу сослаться.Это находится в файле build.sbt подпроекта, который находится в трех каталогах ниже по дереву.

См .: RootProject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...