【问题标题】:How to debug Spring Boot with Netbeans via Maven如何通过 Maven 使用 Netbeans 调试 Spring Boot
【发布时间】:2017-05-28 17:47:21
【问题描述】:

在我用 Spring Boot 1.4.3 在 Netbeans 8.2 中进行了正确的调试设置之后,我想我把我的发现写下来作为其他人的问答。

问题是 Netbeans 的默认配置无法在调试模式下正确启动 Spring,当您搜索 Internet 时,您只能在 Spring 文档中找到无法正常工作的过时信息。

如果你知道怎么做,解决方案很简单。请在下面找到正确的设置说明。

【问题讨论】:

  • 它更适用于 Netbeans 11.2 或 11.3,尤其是在您使用 SpringBoot 和 maven 时。非常容易切换

标签: java spring maven netbeans


【解决方案1】:

经过测试并与 Netbeans 8.2 和 Spring-Boot 1.4.3 一起使用:

首先确保您已包含 Spring Maven 插件(在创建新的 Netbeans Spring 项目时应该已包含该插件):

<plugins>
  ...
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  ...
</plugins>

另外,像这样包含 Spring Devtools 也是一个好主意:

<dependencies>
  ...
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
  </dependency>
  ...
</dependencies>

现在导航到您的项目设置 -> 操作 -> 调试项目并设置以下内容:

执行目标:

spring-boot:run

设置属性:

run.jvmArguments=-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}
jpda.listen=true

现在通过通常的调试按钮运行您的应用程序,Spring 应该正确连接到 JVM 调试器。

Spring Boot 2.x

要为 Spring Boot 2.x 项目(更具体地说是 spring-boot-maven-plugin 的 2.x 版)启用 Netbeans 调试,过程完全相同,除了 run.jvmArguments 属性名称已更改为spring-boot.run.jvmArguments:

spring-boot.run.jvmArguments=-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}
jpda.listen=true

【讨论】:

  • 它对我不起作用...当我在调试模式下运行时,调试输出打印“JPDA Listening Start...”并且没有任何问题...您知道发生了什么吗?
  • 这行得通,除了“step into”更像是“step over”——找不到真正踏入任何东西的方法:(
  • 我还想指出,如果您使用的是 spring-boot-starter-parent,实际上您不需要 spring-boot-maven-plugin。
  • 从spring-boot-maven-plugin 2.0.0.M3版本开始,需要将run.jvmArguments改为spring-boot.run.jvmArgumentsgithub.com/spring-projects/spring-boot/commit/…
  • 由于某种原因,调试器不会在断点处停止。我正在使用 spring boot v 2.1 和 netbeans 11。有什么提示吗?
【解决方案2】:

测试 NetBeans 8.2 和 Spring Boot 2.0.1,我无法按照 @TwoThe's instructions 进行操作。首先,我遇到了一个问题,我在输出窗口中看到的只是“JPDA Listening Start...”。为了解决这个问题,我添加了Spring Devtools 作为可选依赖项。其次,即使调试似乎运行良好,但通常显示活动线程列表的“调试”窗口是空的,并且我设置的断点没有被触发。第三,尝试通过按下红色的“Finish Debugger Session”按钮来停止调试会话不会停止 Tomcat 服务器。

我发现没有将执行目标更改为“spring-boot:run”,而是使用默认的“调试项目”操作执行目标就足够了:

进程类 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec

.. 和属性:

exec.args=-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ${packageClassName} exec.executable=java jpda.listen=true

(作为旁注,作为常规 Java 应用程序进行调试显然是在 Eclipse 中调试 Spring Boot 应用程序的推荐方法;请参阅 How to debug Spring Boot application with Eclipse?

一个有用的提示是,如果您想使用某个 Spring Boot 配置文件进行调试,例如“debug”,您可以在“exec.args”属性前添加“-Dspring.profiles.active=debug”。另见:Spring boot running a fully executable JAR and specify -D properties

【讨论】:

  • 使用这个配置会给我 java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 错误。也许我需要明确指定类路径?
  • @zygimantus 找不到哪个类?我现在已经添加了默认属性。也许试试这些。
  • 这些类是我的项目在 Maven 生成阶段生成的。我想知道为什么我会遇到这个问题...
  • 它更适用于 Netbeans 11.2 或 11.3,尤其是在您使用 SpringBoot 和 maven 时。非常容易切换
【解决方案3】:

在 NetBeans9 上测试

操作:添加任何名称 设置属性:选择Add>按钮,选择Debug Maven Build 并一如既往地调试 -> IDE 调试按钮

【讨论】:

    【解决方案4】:

    如果在应用上述所有修复后问题仍然存在,请删除所有断点并重试。 窗口 -> 调试 -> 断点 -> 删除所有断点

    【讨论】:

    • 不同之处在于它指向的是从run.jvmArguments调试,关键是spring-boot.run.jvmArguments
    【解决方案5】:

    战俘

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
    </dependency>   
    

    鼓起

    <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
                              
                                <executions>
                                    <execution>
                                      <goals>
                                        <goal>repackage</goal>
                                      </goals>
                                    </execution>
                                  </executions>
        </plugin>
    </plugins>
    

    调试项目

    • 执行目标:包

    • 设置属性:netbeans.deploy.debugmode=true netbeans.deploy=true

    改变

    • 执行目标:spring-boot:run
    • 设置属性:spring-boot.run.jvmArguments=-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} jpda.listen=true

    和 Netbeans Press 调试项目 -- 不是 navigator --> spring-boo-run ... 有什么区别? spring-boot.run.jvmArguments:

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2017-06-21
      • 1970-01-01
      • 2011-05-10
      • 2018-03-05
      • 1970-01-01
      • 2018-05-13
      • 2020-12-31
      • 2018-11-07
      相关资源
      最近更新 更多