Как настроить многопроектные сборки sbt для подпроектов?

У меня есть проект sbt (0.13.1) с кучей подпроектов. Я генерирую конфигурации проекта eclipse, используя sbteclipse. Мои проекты имеют только исходные файлы scala, поэтому я хочу удалить сгенерированные папки src/java.

Я могу добиться этого, добавив (избыточно) следующее к build.sbt каждого подпроекта:

unmanagedSourceDirectories in Compile := (scalaSource in Compile).value :: Nil

unmanagedSourceDirectories in Test := (scalaSource in Test).value :: Nil

Я попытался просто добавить вышеупомянутую конфигурацию в корневой build.sbt, но eclipse Команда по-прежнему генерирует исходные папки Java.

Есть ли способ указать конфигурацию, подобную этой, один раз (в корневом build.sbt) и передать ее каждому подпроекту?

1 ответ

Решение

Вы можете определить настройки без границ и затем использовать их

val onlyScalaSources = Seq(
  unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
  unmanagedSourceDirectories in Test := Seq((scalaSource in Test).value)
)

val project1 = project.in( file( "project1" )
  .settings(onlyScalaSources: _*)

val project2 = project.in( file( "project2" )
  .settings(onlyScalaSources: _*)

Вы также можете создать простой плагин (непроверенный код)

object OnlyScalaSources extends AutoPlugin {
  override def trigger = allRequirements
  override lazy val projectSettings = Seq(
    unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
    unmanagedSourceDirectories in Test := Seq((scalaSource in Test).value)
  )
}

Подробнее о создании плагинов в документации по плагинам

Другие вопросы по тегам