Gradle HttpFileServer,继续运行,但在 ctrl+c 时终止

标签 gradle

在我的 Gradle 构建过程中,我需要运行一个简单的网络服务器来提供一些静态内容。我正在使用 Gradle 的 integrated classes为此。

这是我的 build.gradle 的一个非常简单的版本:

apply plugin: 'groovy'

task server() {
  doLast {
    def root = new File(project.buildDir, '/site')
    def port = 8765
    def factory = new SimpleHttpFileServerFactory();
    def server = factory.start(root, port)
    println "HTTP server started on $port"
  }
}

我面临以下两个问题:

  • 在运行gradle server时,gradle执行,启动server,然后退出(明显是daemon在后台,server在运行,导致第二个问题)

  • 我无法通过 gradle 停止服务器。再次运行 gradle server 时,出现异常,因为端口正在使用中。

我喜欢以下任一解决方案:

  1. 当运行 gradle server 时,gradle 一直运行直到我按下 ctrl+c,然后服务器也被杀死

  2. 有两个任务,gradle startServergradle stopServer 用于启动和停止

我怎样才能做到这一点,或者是否有更好的不同解决方案?

最佳答案

有点 hack-ish 但它有效,服务器任务将挂起并且 SIGKILL 也会终止服务器

apply plugin: 'groovy'

task server() {
  doLast {
    def root = new File(project.buildDir, '/site')
    def port = 8765
    def factory = new SimpleHttpFileServerFactory();
    def server = factory.start(root, port)
    println "HTTP server started on $port"
    while(true) Thread.sleep(1000)
  }
}

关于Gradle HttpFileServer,继续运行,但在 ctrl+c 时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057658/

相关文章:

gradle - FindBugs不排除使用Gradle过滤的模式

gradle - 如何用 Gradle 处理同级项目?

java - Gradle 删除定义为任务输出的目录(陈旧目录)

android - 为什么任务包装函数不起作用

android - 在Android Studio中以离线模式编译时无法解析播放服务

java - 使类的对象出现在其他项目Spring中时发生ClassNotFoundException

android - 如何从build.gradle根文件向Android Gradle子项目添加javadoc任务?

java - 安卓工作室-Gradle : Execution failed for task ':Foo:dexDebug' - but why?

Java共享(交叉)依赖管理

spring - 如何排除 gradle 依赖项