在我的 Gradle 构建期间,我需要运行一个简单的 Web 服务器来提供一些静态内容。为此,我正在使用 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 执行,启动服务器,然后退出(明显是后台驻留,服务器在运行,导致第二个问题)
  • 我不可能通过 gradle 停止服务器。再次运行 gradle server 时,出现异常,因为端口正在使用中。

  • 我喜欢以下任一解决方案:
  • 运行 gradle server 时,gradle 一直运行,直到我按下 ctrl+c,然后服务器也被杀死
  • 有两个任务,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/

    10-12 00:32
    查看更多