How to run an existing Scala project using VS Code and Metals?

10,537

After following the instructions in the Scala Metals VSCode Readme, use a launch configuration similar to this for the Eclipse screenshots in the question.

.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"]
        }
    ]
}

I had trouble passing the config file for pureconfig correctly. Here's the Github issue with the correct jvmOptions line.

Share:
10,537
pradhyo
Author by

pradhyo

Updated on July 15, 2022

Comments

  • pradhyo
    pradhyo almost 2 years

    I am brand new to Scala and I find that Scala IDE is very slow on my machine for basic things like searching the codebase and editing code. I am used to Visual Studio Code and was very happy to find this metals extension.

    I was able to "import build" and fix issues like bumping up scala version in my projects but I am not sure how to reproduce this step to set up a run configuration and actually launch our app in Scala IDE.

    enter image description here enter image description here

    We have a parent folder which has a bunch of projects and a 'consoleapp' project which is the main entry point of our app - it imports the logic/routes of all other projects.

    |____parent
    | |____consoleapp
    | |____project1
    | |____project2 
    

    I tried sbt run and sbt runMain consoleapp from within the consoleapp folder and also the parent folder but they didn't work.

    I am not sure what other information from our setup is relevant - happy to provide more info as needed.

    Updated to add more details below:

    consoleapp/build.sbt

    name := "consoleapp"
    
    version := "1.0"
    
    scalaVersion := "2.12.10"
    
    packMain := Map("consoleapp" -> "consoleapp")
    
    libraryDependencies ++=  Seq (...)
    

    Output of commands I ran - sbt run and sbt runMain

    Running from ~/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
    

    Running from ~/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
    

    Running from ~/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
    

    Running from ~/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