2

我正在编写一个 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. 这意味着必须在设置名称后的某个时间计算路径。

那么,我如何提供一个可由用户设置但具有基于另一个属性的默认值的属性,以及该属性在哪里可以被其他任务使用?

4

1 回答 1

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 被覆盖

于 2012-06-05T20:03:45.507 回答