Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sbt添加java项目_Java_Scala_Intellij Idea_Sbt - Fatal编程技术网

sbt添加java项目

sbt添加java项目,java,scala,intellij-idea,sbt,Java,Scala,Intellij Idea,Sbt,在IDEA IntelliJ中使用一些scala软件。(如果必要的话,它还具有Android功能)。假设我有两个项目: P1是用scala编写的,使用sbt作为构建工具 P2是用java编写的,使用gradle作为构建工具 我想调用P2中的一些代码,拥有完整的源代码。因此,我在IntelliJ scala项目中将P2作为模块导入。但当我使用SBTShell编译我的sbt项目时,它告诉我一个错误,它找不到P2中声明的类和包的任何定义。我想我需要在build.sbt文件中创建一个适当的引用,以便它能

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

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

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

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

unmanagedSourceDirectories in Compile += file("mydependency")
但问题是依赖性本身也有依赖性。当我试图编译它时,sbt告诉我它找不到该依赖项的定义。所以我需要一种在build.sbt中引用完整java项目的方法,这样我就可以通过sbt shell编译整个项目(事实上,我不得不使用sbt shell)


有什么建议吗?

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

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


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

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

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

  • P2/Java:将其置于Maven下,
    将其安装到本地Maven中
    存储库
  • P1/Scala:in
    build.sbt
    向P2/Java添加一个库Depdency,例如
    libraryDependencies+=“xyz”%“xyz”%“xyz”
    。现在P2的所有依赖项也可以在P1中访问
  • 作为“更方便”的选项:IntelliJ允许您添加项目结构(F4)模块依赖于一个单独的Java模块。如果您将上述两项结合起来,您可以更改P2,这些更改会立即反映在P1中。否则,您将有一个二进制maven/jar引用,P2中的任何更改都需要maven发布,如果您同时拥有源代码基P1和P2,并且对两者都进行了大量更改,这将不方便m、 旁注:
    build.sbt
    上的任何刷新都将删除此明确添加到P2的IntellIJ项目结构模块依赖项。因此我建议在IntellIJ中关闭
    sbt自动导入
    ,并且该依赖项将在您重新启动IntellIJ时保留

Maven似乎很容易解决这个问题:将Java项目打包为一个JAR,并使其成为一个Scala依赖项。这是一个两步的过程,但它可以工作。