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 вызывает три проблемы:

  1. Импорт me.parent.jModule.WithinModule не может быть решен: AccessScala[3,8]
  2. WithinModule не может быть разрешен к типу: AccessScala [7,9]
  3. 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. Он никогда не предназначался для индивидуального взаимодействия, а для того, чтобы предоставить пользователям альтернативу.

Другие вопросы по тегам