Como gerenciar vários módulos interdependentes com o SBT e o IntelliJ IDEA?

Estou desenvolvendo vários módulos com dependências entre eles e gostaria de trabalhar com todos juntos em um projeto IDEA. Estou a usar sbt-idea para gerar projetos IDEA a partir das definições de compilação sbt, o que funciona muito bem para projetos individuais. No caso de vários módulos, no entanto, as coisas que eu tentei até agora não funcionam muito bem:

Use a sbt-idea para gerar um arquivo .iml da IDEA para cada módulo independentemente; crie um projeto mestre de IDEA do zero e adicione esses módulos a ele. Isso torna todas as fontes do módulo editáveis na mesma janela, mas as dependências entre elas não são rastreadas (portanto, tente navegar de alguma fonte dentro do foo projeto para algo emBarr me leva à versão da biblioteca importada deBarr, não as fontes locais

Use sbt compilações de múltiplos projetos (também conhecido como subprojetos), em que o Build.scala do projeto pai contém itens como:

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

Isso quase funciona, pois a ideia sbt gera um projeto mestre de IDEA com as dependências entre os subprojetos rastreados. No entanto, existem duas advertências:

Parece ser uma restrição sbt que os subprojetos devem viver em subdiretórios do projeto principal (ou seja,file("../foo") não é permitido). Não é exatamente isso que eu quero (e se um módulo - como um pacote "utils" ou "commons" - for usado em dois projetos mestre diferentes?), Mas eu posso conviver com ele.Um dos meus subprojetos tem seus próprios subprojetos; Não tenho certeza se o próprio sbt lida corretamente com esses projetos aninhados, mas, de qualquer forma, eles são ignorados pela sbt-idea. Obviamente, preciso que subprojetos aninhados sejam incluídos recursivamente no projeto mestr

Para resumir: eu gostaria de coletar módulosque já pode ter subprojetos em um grande projeto IDEA com dependências rastreadas para edição conveniente. Como eu posso fazer isso? Obrigado

questionAnswers(2)

yourAnswerToTheQuestion