Я разрабатываю несколько модулей с зависимостями между ними и хотел бы работать с ними все вместе в одном проекте IDEA. Я использую sbt-idea для создания проектов IDEA из определений сборки sbt, которые отлично подходят для отдельных проектов. Однако в случае с несколькими модулями все, что я пробовал до сих пор, не совсем работает:
Использовать sbt-idea для генерации IDEA файла .iml для каждого модуля независимо; затем создайте мастер-проект IDEA с нуля, добавьте к нему эти модули. Это делает источники модулей доступными для редактирования в одном окне, но зависимости между ними не отслеживаются (поэтому попытка перехода от некоторого источника в проекте foo к чему-то в строке приведет меня к импортированной библиотечной версии бара, а не к локальным источникам).
Используйте sbt многопроектные сборки (aka subprojects), где родительский проект Build.scala содержит такие вещи, как
lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)
Это почти работает, поскольку в sbt-идее генерируется мастер-проект IDEA с зависимостями отслеживаемых подпроектов. Есть, однако, два оговорки:
- Кажется, это ограничение sbt, что подпроекты должны жить в подкаталогах главного проекта (т.е.
file("../foo")
не допускается). Это не совсем то, что я хочу (что, если модуль - например, "utils" или "commons" - используется в двух разных мастер-проектах?), Но я могу жить с ним. - Один из моих подпроектов имеет свои собственные подпроекты; Я не уверен, правильно ли sbt справляется с этими вложенными проектами, но в любом случае они игнорируются sbt-idea. Очевидно, что мне нужно, чтобы вложенные подпроекты включались рекурсивно в главный проект.
Подводя итог: я хотел бы собрать модули, которые могут уже иметь подпроекты в один большой проект IDEA с отслеживаемыми зависимостями для удобного редактирования. Как мне это сделать? Спасибо!