繁体   English   中英

sbt添加java项目

[英]sbt add java project

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

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

用Java编写的P2使用gradle作为构建工具

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

unmanagedSourceDirectories in Compile += file("mydependency")

但问题是依赖项本身具有依赖项。 当我尝试编译该代码时,sbt告诉我它找不到该依赖项的定义。 因此,我需要一种在build.sbt中引用完整Java项目的方法,以便随后可以通过sbt shell编译整个东西(实际上,我不得不使用sbt shell)。

有什么建议么?

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

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

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

可能性三-为两个项目都定义一个多模块SBT项目,并在sbt中也管理Java项目。 但是,这是一个单调乏味的解决方案,因为您必须维护两个不同的构建文件,因此,仅当您打算将整头猪切换到SBT时,这才有用。

否则,“ publishLocal”解决方案可能会带来最少的痛苦。

  • P2 / Java:将其放在Maven下, installinstall到本地Maven存储库中
  • P1 / Scala:在build.sbt向P2 / Java添加库依赖关系,例如libraryDependencies += "xyz" % "xyz" % "xyz" 现在,在P1中也可以访问P2的所有依赖项
  • 作为“更多便利”的选项: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时保持依赖关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM