Как запустить существующий проект Scala с помощью VS Code and Metals?

Я новичок в Scala и считаю, что Scala IDE очень медленно работает на моем компьютере для таких основных вещей, как поиск в кодовой базе и редактирование кода. Я привык к Visual Studio Code и был очень рад найти это расширение для металлов.

Мне удалось "импортировать сборку" и исправить такие проблемы, как увеличение версии scala в моих проектах, но я не уверен, как воспроизвести этот шаг для настройки конфигурации запуска и фактического запуска нашего приложения в Scala IDE.

У нас есть родительская папка, в которой есть несколько проектов, и проект consoleapp, который является основной точкой входа в наше приложение - он импортирует логику / маршруты всех других проектов.

|____parent
| |____consoleapp
| |____project1
| |____project2 

Я попытался sbt run а также sbt runMain consoleapp из папки consoleapp, а также из родительской папки, но они не работали.

Я не уверен, какая еще информация из нашей установки имеет отношение к делу - с радостью предоставлю дополнительную информацию по мере необходимости.

Обновлено, чтобы добавить дополнительную информацию ниже:

consoleapp / build.sbt

name := "consoleapp"

version := "1.0"

scalaVersion := "2.12.10"

packMain := Map("consoleapp" -> "consoleapp")

libraryDependencies ++=  Seq (...)

Вывод команд, которые я выполнил - sbt run а также sbt runMain

Запуск от ~/scala/parent

> sbt run                                                                                                                                                                 masterstate [0a8dab85] modified
[info] Loading settings for project global-plugins from metals.sbt,build.sbt ...
[info] Loading global plugins from /Users/pradhyo/.sbt/1.0/plugins
[info] Loading project definition from /Users/pradhyo/scala/parent/project
[info] Loading settings for project consoleapp from build.sbt ...
... 
Loading settings for all other projects in parent folder
...
[info] Loading settings for project parent from build.sbt ...
[info] Resolving key references (22435 settings) ...
[info] Set current project to parent (in build file:/Users/pradhyo/scala/parent/)
[error] java.lang.RuntimeException: No main class detected.
[error]     at scala.sys.package$.error(package.scala:30)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] (Compile / bgRun) No main class detected.
[error] Total time: 1 s, completed 18-Dec-2019 1:41:25 PM

Запуск от ~/scala/parent

> sbt "runMain consoleapp.consoleapp"                                                                                                                                     masterstate [0a8dab85] modified
[info] Loading settings for project global-plugins from metals.sbt,build.sbt ...
[info] Loading global plugins from /Users/pradhyo/.sbt/1.0/plugins
[info] Loading project definition from /Users/pradhyo/scala/parent/project
[info] Loading settings for project consoleapp from build.sbt ...
... 
Loading settings for all other projects in parent folder
...
[info] Loading settings for project parent from build.sbt ...
[info] Resolving key references (22435 settings) ...
[info] Set current project to parent (in build file:/Users/pradhyo/scala/parent/)
[info] running consoleapp.consoleapp 
[error] (run-main-0) java.lang.ClassNotFoundException: consoleapp.consoleapp
[error] java.lang.ClassNotFoundException: consoleapp.consoleapp
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
[error] stack trace is suppressed; run last Compile / bgRunMain for the full output
[error] Nonzero exit code: 1
[error] (Compile / runMain) Nonzero exit code: 1
[error] Total time: 0 s, completed 18-Dec-2019 1:46:21 PM

Запуск из ~/scala/parent/consoleapp

> sbt run                                                                                                                                                                 masterstate [0a8dab85] modified
[info] Loading settings for project global-plugins from metals.sbt,build.sbt ...
[info] Loading global plugins from /Users/pradhyo/.sbt/1.0/plugins
[info] Loading project definition from /Users/pradhyo/scala/parent/consoleapp/project
[info] Loading settings for project consoleapp from build.sbt ...
[info] Set current project to consoleapp (in build file:/Users/pradhyo/scala/parent/consoleapp/)
[error] java.lang.RuntimeException: No main class detected.
[error]     at scala.sys.package$.error(package.scala:30)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] (Compile / bgRun) No main class detected.
[error] Total time: 0 s, completed 18-Dec-2019 1:49:26 PM

Запуск из ~/scala/parent/consoleapp

> sbt "runMain consoleapp"                                                                                                                                                masterstate [0a8dab85] modified
[info] Loading settings for project global-plugins from metals.sbt,build.sbt ...
[info] Loading global plugins from /Users/pradhyo/.sbt/1.0/plugins
[info] Loading project definition from /Users/pradhyo/scala/parent/consoleapp/project
[info] Loading settings for project consoleapp from build.sbt ...
[info] Set current project to consoleapp (in build file:/Users/pradhyo/scala/parent/consoleapp/)
[info] running consoleapp 
[error] (run-main-0) java.lang.ClassNotFoundException: consoleapp
[error] java.lang.ClassNotFoundException: consoleapp
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
[error] stack trace is suppressed; run last Compile / bgRunMain for the full output
[error] Nonzero exit code: 1
[error] (Compile / runMain) Nonzero exit code: 1
[error] Total time: 1 s, completed 18-Dec-2019 1:50:06 PM

2 ответа

Решение

Следуя инструкциям в Scala Metals VSCode Readme, используйте конфигурацию запуска, аналогичную этой для снимков экрана Eclipse в вопросе.

.vscode / launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "scala",
            "name": "Debug consoleapp",
            "request": "launch",
            "mainClass": "consoleapp",
            "buildTarget": "consoleapp",
            "args": [],
            "jvmOptions": ["-J-Dconfig.file=/path/to/config/file"]
        }
    ]
}

У меня возникли проблемы с правильной передачей файла конфигурации для pureconfig. Вот проблема Github с правильнымjvmOptions линия.

Metals поддерживает эти версии Scala 2.13.0, 2.13.1, 2.12.8, 2.12.9, 2.12.10, 2.12.7 и 2.11.12.

Я заметил это из их документации (doc). Таким образом, это могло указать на вашу и мою проблему, о которой я писал в комментариях.

Твой scalaVersion := "2.12.3" здесь нет.

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