使用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)。
有什么建议吗?
答案 0 :(得分:2)
根据我的理解,更好(但不同)的解决方案是在本地存储库中发布jar(例如publishLocal),并依赖它。
答案 1 :(得分:1)
当我尝试编译时,sbt告诉我它无法找到该依赖项的定义。
我看到两种可能的解决方案:在build.sbt项目中添加这些依赖项,或者建议单独构建gradle项目,将其发布到本地存储库(或本地文件夹)并从sbt项目引用它。
答案 2 :(得分:0)
可能性三 - 为两个项目定义一个多模块SBT项目,并在sbt中管理java项目。 然而,这是一个繁琐的解决方案,因为您必须维护两个不同的构建文件,所以这只有在您打算将整个hog切换到SBT时才有用。
否则" publishLocal"解决方案可能是最不痛苦的。
答案 3 :(得分:0)
install
放到你当地的maven中
存储库build.sbt
中向P2 / Java添加库Depdedency,例如libraryDependencies += "xyz" % "xyz" % "xyz"
。现在,P1的所有依赖关系也可以在P1 build.sbt
上的任何刷新都会删除这种明显的添加到P2的IntellIJ-project-struture-module-dependency。因此我建议在Intellij中关闭sbt auto-import
,并在重新启动IntelliJ时保持依赖关系