spring-boot-maven-plugin
的 run goal 可启动程序运行项目。但发现直接执行 spring-boot:run
时,不能debug打断点点调试。spring-boot-maven-plugin
的官方文档给出了原因和解决方式。
原因
run goal 默认将应用运行于 a forked process,通常方式设置的命令行参数不会作用于程序,因此直接使用run goal,是不能调试程序的。
解决方式
若想调试,或想设置其他JVM 参数,应配置 jvmArguments
参数。
-
方式一,在pom文件中配置
<project> ... <build> ... <plugins> ... <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.1.RELEASE</version> <configuration> <jvmArguments> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 </jvmArguments> </configuration> ... </plugin> ... </plugins> ... </build> ... </project>
-
方式二,在命令行中指定
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
通过以上方式运行后,进程将监听本地的5005端口,等待调试器连接进来。我们可以在5005端口进行远程调试。
在idea中实践
-
在pom中按上述代码配置
jvmArguments
参数。 -
添加一个远程调试配置:
Host为 localhost,Port 应与
spring-boot-maven-plugin
中配置的端口一致,这里是5005
-
执行
spring-boot-maven-plugin
的 run goal
这时可以看到,进程在监听5005端口,等待调试器连接
-
DEBUG模式下启动远程调试,发现已连接上5005端口
-
可以打断点调试了,完结撒花