背景:我有一个多项目Gradle构建,我已经定义了一个Gradle任务,它在Exec任务中运行
JavaScript单元测试.此任务的输入是项目中的JavaScript文件,因此只有在修改其中一个源文件时才会重新运行.该任务将添加到主项目的所有JavaScript项目中.
问题:我想扩展它,以便在项目中的JavaScript文件或其任何项目依赖项中的JavaScript文件发生更改时重新运行测试.这怎么做得最好?
如果放在每个子项目构建文件中(在依赖声明之后),下面的代码可以工作,但我们有20个JavaScript子项目,我想保持DRY.
project.ext.jsSourceFiles = fileTree("src/").include("**/*.js*")
task testJavaScript(type: Exec, dependsOn: configurations.js) {
inputs.files resolveJavascriptDependenciesFor(project)
outputs.file "report.xml"
// Run tests in JSTestDriver using command line call...
}
def resolveJavascriptDependenciesFor(project) {
def files = project.jsSourceFiles
project.configurations.js.allDependencies.each {
files = files + resolveJavascriptDependenciesFor(it.dependencyProject)
}
return files
}
有更好的解决方案吗?也许我自己不必解决所有文件依赖关系?
最佳答案 如前面的答案中所述,在子项目闭包中添加jsTest任务将使得为每个子项目添加jstesting支持变得非常容易.我认为您可以通过将源文件声明为依赖项来简化输入设置:
dependencies {
js filetree("src/main").include("**/*.js")
}
和
subprojects { subproj ->
task testJavaScript(type: Exec, dependsOn: configurations.js) {
inputs.files subproj.configurations.js
outputs.file "report.xml"
commandLine ...
}
}