Java 如何在VS代码中调试Maven项目?

Java 如何在VS代码中调试Maven项目?,java,maven,visual-studio-code,Java,Maven,Visual Studio Code,我使用VS代码编写Java,使用Maven构建插件。除了调试之外,在对配置进行了大量的修改之后,一切正常。调试配置如下所示: // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=83038

我使用VS代码编写Java,使用Maven构建插件。除了调试之外,在对配置进行了大量的修改之后,一切正常。调试配置如下所示:

// 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": "java",
        "name": "Debug (Launch) - Current File",
        "request": "launch",
        "mainClass": "${file}"
    },
    {
        "type": "java",
        "name": "Debug (Launch)-App<music-03>",
        "request": "launch",
        "mainClass": "ptcs.App",
        "projectName": "music-03"
    }

请注意,我在运行maven编译和打包目标方面没有问题,甚至可以生成一个打包了依赖项的可执行jar。我的pom.xml在这里复制有点长,但如果有人能给我一个提示,我应该从中发布什么,我会这样做。

我最终找到了答案。命令行中的@符号仅适用于Java1.9及更高版本,Java调试器插件错误地将其放在命令行中


一种解决方案是将项目更新到更高版本的Java。另一个解决方案是将
shortenCommandLine:jarManifest
添加到launch.json。第三种可能是将$JAVA_HOME指向您的JDK位置并重新启动VS代码。

为什么“mainClass”:“${file}”`指向的是文件名而不是类名?我不使用那个(启动单个文件的配置)。我假设它适用于一个文件和一个公共类的情况,并且根据Java的要求,基本文件名和类名是相同的。这里的问题是,假设“@…”对jvm有特殊意义(可能包含一些附加参数)它没有这样做,因此它被解释为类名(因为这是JVM接下来期望的)。“pcts.App”不会被解释为类名,而是会成为传递到main方法的参数中的第一个条目。我知道这一点,但运行该命令的不是我。。这是VS代码。所以问题是。。为什么VS Code尝试以这种方式运行java?我如何修复它?尝试使用mainClass添加包名,如“mainClass”:“com.my.test.App”,我使用了第二个解决方案-“shortenCommandLine”:“jarmanifest”添加到运行项目模板中
~/Sync/projects/music/music-03:cd /Users/Mike/Sync/projects/music/music-03 ; /Library
/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java 
-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:58363 
-Dfile.encoding=UTF-8 @/var/folders/pn/3p41p2fj14d50n707c7x2p4c0000gn
/T/cp_90sfb6m3zinsbhwyvyknqb5hv.argfile ptcs.App 

Error: Could not find or load main class
@.var.folders.pn.3p41p2fj14d50n707c7x2p4c0000gn.T.cp_90sfb6m3zinsbhwyvyknqb5hv.argfile