Gradle WriteProperties任务未随构建生成文件,仅直接运行生效求助
Gradle writeProperties任务未执行问题排查与解决
我最近在非Android的Java项目里遇到了一个关于Gradle writeProperties任务的诡异问题,折腾了好一阵子才搞定,分享出来给有同样困扰的开发者参考:
问题现象
- 执行
./gradlew assembleDist或./gradlew foo:run构建项目时,能看到writeProperties任务中println("task ran")的输出,但指定路径下的foo.properties文件始终没有生成 - 直接执行
./gradlew foo:writeProperties时,文件却能正常创建,并且正确填充了变量 - 尝试用
doFirst{}和doLast{}包裹任务代码时,出现错误:Cause: path may not be null or empty string. path='null'
问题原因
后来才搞清楚关键:println是在Gradle的配置阶段就输出了,但writeProperties任务的实际执行逻辑根本没被触发——简单说就是任务只完成了配置步骤,却没被纳入当前的构建执行流程中。
解决方法
我通过将writeProperties任务绑定到compileJava任务的末尾执行,解决了这个问题,只需要在构建脚本中添加:
compileJava.finalizedBy(writeProperties)
这样在执行assembleDist或run这类包含compileJava的构建任务时,writeProperties就会被自动触发执行,foo.properties文件也能正常生成了。
内容的提问来源于stack exchange,提问作者Algebro
相关产品推荐
相关产品推荐

