VS Code 知道 Scala 和 Java,但无法连接它们
VS Code knows Scala and Java, but can't connect them
我正在尝试将 Scala 与 Java 互操作,并成功创建了 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 提出了三个问题:
- 无法解析导入
me.parent.jModule.WithinModule
: AccessScala[3,8]
WithinModule
无法解析为类型:AccessScala [7,9]
WithinModule
无法解析为类型:AccessScala [7,35]
项目设置
该项目有两个模块,但目前只有 jModule
相关。它在不同的文件夹中包含 Java 和 Scala 代码。 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 语法
对于 Java 和 Scala 它都检测到错误等,所以它知道 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。它从来没有打算成为一对一的体验,而是给用户一个选择。
我正在尝试将 Scala 与 Java 互操作,并成功创建了 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 提出了三个问题:
- 无法解析导入
me.parent.jModule.WithinModule
:AccessScala[3,8]
WithinModule
无法解析为类型:AccessScala [7,9]
WithinModule
无法解析为类型:AccessScala [7,35]
项目设置
该项目有两个模块,但目前只有 jModule
相关。它在不同的文件夹中包含 Java 和 Scala 代码。 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 语法
对于 Java 和 Scala 它都检测到错误等,所以它知道 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。它从来没有打算成为一对一的体验,而是给用户一个选择。