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和插件,而不是自己的应用
我正在尝试使用 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:
<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和插件,而不是自己的应用