1

プログラムとしてtomcatを開始(デバッグ:jpdaを使用)および停止できるようにEclipseを構成しました。初めてEclipseからTomcatを起動/シャットダウンしたときは成功しました。しかし、2回目に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からshutdowntomcatを実行すると、ポートが閉じられることはないと思います。コンピューターを再起動すると、ポートが解放され、Eclipseからstarttomcatを再度実行できます。しかし、コンピュータを再起動して動作させることができないときはいつでも..より根本的な解決策を探しています...

これが、Tomcatをプログラムとして実行するようにEclipseを構成した方法です。

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 から単純な Java プログラムとして Tomcat を開始/停止します。この方法では、プログラムが他の Java プログラムと同様にデバッグ可能になるため、リモート デバッグも必要ありません。私の IntelliJ 設定は次のようになります:

メイン クラス: org.apache.catalina.startup.Bootstrap

VM パラメータ: -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プログラム パラメータとして同様の環境を作成して、Tomcat を正常にシャットダウンすることができます。の内部を見るとcatalina.sh、このスクリプトが実際に行っていることは、これらすべてのパラメーターを準備し、Tomcat を同じ方法で起動することだけです。

于 2012-01-26T10:49:47.837 に答える