VS Code 可以识别 Scala 和 Java,但无法连接它们

Son*_*e W 5 java scala maven visual-studio-code scala-metals

我正在尝试将ScalaJava进行互操作,并成功创建了一个基于Maven的项目(此处为存储库),该项目可以从命令行 ( mvn clean package) 进行良好的编译。

然而,我一直遇到这样的问题:我的 IDE(VS Code)根本不理解互操作。

问题

该文件AccessScala.java正在尝试访问 中的变量WithinModule.scala

package me.parent.jModule;

import me.parent.jModule.WithinModule;

public class AccessScala {
    public static void main(String[] args) {
        WithinModule within = new WithinModule();
        // -- this is like a static variable, but Scala doesn't allow that
        // System.out.println(WithinModule.string());
        // -- this is the auto-generated getter
        System.out.println(within.string());
        // -- this getter was manually added
        System.out.println(within.getString());
    }
}
Run Code Online (Sandbox Code Playgroud)

VS Code 引发了三个问题:

  1. 导入me.parent.jModule.WithinModule无法解决:AccessScala[3,8]
  2. WithinModule无法解析为类型:AccessScala [7,9]
  3. WithinModule无法解析为类型:AccessScala [7,35]

项目设置

该项目有两个模块,但目前只有两个jModule模块相关。它在不同的文件夹中包含JavaScala代码。sModule包含一些我也想访问的Scala代码,但我当前的问题与Maven模块无关,并且与 VS Code 理解Scala - Java连接的所有内容无关。

> parent
 | > jModule
 | | > src/main
 | | | > java/me/parent/jModule
 | | | | > AccessScala.java
 | | | > scala/me/parent/jModule
 | | | | > WithinModule.scala
 | | > build.sbt
 | | > project/build.properties
 | | > pom.xml
 | > sModule
 | | > src/scala/me/parent/sModule
 | | | >ExternalModule.scala
 | | > pom.xml
 | | > build.sbt
 | | > project/build.properties
 | > build.sbt
 | > project/build.properties
 | > pom.xml
Run Code Online (Sandbox Code Playgroud)

VS代码

我正在使用Java 扩展包Scala-Metals和 Scala 语法

对于JavaScala,它都会检测错误等,因此它知道 Scala 存在。

问题

为什么 VS Code 会抱怨,我该怎么做才能使其正常工作?有没有办法,或者我只需要使用 IntelliJ (我还有其他问题,请继续关注这些问题;)

小智 5

Visual Studio Code 的 Java 和 Scala 语言支持都基于 LSP(语言服务器协议),目前尚不允许通过简单的方法使不同语言服务器协同工作。

Metals 目前可以通过 Bloop(构建服务器)或通过 Sbt 或 Mill 等构建工具编译 Scala 和 Java。然而,它缺乏 Java 支持所需的大部分支持。Java LSP服务器目前根本无法编译Scala,因此不建议在混合项目中使用它。

我们即将在 Metals 中提供更多 Java 支持,请观看此 PR此问题以了解详细信息,我们计划进一步开展工作。

如果您需要一些认真的重构和自动化,建议当前使用 Intellij Idea。Metals 应该是一个更轻量级的替代品,并且还支持一系列不同的编辑器,例如 Vim、Emacs 或 Sublime。它从来不是为了提供一对一的体验,而是为了给用户提供一种选择。