如何在Intellij中以调试模式调试spring boot maven项目?

问题描述

我使用以下命令从终端运行开发人员配置文件的maven项目

 sudo mvn spring-boot:run -Dspring.profiles.active=dev

如何使用给定的配置文件运行项目以在调试模式下运行。如何为此设置intellij中的配置?

解决方法

如果您是从maven运行的,则添加以下参数:

int number = 0x12;
System.out.println(number);
// output is 18

5555是调试端口号(您可以使用任何其他未占用的端口)。

然后在IntelliJ中,您可以使用远程调试配置并连接到该端口。

如果从intelliJ打开pom.xml,则可以使用 mvn spring-boot:run -Dspring.profiles.active=dev -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5555" 和main类创建运行配置,就像在常规的最简单的Java应用程序中一样,main类是具有main方法的类。

,

enter image description here

只需单击运行按钮(绿色的三边形按钮),然后单击调试...

IntelliJ将在调试模式下运行spring-boot应用程序

如果要使用参数运行,只需打开编辑配置并将args放入VM Options / Program参数中,如

enter image description here

,

使用特定的配置文件从Maven运行Spring Boot项目

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

或者通过使用shell变量

SPRING_PROFILES_ACTIVE=foo mvn spring-boot:run

或通过将参数传递给JVM

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=foo,bar"

这些是我知道的适用于Spring Boot v2.0 +的唯一方法。
Spring Boot Maven插件可以识别第一个选项,并将其传递给应用程序JVM。
从Spring Boot的2.0版开始,run目标在默认情况下分叉该过程。由于-Dspring.profiles.active不能直接被插件识别,因此它只能由Maven进程看到,而不会传递给应用程序本身。这就是为什么它不能以mvn spring-boot:run -Dspring.profiles.active=foo,bar形式工作的原因。
在第二个选项中,shell变量对于从该shell产生的任何子进程都应该可见。

从Maven以调试模式启动Spring Boot项目

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,address=5005"

放在一起

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,address=5005"

或者,将所有参数传递给JVM

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,address=5005 -Dspring.profiles.active=foo,bar"

Maven pom.xml应该包含Spring Boot插件

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.0.1.RELEASE</version>
</plugin>

在IntelliJ中,您应该从“运行/调试配置”工具窗口中创建一个新的“远程”调试配置。您可以在主菜单-“运行/编辑配置...”中找到它
默认配置将使用相同的5005端口。 之后,启动该调试配置。控制台应显示“已连接到目标VM ...”。

来源: