【发布时间】:2012-02-04 12:08:45
【问题描述】:
我正在开发几个相互依赖的模块,并希望在一个 IDEA 项目中一起使用它们。我正在使用sbt-idea 从 sbt 构建定义生成 IDEA 项目,这对单个项目非常有用。然而,在多模块的情况下,到目前为止我尝试过的事情并不完全有效:
使用 sbt-idea 为每个模块独立生成 IDEA .iml 文件;然后从头开始创建一个主 IDEA 项目并将这些模块添加到其中。这使得模块源在同一个窗口中都是可编辑的,但它们之间的依赖关系不会被跟踪(因此尝试从 foo 项目中的某个源导航到 bar 中的某个源带我到 bar 的导入库版本,而不是本地资源)。
使用 sbt multi-project builds(又名子项目),其中父项目的 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 项目,并跟踪子项目之间的依赖关系。但是有两个警告:
- 这似乎是一个 sbt 限制,即子项目必须位于主项目的子目录中(即,
file("../foo")是不允许的)。这不是我真正想要的(如果一个模块——例如“utils”或“commons”包——用于两个不同的主项目呢?)但我可以接受它。 - 我的一个子项目有自己的子项目;我不确定 sbt 本身是否正确处理这些嵌套项目,但无论如何它们都会被 sbt-idea 忽略。显然,我需要将嵌套子项目递归地包含在主项目中。
总结一下:我想将可能已经有子项目的模块收集到一个带有跟踪依赖项的大型 IDEA 项目中,以便于编辑。我该怎么做?谢谢!
【问题讨论】:
-
尝试设置一个元项目,作为外部项目参考链接到其他项目 (github.com/harrah/xsbt/wiki/Full-Configuration)。我自己没有用 sbt-idea 尝试过,所以这是评论而不是答案。
-
感谢您的想法——但遗憾的是 sbt-idea 完全忽略了外部引用。
-
也许这将有助于下一个版本的 sbt-idea:github.com/mpeltonen/sbt-idea/commit/9f17cc8github.com/mpeltonen/sbt-idea/commit/4b4adf75
-
酷,所以我从最新的 git 源安装了 svn-idea 以获取这些更改,然后清理项目并再次运行 sbt-idea。有一些我不完全理解的奇怪的依赖解决问题,但不知何故我最终得到了一个工作项目!我确实必须在 IDEA 中为子子项目手动设置源目录;回想起来,我不确定我一开始就不能用股票 sbt-idea 11.1 做到这一点。无论如何,谢谢——我想我现在可以停止给牦牛剃毛了。
-
写完最后一条评论后,我发现我根本没有工作项目(再次,子子项目有问题)。所以我只是把它们分成了一级项目,所以我的主项目现在只有一个级别的子项目。当然,我只能这样做,因为这是我自己的全部代码。
标签: scala intellij-idea sbt sbt-idea