我正在尝试使用 Maven 和 Eclipse 进行远程调试。在远程计算机上,我执行 mvnDebug spring-boot:run
,并在 Eclipse 中的本地计算机上,使用适当的主机 IP 设置远程 Java 应用程序 调试配置端口和连接类型为标准(套接字连接)。
在远程计算机上,在尝试连接 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 显示无法连接到远程虚拟机。连接被拒绝。
没有任何附加信息,到目前为止,远程计算机上的端口 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 "$0"`/mvn" "$@"
如有任何建议或见解,我们将不胜感激。
最佳答案
就像使用 forked test 的 maven-surefire-plugin 一样,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 让 maven 终止。我没有测试,但这可以解释为什么你无法连接 Eclipse。
请注意,mvnDebug
主要用于调试maven和插件,而不是您自己的应用程序。
关于java - Maven和Eclipse远程调试: connection refused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60876758/