我已经黑客和谷歌搜索了一段时间,我发现了几个 statck 溢出线程,它们似乎是为旧版本的 intellij 编写的,具有各种应用程序服务器。通常他们会告诉你进入
java -Xdebug -Xrunjdwp:transport=dt_socket,address=51887,suspend=n,server=y
一个答案建议使用类似的东西
-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:.)
然后在上面的一个或另一个之后,他们会告诉你类似“编辑配置>码头>远程并输入本地主机,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),我可以远程登录到 1099,所以我知道 JVM 正在监听。(我们尽量不要担心这样一个事实,即打开一个端口,任何人都可以通过该端口通过网络将任意 java 代码安装到您的计算机上而无需密码)
但是,在 Intellij 中,每当我尝试部署和调试时,它都会给我以下消息:
当我使用wireshark 窥探端口1099 时,我可以看到超过1099 的java RMI 通信(但它们难以辨认)。显然,Intellij 的通信并不令人满意,所以我想知道我是否需要对 Jetty 做些什么才能让它发挥得更好。请注意,更改 Jetty 版本目前不是一个选项,所以我们不要去那里:)。
我还尝试删除工件、禁用 make 并尝试仅连接调试器,但它仍然给我相同的红色气球和错误消息,因此显然需要 JNDI(端口 1099)部分。
有没有人看到我做错了什么,或者知道我应该做些什么来让它工作?
(我想知道它是否与此类似:http: //youtrack.jetbrains.com/issue/IDEA-65746 jboss issue)
编辑:感谢这个 google groups post我发现如果您不指定 Edit Configurations> + > jetty > remote,而是选择 Edit Configurations > + > remote,但调试和部署,则可以连接调试器是我所追求的,所以这只是一个一半的解决方案。