VS Code 知道 Scala 和 Java,但无法连接它们

VS Code knows Scala and Java, but can't connect them

我正在尝试将 ScalaJava 互操作,并成功创建了 Maven 基于项目(存储库 here),可以从命令行(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());
    }
}

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

VS 代码

我正在使用 Java Extention Pack, Scala-Metals 和 Scala 语法

对于 JavaScala 它都检测到错误等,所以它知道 Scala 在那里。

问题

为什么 VS Code 会报错,我该怎么做才能让它工作?有什么办法,还是我只需要使用 IntelliJ(我还有其他问题,请继续关注这些问题;)

Java 以及对 Visual Studio 的 Scala 语言支持代码基于 LSP(语言服务器协议),目前不允许使用简单的方法来使不同的语言服务器工作还在一起吗

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

我们即将在 Metals 中获得更多 Java 支持,请观看 this PR or this isue 了解详细信息,我们计划继续努力。

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