Intellij idea 部署&;使用IntelliJ 12调试远程Jetty

Intellij idea 部署&;使用IntelliJ 12调试远程Jetty,intellij-idea,jetty,remote-debugging,Intellij Idea,Jetty,Remote Debugging,我已经黑客和谷歌搜索了一段时间,我发现了几个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 d

我已经黑客和谷歌搜索了一段时间,我发现了几个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:.)
然后在上面的一个或另一个之后,他们会告诉您类似“编辑配置>jetty>remote并输入localhost,51887”(端口号不同)

然而,在12中,您选择remote后登录的页面有很多选项,并且在另一个选项卡上要求使用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上的JavaRMI通信(但它们难以辨认)。很明显,Intellij的通信并不令人满意,所以我想知道我是否需要做些什么来让Jetty玩得更好。请注意,更改Jetty版本目前还不是一个选项,所以我们不要去那里:)

我还尝试删除工件,禁用make,并尝试只连接调试器,但它仍然给我相同的红色baloon和错误消息,因此显然需要JNDI(端口1099)部分

有没有人看到我做错了什么,或者知道我应该做些什么来让这一切顺利进行

(我想知道这是否类似于:jboss问题)


编辑:感谢我发现,如果不指定编辑配置>+>jetty>remote,而是选择编辑配置>+>remote,则可以连接调试器,但是调试和部署是我想要的,所以这只是半个解决方案。

Jetty
远程
配置需要几个手动步骤,当您直接从IDEA使用
本地
配置启动Jetty时,这些步骤会自动执行

如果您必须使用
远程
配置,请尝试以下步骤:

在IDEA Jetty远程运行配置的
服务器
选项卡的
远程登台
部分:

  • 类型和
    主机指定
    相同的文件系统
  • 上下文
    部分的
    本地路径
    字段中指定
    /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

我认为通过wireshark连接到1099的事实消除了DNS问题的可能性。很明显,已建立连接,但通信失败,我不需要指定org.mortbay.start.Main。这很有效,谢谢!尝试使用本地配置运行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