Применить лимит времени к задачам 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 на пропуск Этот метод.