[英]How to run Jetty via Gradle in Debug Mode
有谁知道如何配置jetty gradle插件以在调试模式下运行,以便我可以附加远程调试器?
我试过设置gradle和java选择:
-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n
...但是似乎无效。
我可以使自己的码头安装工作正常,而不必通过gradle(jettyRun或jettyRunWar)进行安装。
问候。
在Linux上:
export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n"
gradle jettyRun
在Windows上:
set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n
gradle jettyRun
尝试使用Gretty插件,它提供了gradle任务jettyRunDebug,jettyStartDebug等。
源代码和文档: https : //github.com/akhikhl/gretty
披露:我是Gretty插件的作者。
您是否在守护程序模式下运行gradle? 据我了解,守护程序将随后运行码头实例。 因此,您需要为守护程序设置JVM args。 这可以通过在gradle.properties中设置org.gradle.jvmargs来实现。
只需在非守护程序模式下在这里工作的简单项目
build.gradle:
apply plugin: 'idea'
apply plugin: 'jetty'
src / main / java / com / Test.java:
package com;
public class Test {
static public String greet() {
return "Hi";
}
}
src / main / webapp / index.jsp:
<%@ page import="com.Test" %>
<html><body>
<%= Test.greet() %>
</body></html>
命令行(尽管在cygwin中):
$ GRADLE_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n' gradle jettyRun
Gradle然后挂起,我可以将Intellij的调试器放在端口9999上,并在java文件中设置一个断点。 然后,当我尝试打开网页时,码头通知我即将到达断点。
我的是一个多项目gradle构建,我尝试过:
$ export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,suspend=y,server=y"
$ gradle jettyRun
那没有用。 我什至尝试将-Xnoagent添加到上面的GRADLE_OPTS设置中,但这也没有任何区别。 同样,设置JAVA_OPTS而不是GRADLE_OPTS也不能解决问题。 为我解决了问题的是添加了gradle.properties与:
org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5005,suspend=y
我马上就可以达到断点。 可能是其他答案中提到的解决方案对我不起作用,因为它是一个多项目构建。 不确定!
只是想提供适用于我的解决方案,以防上述解决方案不适用于其他人。
PS:尝试过gradle 1.5 / 1.6,并将上面的设置添加到gradle.properties中,适用于两个版本!
当使用gradle jettyRunWar
运行时, set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n
对我也gradle jettyRunWar
。
我找到了另一种有效的解决方案,运行gradle jettyRunWar并使用以下选项gradle -Dorg.gradle.jvmargs="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" jettyRunWar
。
但是当我在gradle.properties中添加相同的参数时,它不起作用...
将此添加到build.gradle
jettyRun {
jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
}
在我的情况下,直到我运行以下命令,它才起作用。 GRADLE_OPTS='-XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001' gradle jettyRun
并且当它起作用时,在服务器控制台中,我可以使用System.out.println(...)
来检查我要查看的内容。 至于断点调试,不幸的是,我还没有找到解决方法。 谁都知道,欢迎补充。
另外,请查看官方Wiki中的以下两个链接:
https://github.com/akhikhl/gretty/issues/36
http://akhikhl.github.io/gretty-doc/Debugger-support.html
它可以帮助您正确配置gretty插件以使用IntelliJ Idea调试码头应用程序
我使用org.gradle.debug
属性运行它:
./gradlew -Dorg.gradle.debug=true jettyRun
此时,gradle冻结,并等待传入的调试连接。
然后,我在IntelliJ中创建了远程运行配置,其值为“用于运行远程JVM的命令行参数”为-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
最后,我运行了这个新配置,gradle恢复了进度,IDE在第一个断点处停止了运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.