SBT-Testabhängigkeiten in Multiprojekten: Stellen Sie den Testcode abhängigen Projekten zur Verfügung


83

Ich habe ein SBT-Multiprojekt, bei dem einige Projekte voneinander abhängig sind. So was:

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

Jetzt habe ich einen Testcode im 'Kern'-Projekt im Testordner. Es gibt auch Dinge wie Mocks und Test-Utilities. Jetzt möchte ich diese Testdienstprogramme in den Tests der Erweiterungen verwenden. Für Produktionscode funktioniert dies, da ich eine Abhängigkeit deklariert habe. Es scheint jedoch, dass die Abhängigkeit für die Tests nicht gilt. Wenn ich die Tests ausführe, wird ein Kompilierungsfehler für fehlende Klassen angezeigt. Diese Klassen stammen aus dem Testcode im Kernprojekt.

Wie kann ich sbt mitteilen, dass die Abhängigkeit auch den Testcode für den Testbereich enthalten soll? Damit ich meine Verspottungen im Testcode des 'Exension'-Projekts wiederverwenden kann?

Antworten:


91

Wie so:

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

Dies wird im Abschnitt "Klassenpfadabhängigkeiten pro Konfiguration" im Handbuch Erste Schritte mit mehreren Projekten erläutert.


1
Damit andere hier nicht verwirrt sind, sollten Sie die Abhängigkeiten in der Projektdefinition festlegen (nicht die Bibliotheksabhängigkeiten).
Ryan Gross

Können Sie für Nicht-SBT-Ninzas bitte mehr von der Build-Datei anzeigen? Eine Definition wie lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))funktioniert nicht. @ RyanGross, würdest du?
Abhijit Sarkar

45

Sie können dies auch mit einem .dependsOn(coreProject % "compile->compile;test->test")nach der ersten Projektdeklaration tun .

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

Relevante Dokumentation: scala-sbt.org/release/docs/…
Colin Strong
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.