@TaskAction
  public void startAction() throws AppEngineException, IOException {

    // Add a listener to write to a file for non-blocking starts, this really only works
    // when the gradle daemon is running (which is default for newer versions of gradle)
    File logFile = new File(devAppServerLoggingDir, "dev_appserver.out");
    FileOutputLineListener logFileWriter = new FileOutputLineListener(logFile);

    Logger taskLogger = getLogger();
    ProcessHandler processHandler =
        LegacyProcessHandler.builder()
            .addStdOutLineListener(taskLogger::lifecycle)
            .addStdOutLineListener(logFileWriter)
            .addStdErrLineListener(taskLogger::lifecycle)
            .addStdErrLineListener(logFileWriter)
            .setExitListener(new NonZeroExceptionExitListener())
            .buildDevAppServerAsync(runConfig.getStartSuccessTimeout());

    devServers.newDevAppServer(processHandler).run(runConfig.toRunConfiguration());

    getLogger().lifecycle("Dev App Server output written to : " + logFile.getAbsolutePath());
  }
@ TaskAction public void startAction ( ) throws AppEngineException , IOException { File logFile = new File ( devAppServerLoggingDir , "dev_appserver.out" ) ; FileOutputLineListener logFileWriter = new FileOutputLineListener ( logFile ) ; Logger taskLogger = getLogger ( ) ; ProcessHandler processHandler = LegacyProcessHandler . builder ( ) . addStdOutLineListener ( taskLogger :: lifecycle ) . addStdOutLineListener ( logFileWriter ) . addStdErrLineListener ( taskLogger :: lifecycle ) . addStdErrLineListener ( logFileWriter ) . setExitListener ( new NonZeroExceptionExitListener ( ) ) . buildDevAppServerAsync ( runConfig . getStartSuccessTimeout ( ) ) ; devServers . newDevAppServer ( processHandler ) . run ( runConfig . toRunConfiguration ( ) ) ; getLogger ( ) . lifecycle ( "Dev App Server output written to : " + logFile . getAbsolutePath ( ) ) ; }
Task entrypoint : start the dev appserver (non-blocking).