我正在编写Gradle任务来生成应用程序部署所需的某个配置文件。我想让用户自定义生成文件的名称和位置。
任务类的草图如下:
class ConfigurationFileTask extends DefaultTask {
String configFileName = 'config.xml'
File configFilePath = new File(project.buildDir, configFileName)
}
我们的想法是让用户按照自己的意愿覆盖文件名或整个文件位置。
我意识到上面的代码实际上不起作用,因为project
的初始化程序运行时未定义configFile
;我的问题是找到正确的方法来做到这一点。
现在,我希望任务在更广泛的构建中成为一个好公民,这意味着其他任务应该能够引用其属性。例如,我希望用户能够写:
task createConfigFile(type: ConfigurationFileTask) {
configFileName = 'app-config.xml'
}
jar {
from(createConfigFile.configFilePath)
}
jar.dependsOn createConfigFile
并将生成的配置文件添加到jar中。请注意,在这种情况下,用户正在设置configFileName
,但请参考configFilePath
。这意味着必须在设置名称后的某个时间计算路径。
那么,我如何提供一个可以由用户设置的属性,但是具有基于另一个属性的默认属性,以及该属性可以被其他任务使用的位置?
答案 0 :(得分:1)
使它成为一种方法,这肯定有效
task overrideBoth(type: ConfigurationFileTask) {
_configFileName = 'app-configb.xml'
_dir = '../'
}
task overrideFileName(type: ConfigurationFileTask) {
_configFileName = 'app-confign.xml'
}
task overridePath(type: ConfigurationFileTask) {
_dir = '../../'
}
task defaultBehavior(type: ConfigurationFileTask) {
}
class ConfigurationFileTask extends DefaultTask {
def _configFileName = 'config.xml'
def _dir = project.buildDir
def getFile() {
return new File(_dir,_configFileName)
}
}
task otherTask(type: DefaultTask) {
println("defaultValues ${defaultBehavior.getFile().canonicalPath}")
println("overrideFileName ${overrideFileName.getFile().canonicalPath}")
println("overridePath ${overridePath.getFile().canonicalPath}")
println("overrideBoth ${overrideBoth.getFile().canonicalPath}")
}
configFileName获取覆盖