SBT项目A
取决于B
。这两个项目都有独立的VCS存储库,并拥有自己的生命周期,包括自动构建和测试。
有没有办法在Intellij Idea中使用方便这些项目?
通过方便地,我主要是指:
sbt publish-local
如果将依赖项简单地声明为libraryDependencies
,则看起来所有这些都是不可能的。但是,声明与相对路径的关系会使构建系统失败。
答案 0 :(得分:1)
这对我有用:
在Project 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)
第一行从my-utils
中定义的libraryDependencies
中排除build.sbt
,这是自动构建所需的。
现在Project A
将my-utils
作为模块依赖项,而不是库依赖项,它解决了上述问题。
请注意,local-dependencies.sbt
仅适用于本地环境,应在VCS中忽略,例如:
$ cat .hgignore
local-dependencies.sbt
答案 1 :(得分:0)
创建IntelliJ Scala sbt项目tabMyTab3.Visible = False
。
然后打开A
并输入:
build.sbt
并保存。在右下角的小对话框中询问“需要导入sbt项目”时,选择“启用自动导入”。
IntelliJ现在自动创建子文件夹B,并在其中放置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)
子文件夹。在子文件夹target
中,为B
创建一个新的build.sbt
,其中包含:
B
保存后,创建新目录sourceDirectory in Compile := (baseDirectory( _ / "src" )).value
。
打开B/src/scala
的工具窗口(菜单:视图->工具窗口-> sbt)。单击“刷新所有sbt项目”图标。
将您的库scala文件添加到sbt
。
现在您有一个由主模块A组成的多模块项目,具体取决于库子模块B。