将时间限制应用于Gradle JavaExec任务?

时间:2018-01-15 16:03:38

标签: gradle randoop javaexec-gradle-plugin

我正在设置Randoop测试用例生成以贯穿我的项目。我已经使用JavaExec类型的Gradle任务实现了这个目标:

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%CPU并且没有输出。

是否可以对JavaExec任务设置时间限制以对此任务应用时间限制?

谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,您无法在JavaExec任务或javaExec方法调用上设置超时。

顺便说一下。您不使用JavaExec类型的任务,而是使用javaExec方法调用。只有在自定义任务中要执行更多操作时才有意义。如果你想要的只是java exec,你应该使用JavaExec类型的任务。

我认为要获得所需的行为,您需要使用标准的Groovy方式来调用["java", "-jar", "your.jar", "your", "arguments"].execute()之类的外部进程,并使用Process.waitForOrKill(long)等待一段时间然后终止该进程。

答案 1 :(得分:0)

最后我没有对我的任务实施任何时间限制,而是弄清楚为什么Randoop有时会“卡住”这么久(它正在测试一个只是睡觉的等待(......)方法)并设置Randoop省略了这种方法。