Тестові залежності SBT у мультипроектах: Зробіть тестовий код доступним для залежних проектів


83

У мене є мультипроект SBT, де деякі проекти мають залежність один від одного. Подобається це:

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

Тепер у мене є тестовий код у проекті "core" у тестовій папці. Є також такі речі, як макети та тестові програми. Тепер я хотів би використовувати ці тестові утиліти в тестах розширень. Для виробничого коду це працює, оскільки я оголосив залежність. Однак, здається, залежність не виконується для тестів. Коли я запускаю тести, я отримую помилку компіляції для відсутніх класів. Ці класи походять із тестового коду в основному проекті.

Як я можу сказати sbt, що залежність також повинна включати тестовий код для тестової області? Щоб я міг повторно використовувати свої глузування в тестовому коді проекту «exension»?

Відповіді:


92

Подобається так:

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

Це обговорюється в розділі "Залежності шляху шляху до конфігурації" у посібнику Початок роботи з кількома проектами .


1
Щоб інші тут не плутали, це означає, що ви встановлюєте залежності у визначенні проекту (а не залежності бібліотеки).
Райан Гросс,

Для ninzas, які не є SBT, чи можете ви показати більше файлу збірки, будь ласка? Визначення типу lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))не працює. @RyanGross, ти хотів би?
Абхіджіт Саркар

45

Ви також можете зробити це за допомогою a .dependsOn(coreProject % "compile->compile;test->test")після початкової декларації проекту.

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

Відповідна документація: scala-sbt.org/release/docs/…
Колін Стронг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.