Как управлять несколькими взаимозависимыми модулями с помощью SBT и IntelliJ IDEA?

Я разрабатываю несколько модулей с зависимостями между ними и хотел бы работать с ними вместе в одном проекте IDEA. Я использую sbt-idea для генерации проектов IDEA из определений сборки sbt, что отлично работает для отдельных проектов. Однако в случае с несколькими модулями то, что я пробовал до сих пор, не совсем работает:

Используйте sbt-idea для генерации файла IDEA .iml для каждого модуля независимо; затем создайте основной проект IDEA с нуля и добавьте в него эти модули. В результате исходные тексты модулей можно редактировать в одном окне, но зависимости между ними не отслеживаются (поэтому при попытке перейти от какого-либо источника в проекте foo к чему-либо в bar я перехожу к импортированной библиотечной версии bar, а не к локальным источникам).

Используйте sbt многопроектные сборки (они же подпроекты), где Build.scala родительского проекта содержит что-то вроде:

lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)

Это почти работает, поскольку sbt-idea генерирует главный проект IDEA с отслеживанием зависимостей между подпроектами. Однако есть две оговорки:

  1. Похоже, это ограничение sbt, что подпроекты должны находиться в подкаталогах главного проекта (т.е. file("../foo") не разрешается). Это не совсем то, что я хочу (что если модуль - например, пакет "utils" или "commons" - используется в двух разных мастер-проектах?), но я могу с этим жить.
  2. Один из моих подпроектов имеет свои собственные подпроекты; я не уверен, правильно ли сам sbt работает с этими вложенными проектами, но в любом случае они игнорируются sbt-idea. Очевидно, мне нужно, чтобы вложенные подпроекты рекурсивно включались в главный проект.

Подведем итоги: Я хотел бы собрать модули которые уже могут иметь подпроекты в один большой проект IDEA с отслеживаемыми зависимостями для удобства редактирования. Как я могу это сделать? Спасибо!

82
задан om-nom-nom 6 January 2012 в 19:28
поделиться