繁体   English   中英

如何在调试模式下通过Gradle运行Jetty

[英]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来实现。

参见http://gradle.org/docs/current/userguide/tutorial_this_and_that.html#sec:gradle_properties_and_system_properties

只需在非守护程序模式下在这里工作的简单项目

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM