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 и всем, что связано с 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, Scala-Metals и синтаксис Scala
И для Java, и для Scala он обнаруживает ошибки и т. Д., Поэтому знает, что Scala существует.
Вопрос
Почему VS Code жалуется и что я могу сделать, чтобы это сработало? Есть ли вообще способ, или мне просто нужно использовать IntelliJ (у меня есть другие проблемы, следите за этими вопросами;)
1 ответ
Поддержка языков Java и Scala для кода Visual Studio основана на LSP (протокол языкового сервера), который в настоящее время не позволяет легко объединить разные языковые серверы.
В настоящее время Metals может компилировать как Scala, так и Java через Bloop (сервер сборки) или с помощью таких инструментов сборки, как Sbt или Mill. Однако в нем отсутствует большая часть поддержки, необходимой для поддержки Java. Сервер Java LSP в настоящее время вообще не может скомпилировать Scala, поэтому использовать его в смешанном проекте не рекомендуется.
Мы приближаемся к тому, чтобы поддержку Java в Metals, пожалуйста, просмотрите этот PR или добавитьэтот выпуск, чтобы узнать подробности, и мы планируем поработать над этим еще немного.
Если вам нужен серьезный рефакторинг и автоматизация, в настоящее время рекомендуется использовать Intellij Idea. Предполагается, что Metals будет более легкой альтернативой, а также поддерживает ряд различных редакторов, таких как Vim, Emacs или Sublime. Он никогда не предназначался для индивидуального взаимодействия, а для того, чтобы предоставить пользователям альтернативу.