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

如何在调试模式下通过Gradle运行Jetty,jetty,gradle,Jetty,Gradle,有人知道如何配置jetty gradle插件以调试模式运行,以便我可以连接远程调试器吗 我已尝试将gradle和java选项设置为: -Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n …但它似乎不起作用 我能够让我自己的jetty安装工作正常,只是不能通过gradle(jettyRun或jettyRunWar) 问候。您是否在守护程序模式下运行gradle?据我所知,守护进程将运行jetty实例。因此,需

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

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

-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n
…但它似乎不起作用

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


问候。

您是否在守护程序模式下运行gradle?据我所知,守护进程将运行jetty实例。因此,需要为守护进程设置JVM参数。这应该可以通过在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>
然后Gradle挂起,我可以将Intellij的调试器放在端口9999上,并在java文件中设置断点。当我尝试打开网页时,jetty会通知我将遇到断点。

在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

我的是一个多项目的gradle构建,我尝试:

$ export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,suspend=y,server=y"
$ gradle jettyRun
但这并没有起作用。我甚至尝试将-Xnoagent添加到上面的GRADLE_OPTS设置中,但这也没有什么不同。此外,设置JAVA_选项而不是GRADLE_选项也不能解决问题。对我来说,解决问题的方法是添加一个gradle.properties,其中包含:

org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5005,suspend=y
我马上就可以到达断点了。可能是其他答案中提到的解决方案对我不起作用,因为它是一个多项目构建。不确定

我只是想提供一个对我有效的解决方案,以防上述解决方案对其他人无效


附言:在gradle 1.5/1.6中试用过,并将上述设置添加到gradle.properties中,这两个版本都适用

Im my cases,在运行以下命令之前,它不起作用。
GRADLE\u OPTS='-XX:MaxPermSize=256M-Xdebug-Xrunjdwp:transport=dt\u socket,server=y,suspend=n,address=4001'GRADLE jettyRun


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

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

源代码和文档:


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

set GRADLE\u OPTS=-Xdebug-Xrunjdwp:transport=dt\u 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中添加相同的参数时,它不起作用

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


它可以帮助您正确配置gretty插件,以便使用IntelliJ Idea调试jetty应用程序

我使用
org.gradle.debug
属性运行它:


./gradlew-Dorg.gradle.debug=true jettyRun

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

然后,我在IntelliJ中创建了远程运行配置,值为“运行远程JVM的命令行参数”

-agentlib:jdwp=transport=dt_套接字,服务器=y,挂起=n,地址=5005


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

将其添加到build.gradle中

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

你说得对,那应该行得通。我通过JAVA_选项设置,效果很好。你的gradle项目是多项目设置吗?是的。您可能希望将“-Xdebug-Xnoagent”添加到JAVA_选项中;不知道jettyRun,但gradle run可以通过--debug jvm调用,以启动5005上的调试器。它目前正在运行。我想,我会按照您的建议来确保。看起来,Cheesejetty默认在进程中运行。您所说的“进程中”是什么意思?你是说格拉德尔过程吗?如果您在没有守护程序的情况下运行“gradle jettyRun”,则gradle进程将挂起,直到您强制其停止。在gradle.properties中设置
org.gradle.jvmargs
也无法在守护程序模式下工作。也许我做错了。有什么想法吗?如果您想在这里回答,我还提交了一个问题:在cygwin中尝试了Gradle 3.5.1,发现Gradle因为jvm参数而为jetty分叉了一个进程。如果没有守护进程,两个进程都试图使用相同的端口,而非jetty进程获胜。在没有守护进程的情况下,第一个进程使用命令行中指定的端口9999,而分叉进程使用的是gradle的默认端口5005。因此,我能够使用端口5005连接到分叉码头流程。很好!我也是。我在windows上,所以我使用了
set GRADLE\u OPTS=-Xdebug-Xrunjdwp:transport=dt\u socket,address=9999,server=y,suspend=n
+1感谢这终于在windows上起作用了。我用引号引用了我的语句,这似乎给我带来了所有的麻烦。任何值得使用的IDE都允许您添加断点,并允许基于端口运行远程会话。检查我试过Gretty,idea很好,但它不支持多jetty/tomcat实例,这对多个项目非常重要你是说“同一个servlet容器上的多个web应用程序”吗?不,两个独立的项目,当我通过运行gradle run启动第一个项目时,然后转到第二个项目目录,运行
gradle run
,gretty告诉我已经有一个实例错误。请尝试为这两个实例定义不同的端口集:
gretty{httpPort=8081 servicePort=8082 statusPort=8083}
Gradle发行版:来自目标构建的Gradle包装Gradle版本:3.0 Java Home:C:\Java\jdk1.7.0\U 45 JVM参数:无程序参数:无Gradle任务:jettyRunDebug“”:prepareInplaceWebAppFolder最新:createInplaceWebAppFolder最新
jettyRun {
    jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
}