sbt添加java项目

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

用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)。

有什么建议么?

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

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

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

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

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

  • P2 / Java:将它放在Maven下, installinstall到本地maven存储库中
  • P1 / Scala:在build.sbt中将库build.sbt添加到P2 / Java,例如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。 所以我建议在sbt auto-import中关闭sbt auto-import ,并且在你重新启动IntelliJ时保持依赖关系