我正在努力调试构建为Sling捆绑包的应用程序。该应用程序几乎完全是Groovy代码(我有Groovy Eclipse插件),而Eclipse(使用Maven)正在构建.jar并在Sling中安装它而没有任何问题。
然而,它无法调试。我已按照说明设置远程调试,我收集这些是调试Sling应用程序所必需的 - 具体来说,我使用以下命令启动Sling:
java -Xdebug -Xnoagent -Djava.io.tmpdir=/c/Users/nickgolding1/temp -Xmx1024m -Xrunjdwp:transport=dt_socket,address=30303,server=y,suspend=n -jar org.apache.sling.launchpad-6-SNAPSHOT-standalone.jar -p 8080
...然后在Eclipse中设置一个类型为“远程Java应用程序”的调试配置,指向我的项目,连接类型“标准(套接字连接)”,主机localhost,端口30303.此配置似乎开始好的 - 至少,我没有得到任何反馈表明它没有 - 但我在Groovy代码中设置的断点实际上并没有破坏对Sling应用程序的请求执行。
我在各种论坛上看到了一些帖子,这些帖子显示人们在通过远程Java应用程序配置调试Groovy代码时遇到问题,他们在Java代码中没有问题。不幸的是我的应用程序都是Groovy而且没有Java,因此我无法验证这种情况。
任何想法都赞赏!
答案 0 :(得分:3)
首先,一个建议。在Xrunjdwp:transport选项中设置suspend=y
。这将暂停在main中,并且可以让您更好地了解您的问题是否与您的调试选项或Groovy代码有关。
现在,更复杂的事情。是。有关调试远程Groovy代码的一些问题。当动态加载Groovy代码时,通常会出现问题。在这种情况下,调试名称通常与源名称不匹配,调试器不知道如何将动态加载的类文件与原始源代码匹配。
这里描述了一个这样的问题(毫无疑问,其他地方也会发生类似的事情): https://jira.springsource.org/browse/SPR-7113
所以,我的建议是,如果可能的话,你应该确保在发送到服务器之前预先编译你的groovy代码。 (并设置suspend=y
。)