Intellij idea Intellij Idea中的共享SBT模块,无需本地发布
SBT项目Intellij idea Intellij Idea中的共享SBT模块,无需本地发布,intellij-idea,sbt,Intellij Idea,Sbt,SBT项目A取决于B。这两个项目都有单独的VCS存储库,并有自己的生命周期,包括自动构建和测试 在Intellij Idea中有没有一种方法可以方便地处理这些项目 我所说的方便,主要是指: CMD Click指向项目之间实际的、可编辑的类,没有只读发布的jar 每次进行更改时,无需运行sbt publish local 断点按预期工作 如果依赖项被简单地声明为libraryDependencies,那么所有这些看起来都是不可能的。但是,声明与相对路径的关系将使构建系统失败。以下是对我有效的方
A
取决于B
。这两个项目都有单独的VCS存储库,并有自己的生命周期,包括自动构建和测试
在Intellij Idea中有没有一种方法可以方便地处理这些项目
我所说的方便,主要是指:
- CMD Click指向项目之间实际的、可编辑的类,没有只读发布的jar
- 每次进行更改时,无需运行
sbt publish local
- 断点按预期工作
如果依赖项被简单地声明为
libraryDependencies
,那么所有这些看起来都是不可能的。但是,声明与相对路径的关系将使构建系统失败。以下是对我有效的方法:
在项目A中
创建了一个文件local dependencies.sbt
(名称不重要),其中包含以下内容:
libraryDependencies ~= {l => l.filter(_.name != "my-utils")}
lazy val utils = RootProject(file("../my-utils"))
lazy val root = Project(id = "ProjectA", base = file(".")).dependsOn(utils)
第一行从build.sbt
中定义的libraryDependencies
中排除my-utils
,这是自动生成所需的
现在projecta
将myutils
作为模块依赖项,而不是库依赖项,解决了上述问题
请注意,local dependencies.sbt
仅用于本地环境,在VCS中应忽略,例如:
$ cat .hgignore
local-dependencies.sbt
创建IntelliJ Scala sbt项目
A
然后打开build.sbt
并输入:
name := "A"
version := "0.1"
scalaVersion := "2.12.7"
lazy val b = (project in file("B"))
lazy val root = (project in file("."))
.aggregate(b)
.dependsOn(b)
保存这个。当在右下角的小对话框中询问“需要导入sbt项目”时,选择“启用自动导入”
IntelliJ现在自动创建子文件夹B,并在其中放置一个子文件夹。在子文件夹B
中,为B
创建一个新的build.sbt
,其中包含:
sourceDirectory in Compile := (baseDirectory( _ / "src" )).value
保存后,创建新目录B/src/scala
。
打开sbt的工具窗口(菜单:查看->工具窗口->sbt)。单击“刷新所有sbt项目”图标
将库scala文件添加到B/src/scala
中
现在您有了一个多模块项目,由主模块a组成,具体取决于库子模块B。应该能够导入这两个项目,然后替换依赖项以指向ide项目中的本地项目model@pfnSBT自动导入功能删除手动设置依赖项。以及手动导入将模块依赖项恢复回SBT配置。不幸的是,这是intellij中SBT结构插件的一个限制。是否可以引用其他项目的模块?