1

我已将 eclipse 配置为能够启动(用于调试:使用 jpda)和停止 tomcat 作为程序。我第一次从eclipse启动/关闭tomcat是成功的。但是第二次尝试启动tomcat时出现以下错误:

FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690]

我认为当我从 Eclipse 运行关闭 tomcat 时,端口永远不会关闭。如果我重新启动计算机,端口将被释放,我可以从 eclipse 再次运行 start tomcat。但是每次我无法重新启动计算机以使其正常工作..寻找一个不太激进的解决方案...

这就是我配置我的 Eclipse 以将 tomcat 作为程序运行的方式。

Configured the external tool configuration in eclipse 
catalina script points to catalina.bat on my Windows machine 
under arguments : jpda run
In the Environment tab.
 "JPDA_ADDRESS" as the name and "8000" as the value
 "JPDA_TRANSPORT" as the name and "dt_socket" as the value
 "JAVA_OPTS" as the name and -server -XX:+UseParallelGC -Xmx768m -XX:MaxPermSize=160m -Djava.awt.headless=true as the value
4

1 回答 1

1

我不知道 Eclipse 是如何工作的,但看起来您在停止和启动 Tomcat 时都试图在同一个 JPDA 端口上绑定。当您启动 Tomcat 时,显然没问题,但是当您尝试停止它时 - 由于端口已被占用,因此无法停止。

有很多方法可以解决这个问题,这些是我个人使用的方法:

1) 从外部启动/停止 Tomcat。tomcat/bin/catalina.sh jpda starttomcat/bin/catalina.sh stop开箱即用,无需任何更改。也许 Eclipse 允许启动外部脚本?

2) 从 Eclipse 启动/停止 Tomcat 作为一个简单的 Java 程序。这样,您甚至不需要远程调试,因为您的程序可以像任何其他 Java 程序一样进行调试。我的 IntelliJ 配置如下所示:

主类: org.apache.catalina.startup.Bootstrap

虚拟机参数: -ea -cp $CLASSPATH:/path/to/tomcat/bin/bootstrap.jar -Dcatalina.base="/path/to/tomcat" -Dcatalina.home="/path/to/tomcat" -Djava.io.tmpdir="/path/to/tomcat/temp" -noverify -Xmx400M -XX:MaxPermSize=400M

程序参数: start

工作目录: /path/to/tomcat

然后,您可以通过简单地终止 Java 进程或使用stopas 程序参数创建一个类似的环境来停止 tomcat,这将优雅地关闭它。如果你往里看catalina.sh,这个脚本所做的实际上就是准备所有这些参数并以同样的方式启动 Tomcat。

于 2012-01-26T10:49:47.837 回答