Тестовые зависимости 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)
  )

Теперь у меня есть тестовый код в «основном» проекте в папке test. Также есть такие вещи, как mocks и test-утилиты. Теперь я хотел бы использовать эти тестовые утилиты при тестировании расширений. Для производственного кода это работает, поскольку я объявил зависимость. Однако похоже, что для тестов зависимость не работает. Когда я запускаю тесты, я получаю ошибку компиляции из-за отсутствия классов. Эти классы взяты из тестового кода в основном проекте.

Как я могу сказать sbt, что зависимость также должна включать тестовый код для тестовой области? Чтобы я мог повторно использовать свои макеты в тестовом коде проекта расширения?

Ответы:


92

Вот так:

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

Это обсуждается в разделе «Зависимости пути к классам для каждой конфигурации» в руководстве « Приступая к работе с несколькими проектами» .


1
Просто чтобы другие не запутались здесь, это предполагает, что вы устанавливаете зависимости в определении проекта (а не зависимости библиотеки).
Райан Гросс

Для ниндз, не являющихся SBT, не могли бы вы показать больше файла сборки? Такое определение lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))не работает. @RyanGross, а ты?
Abhijit Sarkar

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.