Dav*_*gel 82 scala intellij-idea sbt sbt-idea
我正在开发几个具有依赖关系的模块,并希望在一个IDEA项目中一起使用它们.我正在使用sbt-idea从sbt构建定义生成IDEA项目,这对于单个项目非常有用.然而,在多模块的情况下,到目前为止我尝试过的东西并不是很有效:
使用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)
Run Code Online (Sandbox Code Playgroud)
这几乎可以工作,因为sbt-idea生成了一个主IDEA项目,其中跟踪了子项目之间的依赖关系.但有两点需要注意:
file("../foo")不允许).这不是我想要的(如果一个模块 - 例如"utils"或"commons"包 - 在两个不同的主项目中使用会怎么样?)但是我可以忍受它.总结一下:我想将已经有子项目的模块收集到一个具有跟踪依赖关系的大型IDEA项目中,以方便编辑.我该怎么做?谢谢!
多项目构建的方法是正确的.您可以拥有任意长度的子项目的嵌套树,但您不能拥有属于多个父项目的模块.这绝对有意义,并且在Maven中也是如此.
原因是很难将同一模块放入多个项目并保持源同步.正常的工作流程如下:
如果要加载一个不属于Idea中当前项目的模块,则这是可行的,因为您可以将其作为外部模块添加到工作区:
子项目必须存在于主项目的子目录中(即不允许使用文件("../ foo"))似乎是一种限制.这不是我想要的(如果一个模块 - 例如"utils"或"commons"包 - 在两个不同的主项目中使用会怎么样?)但是我可以忍受它.
使用sbt 13.5和intellij 13.x,您可以使用Build.scala指定具有相对路径的项目间依赖项.假设您有两个项目,一个核心项目公共项目和另一个项目foo,两者都存在于一个公共目录代码中/
把这段代码片段放在Build.scala中
object ProjectDependencies {
val commons = RootProject(file("../commons"))
}
object ProjectBuild extends Build {
import ProjectDependencies._
lazy val root = Project(id = "foo", base = file(".")).dependsOn(commons)
}
Run Code Online (Sandbox Code Playgroud)通过sbt by生成IntelliJ项目 sbt gen-idea
| 归档时间: |
|
| 查看次数: |
13536 次 |
| 最近记录: |