我想爲幾個測試任務設置一些東西。更具體地說,我想添加一些環境變量和一些系統屬性,也許還有一些其他的東西,例如「dependencies」或「workingDir」。與常規Test
的任務,我能做到這一點,如何擴展新任務類型的Gradle任務的行爲?
task test1(type:Test, dependsOn:[testPrep,testPrep1]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
}
task test2(type:Test, dependsOn:[testPrep]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
systemPropety 'newProperty','fdsjfkd'
}
這將是不錯的延長定期測試任務類型,其中常見的定義是定義一個新的任務類型MyTestType
。
task test1(type:MyTestType){
dependsOn testPrep1
}
task test2(type:MyTestType){
systemPropety 'newProperty','fdsjfkd'
}
什麼是最好的方法來做到這一點?看來方法是最終的,不能擴展。我需要做一些類似doFirst
的設置來設置這些屬性。我應該在構造函數中添加所有額外的值嗎?有沒有其他的鉤子可以使用?謝謝。
非常感謝。我更喜歡第二個。看起來,第一種方法違反了「不要在構造函數中調用可重寫方法」的經常引用的原則,儘管它可能並不重要,因爲'systemProperty'方法非常安全。另外,如果我需要項目中的任何屬性,所有上下文都不再可用,並且我必須始終調用getProject()。 – zggame