背景:マルチプロジェクトのGradleビルドがあり、ExecタスクでJavaScript単体テストを実行するGradleタスクを定義しました。このタスクへの入力はプロジェクト内のJavaScriptファイルであるため、ソースファイルの1つが変更された場合にのみ再実行されます。タスクは、マスタープロジェクトからすべての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
}
より良い解決策はありますか?たぶん、すべてのファイルの依存関係を自分で解決する必要はありませんか?