我一直在黑客攻击和谷歌搜索一段时间,我发现了几个statck溢出线程,似乎它们是为旧版本的intellij编写的,带有各种应用程序服务器。通常他们会告诉你输入
java -Xdebug -Xrunjdwp:transport=dt_socket,address=51887,suspend=n,server=y
One answer建议使用类似
的内容-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>远程并输入localhost,51887”(端口号不同)
然而在12中,您选择远程后登陆的页面有很多选项,并且要求JNDI端口,而不是另一个选项卡上的jdwp端口,它实际上建议上面的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),我可以telnet到1099,所以我知道JVM正在监听。 (我们尽量不要担心,这似乎就是说,打开一个端口,任何人都可以通过网络在没有密码的情况下通过网络安装任意java代码)
然而,在Intellij中,每当我尝试部署和调试它时,都会给出以下消息:
当我使用wireshark窥探端口1099时,我可以看到1099以上的Java RMI通信(但它们难以辨认)。显然,Intellij的通信并不令人满意,所以我想知道我是否需要对Jetty做些什么才能让它发挥得淋漓尽致。请注意,改变Jetty版本目前不是一个选项,所以我们不要去那里:)。
我也尝试删除工件,禁用make,并尝试连接调试器,但它仍然给我相同的红色气球和错误消息,所以显然需要JNDI(端口1099)部分。
有没有人看到我做错了什么,或者知道我应该做些什么才能让它发挥作用?
(我想知道它是否与此类似:http://youtrack.jetbrains.com/issue/IDEA-65746 jboss问题)
修改:感谢this google groups post我发现如果您未指定编辑配置>可以连接调试器。 +>码头>远程,而是选择编辑配置> +>远程,但调试和部署是我所追求的,所以这只是一半的解决方案。
答案 0 :(得分:6)
Jetty remote
配置需要几个手动步骤,当您使用local
配置直接从IDEA启动Jetty时,会自动执行这些步骤。
如果您绝对必须使用remote
配置,请尝试以下步骤:
在IDEA Jetty远程运行配置的Remote staging
标签的Server
部分中:
Same file system
和Type
Host
<Jetty home>/contexts
部分Local path
字段中contexts
文件夹的路径(如果您在另一台机器上运行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>
值应与IDEA Jetty运行配置的JNDI port
字段中指定的值相同
将以下配置文件传递给Jetty进程(在命令行中):
etc/jetty-jmx.xml
etc/jetty.xml
如果您需要调试,您还应该传递给从IDEA Jetty运行配置获取的Jetty进程VM参数:Startup/Connection
选项卡,选择Debug
以下是使用所有必需选项启动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