java - VS Code 知道 Scala 和 Java,但无法连接它们
问题描述
我正在尝试将Scala与Java进行互操作,并设法创建了一个基于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());
}
}
VS Code 提出了三个问题:
- 导入
me.parent.jModule.WithinModule
无法解决:AccessScala[3,8]
WithinModule
无法解析为类型:AccessScala [7,9]
WithinModule
无法解析为类型:AccessScala [7,35]
项目设置
该项目有两个模块,但现在只有jModule
相关的。它在不同的文件夹中包含Java和Scala代码。sModule
包含一些我也想访问的Scala代码,但我当前的问题与Maven模块以及理解Scala - Java连接的 VS Code 无关。
> 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 扩展包、Scala-Metals和 Scala 语法
对于Java和Scala,它都会检测错误等,因此它知道 Scala 就在那里。
问题
为什么 VS Code 会抱怨,我能做些什么来完成这项工作?有没有办法,或者我只需要使用 IntelliJ(我还有其他问题,请继续关注这些问题;)
解决方案
对 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。它从未打算成为一对一的体验,而是为用户提供另一种选择。
推荐阅读
- ruby-on-rails - 直接在 MongoDB 中维护索引并避免 Rails 应用程序覆盖它们
- svn - 主干(或给定分支)中最新修订的修订说明符
- php - 在每一行中合并具有相同product_id但不同style_id的行
- java - 服务的 Spring Boot 多模块单元测试
- database - 如果在数据库事务发生的那一刻断电会发生什么?
- ms-access - If values in one column is entered populate other columns (Access)
- configuration - Automapper - 添加配置文件后映射失败
- google-cloud-platform - 环境变量 GOOGLE_APPLICATION_CREDENTIALS 在 Google 云上仅持续一天
- matlab - How do I call my generate random numbers which has size 100 to simulation of playing dice 100 times
- javascript - Set body color but div block has different color