Intellij Idea中的共享SBT模块没有发布本地

时间:2016-04-12 14:06:07

标签: intellij-idea sbt

SBT项目A取决于B。这两个项目都有独立的VCS存储库,并拥有自己的生命周期,包括自动构建和测试。

有没有办法在Intellij Idea中使用方便这些项目?

通过方便地,我主要是指:

  • CMD-点击指向项目之间的实际可编辑类,没有只读已发布的jar
  • 每次更改时都无需运行sbt publish-local
  • 断点按预期工作

如果将依赖项简单地声明为libraryDependencies,则看起来所有这些都是不可能的。但是,声明与相对路径的关系会使构建系统失败。

2 个答案:

答案 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 Amy-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。