Применить лимит времени к задачам Gradle JavaExec?

Я настраиваю генерацию тестового набора Randoop для запуска моих проектов. Я достиг этого с помощью задачи Gradle типа JavaExec:

task RandoopGenerateL1Tests(dependsOn: ['assembleDebug']) {
  group = "Verification"
  description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

  //Various setup things here...

  doLast {
    javaexec {
      classpath = tasks['testDebugUnitTest'].classpath
      classpath = classpath + files('D:\\randoop-3.1.5\\randoop-all-3.1.5.jar')

      systemProperty 'RANDOOP_PATH', 'D:\\randoop-3.1.5'
      systemProperty 'RANDOOP_JAR', 'D:\\randoop-3.1.5\\randoop-all-3.1.5.jar'

      def classlistarg = '--classlist=' + classlistfilepath
      def packagenamearg = '--junit-package-name=' + key
      def junitoutputdirarg = '--junit-output-dir=' + projectDir.path + '/src/randooptest/java'
      def timelimitarg = '--timeLimit=10'

      main = 'randoop.main.Main'
      args 'gentests',classlistarg,packagenamearg,junitoutputdirarg,timelimitarg

      println "Randoop will be invoked with args: " + args.toString()
    }
  }
}

Аргумент --timeLimit=10 предназначен для применения ограничения времени (в секундах) к этапу исследования Randoop, но для меня это работает только время от времени. В некоторых выполнениях этой задачи Randoop начинает этап исследования, а затем "зависает" - процесс java.exe потребляет 0% ЦП и не выводится.

Можно ли установить ограничение по времени для задачи JavaExec, чтобы применить ограничение по времени для этой задачи?

Спасибо!

2 ответа

Насколько я знаю, вы не можете установить тайм-аут на JavaExec задача или javaExec вызов метода.

Btw. вы не используете задачу типа JavaExec но javaExec вызов метода. Это имеет смысл, только если вы хотите сделать больше в своей пользовательской задаче. Если все, что вы хотите сделать, это Java-Exec, вы должны использовать задачу типа JavaExec вместо.

Я думаю, чтобы получить желаемое поведение, вам нужно использовать стандартный способ Groovy для вызова внешнего процесса, как ["java", "-jar", "your.jar", "your", "arguments"].execute() и используйте Process.waitForOrKill(long), чтобы подождать определенное время, а затем завершить процесс.

В конце концов, я не установил ограничения по времени для своей задачи, а скорее выяснил, почему Randoop иногда так долго "зависал" (это тестирование метода wait(...), который просто спит), и настроил Randoop на пропуск Этот метод.

Другие вопросы по тегам