我想为几个测试任务设置一些东西。更具体地说,我想添加一些环境变量和一些系统属性,也许还有一些其他的东西,例如“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