Maven 和 Eclipse 远程调试:连接被拒绝

Maven & Eclipse remote debugging: connection refused

我正在尝试使用 Maven 和 Eclipse 进行远程调试。在远程机器上,我执行 mvnDebug spring-boot:run,在 Eclipse 中的本地机器上,我使用适当的主机 IP 和端口和连接类型为 标准(套接字连接)

在远程机器上,在尝试连接 Eclipse 之前,我只看到:

Preparing to execute Maven in debug mode
Listening for transport dt_socket at address: 8000

ss -aln 显示正在侦听端口 8000 的内容:users:(("java",pid=949917,fd=4))。一旦我在本地机器上的 Eclipse 中启动调试过程,常规的 Maven 输出就会出现在远程机器上:

Apache Maven 3.6.3 (NON-CANONICAL_2019-11-27T20:26:29Z_root)                                                 
Maven home: /opt/maven                                                                                       
Java version: 1.8.0_242, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-openjdk/jre                
Default locale: en_US, platform encoding: UTF-8                                                              
OS name: "linux", version: "5.5.8-arch1-1", arch: "amd64", family: "unix"                                    
[INFO] Scanning for projects...
...

显然建立了联系。 Maven 的输出与常规 运行 相同。但是 Eclipse 显示 Failed to connect to remote VM. Connection refused.,没有其他信息,现在远程机器上的端口 8000 上没有任何内容在侦听。

我什至不知道如何调试它,而且配置再简单不过了。

mvnDebug脚本的内容是:

MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"

echo Preparing to execute Maven in debug mode

env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "[=12=]"`/mvn" "$@"

如有任何建议或见解,我们将不胜感激。

您尝试的 运行 配置适用于 java 4 及以下。

for java 5及以上尝试使用for MAVEN_OPTS:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000

像maven-surefire-plugin forked test一样,springboot似乎fork到一个新的jvm进程。因此,mvnDebug 在这种情况下不会帮助您:要从 Maven 调试您的 springboot 实例,您必须根据此 link:

设置适当的 jvmArguments
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.2.6.RELEASE</version>
    <configuration>
      <jvmArguments>
        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
      </jvmArguments>
    </configuration>
    ...
  </plugin>

虽然我无法解释为什么您无法使用远程调试进行连接,但我的提示是 Spring Boot let maven 终止。我没有测试,但这可以解释为什么你不能连接 Eclipse。

注意mvnDebug主要是为了调试maven和插件,而不是自己的应用