Gradle WriteProperties:doLast内配置property不生效问题咨询
Gradle WriteProperties任务配置失效解决方案
你遇到的问题是因为WriteProperties任务的属性配置逻辑需要在配置阶段完成,而doLast属于任务的执行阶段——此时任务已经完成了属性收集和写入的准备工作,所以在doLast里添加的foo属性不会被处理。
解决方案1:直接在配置块中定义属性
如果getValueFromFile()操作比较轻量,不会在配置阶段造成额外开销,直接把属性配置放在任务的主配置块里:
task foo(type: WriteProperties) { def value = getValueFromFile() property 'foo', value }
解决方案2:使用延迟求值(推荐)
如果getValueFromFile()是耗时操作(比如读取大文件、执行外部命令),不想在配置阶段执行,用Gradle的provider实现延迟求值,只有当任务真正需要值的时候才会调用方法:
task foo(type: WriteProperties) { property 'foo', provider { getValueFromFile() } }
解决方案3:改用doFirst闭包
doFirst会在任务执行阶段的最开始运行,此时任务还没开始处理属性写入,所以添加的属性能生效:
task foo(type: WriteProperties) { doFirst { def value = getValueFromFile() property 'foo', value } }
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

