我已将 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 运行 shutdown tomcat 时端口永远不会关闭。如果我重新启动计算机,端口将被释放,我可以从 Eclipse 再次运行启动 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
最佳答案
我不知道 Eclipse 是如何工作的,但看起来您在停止和启动 Tomcat 时都试图绑定(bind)到同一个 JPDA 端口。当您启动 Tomcat 时,它显然没问题,但是当您尝试停止它时 - 停止无法完成,因为端口已被占用。
有很多方法可以解决这个问题,我个人使用的是:
1) 从外部启动/停止 Tomcat。 tomcat/bin/catalina.sh jpda start
,tomcat/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 进程来停止 tomcat,或者使用 stop
作为程序参数创建一个类似的环境,这将优雅地关闭它。如果您查看 catalina.sh
,这个脚本所做的就是准备所有这些参数并以相同的方式启动 Tomcat。
关于eclipse - 无法在eclipse中将tomcat作为外部工具启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000882/