SBT Test-Dependencies in Multiprojects: Udostępnij kod testu dla zależnych projektów


83

Mam multi-projekt SBT, w którym niektóre projekty mają wzajemne zależności. Lubię to:

 lazy val coreProject: Project = Project(
    id = "core-project",
    base = file("./core-project"),
    // other stuff
    ))

  lazy val extensions: Project = Project(
    id = "extensions",
    base = file("./extensions"),
    dependencies = Seq(coreProject)
  )

Teraz mam kod testowy w projekcie „core” w folderze testowym. Są też takie rzeczy jak makiety i narzędzia testowe. Teraz chciałbym użyć tych narzędzi testowych w testach rozszerzeń. W przypadku kodu produkcyjnego to działa, ponieważ zadeklarowałem zależność. Jednak wydaje się, że zależność nie zachowuje się w przypadku testów. Po uruchomieniu testów pojawia się błąd kompilacji dla brakujących klas. Te klasy pochodzą z kodu testowego w głównym projekcie.

Jak mogę powiedzieć komuś, że zależność powinna również zawierać kod testu dla zakresu testowego? Aby móc ponownie wykorzystać moje makiety w kodzie testowym projektu „exension”?

Odpowiedzi:


92

Tak jak to:

dependencies = Seq(coreProject % "compile->compile;test->test")

Jest to omówione w sekcji „Zależności ścieżek klas dla konfiguracji” w przewodniku Wprowadzenie do wielu projektów .


1
Aby inni nie byli tu zdezorientowani, oznacza to, że należy ustawić zależności w definicji projektu (a nie zależności bibliotek).
Ryan Gross

W przypadku ninzów innych niż SBT, czy możesz pokazać więcej pliku kompilacji? Definicja taka jak lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))nie działa. @RyanGross, dobrze?
Abhijit Sarkar

45

Możesz to również zrobić .dependsOn(coreProject % "compile->compile;test->test")po wstępnej deklaracji projektu.

lazy val coreProject = Project("core-project")
lazy val extensions = Project("extensions").dependsOn(coreProject % "compile->compile;test->test")

Odpowiednia dokumentacja: scala-sbt.org/release/docs/…
Colin Strong
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.