sbt添加java项目

时间:2018-01-04 14:34:06

标签: java scala intellij-idea sbt

使用IDEA IntelliJ中的一些scala软件。 (如果必要,它还具有Android功能)。假设我有两个项目:

用scala编写的P1使用sbt作为构建工具

P2,用java编写,使用gradle作为构建工具

我想从P2调用一些代码,它有完整的源代码。所以我在我的IntelliJ scala项目中导入P2作为模块。但是当我使用sbt-shell编译我的sbt项目时,它告诉我一个错误,它找不到P2中声明的类和包的任何定义。我想我需要在build.sbt文件中创建一个正确的引用,以便它可以理解定义的来源。我找到了一个解决方案,建议将非托管java源路径添加到build.sbt,如下所示:

unmanagedSourceDirectories in Compile += file("mydependency")

但事情是依赖本身有依赖。当我尝试编译时,sbt告诉我它无法找到该依赖项的定义。所以我需要一种方法来引用build.sbt中的完整java项目,这样我就可以通过sbt shell编译整个东西(事实上,我被迫使用非常sbt的shell)。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

根据我的理解,更好(但不同)的解决方案是在本地存储库中发布jar(例如publishLocal),并依赖它。

答案 1 :(得分:1)

  

当我尝试编译时,sbt告诉我它无法找到该依赖项的定义。

我看到两种可能的解决方案:在build.sbt项目中添加这些依赖项,或者建议单独构建gradle项目,将其发布到本地存储库(或本地文件夹)并从sbt项目引用它。

答案 2 :(得分:0)

可能性三 - 为两个项目定义一个多模块SBT项目,并在sbt中管理java项目。 然而,这是一个繁琐的解决方案,因为您必须维护两个不同的构建文件,所以这只有在您打算将整个hog切换到SBT时才有用。

否则" publishLocal"解决方案可能是最不痛苦的。

答案 3 :(得分:0)

  • P2 / Java:把它放在Maven下,install放到你当地的maven中 存储库
  • P1 / Scala:在build.sbt中向P2 / Java添加库Depdedency,例如libraryDependencies += "xyz" % "xyz" % "xyz"。现在,P1的所有依赖关系也可以在P1
  • 中访问
  • 作为"更方便的选项":IntelliJ允许您将项目结构(F4)模块依赖项添加到单独的Java模块。如果将上述两者结合起来,可以更改P2,这些更改会立即反映在P1中。否则你将有一个二进制maven / jar引用,并且P2中的任何更改都需要maven发布,如果你拥有源基础P1和P2并且两者都改变​​很多,这是不方便的。旁注:build.sbt上的任何刷新都会删除这种明显的添加到P2的IntellIJ-project-struture-module-dependency。因此我建议在Intellij中关闭sbt auto-import,并在重新启动IntelliJ时保持依赖关系