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

时间:2012-02-16 16:50:25

标签: jetty gradle

有谁知道如何配置jetty gradle插件以在调试模式下运行,以便我可以连接远程调试器?

我已经尝试将gradle和java选择设置为:

-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n

......但它似乎不起作用。

我能够让我自己的码头安装工作正常,而不是通过gradle(jettyRun或jettyRunWar)。

问候。

9 个答案:

答案 0 :(得分:46)

在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

答案 1 :(得分:17)

尝试使用Gretty插件,它提供了gradle任务jettyRunDebug,jettyStartDebug等。

源代码和文档:https://github.com/akhikhl/gretty

披露:我是Gretty插件的作者。

答案 2 :(得分:5)

您是否在守护进程模式下运行gradle?据我所知,守护进程将运行jetty实例。因此,您需要为守护程序设置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 /主/ JAVA / COM / Test.java:

package com;
public class Test {
    static public String greet() {
        return "Hi";
    }
}

的src /主/ web应用/ 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文件中设置断点。当我尝试打开网页时,码头告诉我有关我将会遇到断点的事。

答案 3 :(得分:5)

我是一个多项目的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

我立即可以打破断点。可能是其他答案中提到的解决方案对我不起作用,因为它是一个多项目构建。不确定!

只是想提供适用于我的解决方案,以防上述解决方案对其他人不起作用。

P.S:尝试使用gradle 1.5 / 1.6并将上面的设置添加到gradle.properties适用于这两个版本!

答案 4 :(得分:3)

使用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中添加相同的参数时,它不起作用......

答案 5 :(得分:2)

将其添加到build.gradle

jettyRun {
    jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
}

答案 6 :(得分:0)

我是我的情况,直到我运行以下命令才能工作。 GRADLE_OPTS='-XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001' gradle jettyRun

当它工作时,在服务器控制台中我可以使用System.out.println(...)来检查我想要看到的内容。至于断点调试,遗憾的是,我还没有找到办法。任何人都知道如何,欢迎添加补充。

答案 7 :(得分:0)

另外,请看官方维基的这两个链接:

https://github.com/akhikhl/gretty/issues/36

http://akhikhl.github.io/gretty-doc/Debugger-support.html

它可以帮助您正确配置gretty插件以使用IntelliJ Idea

调试jetty应用程序

答案 8 :(得分:0)

我用while(queryRun.next()){...}属性运行它:

org.gradle.debug

此时gradle冻结并等待传入​​的调试连接。

然后我在IntelliJ中创建了远程运行配置,其值为“运行远程​​JVM的命令行参数” ./gradlew -Dorg.gradle.debug=true jettyRun

最后,我运行了这个新配置,gradle恢复了进度,IDE在第一个断点处停止。