背景:我有一个多项目 Gradle 构建,并且我定义了一个 Gradle 任务,它在 Exec 任务中运行 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
}
有更好的解决方案吗?也许我不必自己解决所有文件依赖项?