Gradle Exec task not exiting

前端 未结 3 607
深忆病人
深忆病人 2020-12-16 07:37

I am new to Gradle and I am using a small task to start/stop local tomcat server.

My gradle task:

task startTomcat(type: Exec){
    workingDir ENV[\         


        
相关标签:
3条回答
  • 2020-12-16 08:09

    To immediately exit after the external process started I used:

    task startServer(type:Exec) {
      ProcessBuilder pb = new ProcessBuilder("cmd","/c","start.bat")
      pb.directory(new File("workingFolder"))
      pb.start();
    }
    
    0 讨论(0)
  • 2020-12-16 08:16

    Since you're running on Windows, you've likely encountered this bug: Process execution hangs on Windows if child processes are still alive. Unfortunately I don't have a simpler workaround to suggest.

    0 讨论(0)
  • 2020-12-16 08:25

    Thanks Peter for the input. Here is the solution that worked for me using ProcessBuilder:

    /* Configuration for tomcat */
    task catalinaConfig {
        ext.binDir = ENV['CATALINA_HOME'] + "\\bin"
    }
    
    task startTomcat << {   
        println "Tomcat path: " + catalinaConfig.binDir 
        ProcessBuilder pb = new ProcessBuilder(["cmd", "/c", "catalina.bat", "start"]);
        pb.directory(new File(catalinaConfig.binDir));
    
        println "Starting tomcat now ... "
        Process proc = pb.start();
        proc.waitFor();
        println "Tomcat is coming up now ... " + proc.exitValue()
    }
    
    task stopTomcat << {    
        println "Tomcat path: " + catalinaConfig.binDir 
        ProcessBuilder pb1 = new ProcessBuilder(["cmd", "/c", "catalina.bat", "stop"]);
        pb1.directory(new File(catalinaConfig.binDir));
    
        println "Stopping tomcat now ... "
        Process proc1 = pb1.start();
        proc1.waitFor();
    }
    
    0 讨论(0)
提交回复
热议问题