8

私はしばらくの間ハッキングとグーグルをしてきましたが、さまざまなアプリケーションサーバーを備えた古いバージョンのintellij用に作成されたように見えるいくつかのstatckオーバーフロースレッドを見つけました。通常、彼らはあなたに入るように言います

java -Xdebug -Xrunjdwp:transport=dt_socket,address=51887,suspend=n,server=y

1つの答えは次のようなものを使用することを提案します

-agentlib:jdwp:transport=dt_socket,address=51887,suspend=n,server=y

しかし、私はこれを取得します:

Error occurred during initialization of VM
Could not find agent library: libjdwp:transport.jnilib (searched /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Libraries:/System/Library/Java/Extensions:/Library/Java/Extensions:.)

次に、上記のいずれかの後に、「構成の編集> jetty> remote and enter localhost、51887」のように表示されます(ポート番号は異なります)

ただし、12では、リモートを選択した後に表示されるページには多数のオプションがあり、別のタブのjdwpポートではなく、JNDIポートを要求しているため、実際には上記のjdwpパラメーターが提案されます。

JNDIポートビットを調べると、通常、このような引数をコマンドラインに追加するための命令が生成されます...

-Dcom.sun.management.jmxremote= \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\

私もそれを実行し、Javaが保持しているポート1099(lsofを使用)を確認でき、1099にtelnetできるので、JVMがリッスンしていることがわかります。(つまり、パスワードなしでネットワーク経由で任意のJavaコードをコンピューターにインストールするためのポートを開くという事実を心配しないようにします)

ただし、Intellijでは、デプロイしてデバッグしようとすると、次のメッセージが表示されます。

はい、私はそれが突堤の古代のバージョンであることを知っています

Wiresharkでポート1099をスヌープすると、1099を介したJava RMI通信を確認できます(ただし、判読できません)。明らかに、Intellijにとって通信は満足のいくものではないので、Jettyをうまく機能させるために何かする必要があるのではないかと思います。Jettyのバージョンを変更することは現在のところオプションではないので、そこには行かないことに注意してください:)。

また、アーティファクトを削除し、makeを無効にして、デバッガーを接続しようとしましたが、それでも同じ赤いバルーンとエラーメッセージが表示されるため、明らかにJNDI(ポート1099)の部分が必要です。

誰かが私が間違っていることを見たり、これを機能させるために私がしなければならないことを知っていますか?

(これに似たものかどうか疑問に思います:http://youtrack.jetbrains.com/issue/IDEA-65746 jboss issue)

編集:このGoogleグループの投稿のおかげで、[構成の編集]> +> [jetty]> [リモート]を指定せずに、[構成の編集]> +> [リモート]を選択し、デバッグとデプロイを行うと、デバッガーを接続できることがわかりました。それが私が求めているものなので、それは半分の解決策にすぎません。

4

1 に答える 1

6

Jettyの構成には、代わりに構成remoteを使用してIDEAから直接Jettyを起動すると、自動的に実行されるいくつかの手動の手順が必要です。local

どうしてもremote構成を使用する必要がある場合は、次の手順を試してください。

IDEA Jettyリモート実行構成のタブのセクションRemote stagingServer

  • およびを指定Same file systemしますTypeHost
  • セクションのフィールドに<Jetty home>/contextsフォルダへのパスを指定しますLocal pathcontexts

(JettyをIDEA以外のマシンで実行している場合、設定は異なりますが、あなたの場合は同じマシンであると思います)

次のVMパラメータをJettyプロセスに渡します。

-Dcom.sun.management.jmxremote=
-Dcom.sun.management.jmxremote.port=<JNDI port>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-DOPTIONS=jmx

<JNDI port>JNDI port値は、IDEAJetty実行構成のフィールドで指定されたものと同じである必要があります

次の構成ファイルを(コマンドラインで)Jettyプロセスに渡します。

  • etc/jetty-jmx.xml
  • etc/jetty.xml

デバッグする必要がある場合は、IDEA Jetty実行構成から取得したJettyプロセスVMパラメーターにも渡す必要があります。Startup/Connectionタブで、Debugリスト項目を選択します。To debug remote server JVM ...

必要なすべてのオプションを使用してJettyプロセスを開始するためのサンプルコマンドラインは次のとおりです。

java -Xdebug -Xrunjdwp:transport=dt_socket,address=60208,suspend=n,server=y -DSTOP.PORT=0 -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -DOPTIONS=jmx -Dfile.encoding=UTF-8 -classpath start.jar etc/jetty-jmx.xml etc/jetty.xml 
于 2013-02-12T14:43:59.947 に答える