gpt4 book ai didi

gradle - 为Gradle任务属性提供派生默认值的正确方法

转载 作者:行者123 更新时间:2023-12-03 03:24:38 25 4
gpt4 key购买 nike

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

因此,如何提供用户可以设置的属性,但该属性具有基于其他属性的默认属性,以及该属性可用于其他任务的位置?

最佳答案

然后使其成为一种方法,这绝对有效

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}")


}
配置文件名被覆盖

关于gradle - 为Gradle任务属性提供派生默认值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com