【问题标题】:Gradle embedded jetty plugin is not stopping automaticallyGradle嵌入式码头插件不会自动停止
【发布时间】:2014-06-08 07:03:30
【问题描述】:

我可以使用 gradle jettyRunWar 命令运行嵌入式码头。但是,它不会在程序终止时自动停止。

在 stackoverflow 和其他论坛上搜索解决方案后,我尝试了以下两个代码。但没有一个有效。

1) build.gradle

apply plugin: 'jetty'

task runJetty() {

    jettyStop.stopPort = 8090

    dependsOn jettyRunWar
    finalizedBy jettyStop
}

2) build.gradle

apply plugin: 'jetty'

task runJetty() {

    doFirst {
        jettyRunWar.stopPort = 8090
        jettyRunWar.stopKey = 'stopKey'

        jettyRunWar.daemon = true
        tasks.jettyRunWar.execute()
    }

    doLast {
        jettyStop.stopPort = 8090
        jettyStop.stopKey = 'stopKey'

        tasks.jettyStop.execute()
    }
}

在这两种情况下,在运行 runJetty 任务时,嵌入式码头服务器会启动,但不会在程序终止时停止。

FWIW:我正在使用 Eclipse 外部工具配置来启动和终止 build.gradle。并且,在url中使用8080端口进行测试。

【问题讨论】:

  • 不建议在任务上调用execute() 方法。如果要实现上面的工作流程,请尝试使用dependsOnfinalizedBy

标签: gradle embedded-jetty build.gradle


【解决方案1】:

在 2) 中尝试将 stopPort 设置为其他值,例如 8090。

我认为您实际上是在 8080 上运行码头,因此该端口将被占用,您无法设置“停止”侦听器。

否则,您可以将以下内容放入您的 build.gradle

// need to set the stopPort and stopKey so we are able to stop jetty!
jettyRunWar.stopPort = 8090
jettyRunWar.stopKey = 'stopKey'
jettyStop.stopPort = 8090
jettyStop.stopKey = 'stopKey'

这是一个在 intelliJ 中对我有用的示例 http://pastebin.com/eTtvCdTb

我从 intelliJ 的 Gradle 任务面板运行“jettyRunWar”和“jettyStop”。我只是为 jettyRun 设置了参数,以防万一我意外运行该任务,然后我可以关闭服务器。

【讨论】:

  • 将端口更改为 8090 后,服务器已启动但不会在程序终止时自动停止。我已经更正了问题中的端口。我也尝试先运行 gradle jettyRunWar 命令,然后再运行 gradle jettyStop。但是在运行 jettyStop 时出现异常:它当前正在被另一个 Gradle 实例使用。你能在 IntelliJ 之外运行你的 build.gradle,比如 Eclipse 或命令行吗?
  • 添加 jettyRun.stopPort = 8090 和 jettyRun.stopKey = 'stopKey' 如您提供的示例链接所示。我可以使用 gradle jettyStop 命令停止服务器。现在,我没有收到“它当前正在被另一个 Gradle 实例使用”异常。
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 2014-02-25
相关资源
最近更新 更多