Java 如何在VS代码中调试Maven项目?
我使用VS代码编写Java,使用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
// 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