2017-10-19 77 views
0

我想遍历我的test/目录,其中包含每个测试用例的子文件夹,然后希望在每个子文件夹中执行不同的任务。Gradle:迭代测试目录并在每个目录中执行多项任务

这不起作用:因为xslt任务不能doLast关闭(issue),因为从doFirst/doLast调用任务从来没有被正式支持(SO answer)里面执行

plugins { 
    id 'com.github.eerohele.saxon-gradle' version '0.3.0' 
} 

task lessCompile { 
    description 'compile less to css' 
    ... 
} 

task runAllTests(dependsOn: lessCompile) { 
    description 'runs all tests' 

    doLast { 
    new File(testFolder).eachDir() { testcase-> 
     println testcase 

     // transform test_dev.xml to test_dev_prep.xml 
     xslt { 
     input file(testcase + '/test_dev.xml') 
     stylesheet file('xslt/prepare.xsl') 
     output file(testcase + '/test_dev_prep.xml') 
     } 

     exec { 
     workingDir '.' 
     commandLine 'cmd', "/c sys-command $testcase -param ..." 
     } 

     javaexec { 
     classpath = buildscript.configurations.classpath 
     main = '.....' 
     args = ['-headless', '-f1', "$testcase/file1" ] 
     } 
    } 
    } 
} 

runAllTests任务失败。

但是,什么是官方方式然后遍历目录,执行测试并将参数传递给这些任务。

而不要与dependsOn来,这不适合我的情况。我只在这里使用它在这个例子来说明lessCompile是在违背我尝试从doLast块内呼叫其他任务的静态任务。

+0

摇篮任务只能在构建执行一次。因此,您可以为所有目录使用一个任务(和一个执行),或者为每个目录使用一个任务。 –

回答

1

其实,任务是从未执行内其他任务或他们doFirst/doLast关闭。

StackOverflow question you linked的话题是关于直接调用execute上的任务,你应该永远,因为它可能会破坏摇篮的任务系统。你真正想要做的就是调用一个方法来完成与特定任务完全相同的事情,但这根本不可能。

摇篮提供的方法copydeleteexecjavaexec,但没有那些有什么关系的任务,即使他们可以提供的配置相同的接口。在您当前的示例中,只有两项任务:lessCompilerunAllTests

所以,做在摇篮东西多个目录,并用不同的配置(如输入和输出文件),你需要为每个目录创建一个新的任务:

task lessCompile() { /* configure lessCompile task */ } 

task runAllTests() { 
    file('test').eachDir { testcase -> 
     dependsOn (tasks.create([name: "$testcase.name|javaexec", type: JavaExec], { 
      // configure javaexec task 
     }).dependsOn (tasks.create([name: "$testcase.name|exec", type: Exec], { 
      // configure exec task 
     }).dependsOn (tasks.create([name: "$testcase.name|xslt", type: SaxonXsltTask], { 
      // configure xslt task 
     }).dependsOn (lessCompile)))) 
    } 
} 

为了与一个文件夹testtest1test2这最终会执行以下任务gradle runAllTests

:lessCompile 
:test1|xslt 
:test1|exec 
:test1|javaexec 
:test2|xslt 
:test2|exec 
:test2|javaexec 
:runAllTests 

它可能会产生混淆,该任务的定义出现在对面的奥德他们的执行,但这是由dependsOn链造成的。您可以使用finalizedBy代替,但我认为这些都是需要做以前其他任务任务的情况下,而不是需要做其他任务的任务。

+0

真棒,那工作,谢谢! – ToFi

相关问题