如何将Gradle文件默认输出目录修改为当前项目目录
原因说明
代码里直接用new File(dirname, filename)构造文件对象时传的是相对路径,Gradle自定义任务执行时默认的工作目录是Gradle守护进程的运行目录(也就是输出里看到的.gradle/daemon/版本号路径),不是当前项目的根目录,所以生成的文件会落到守护进程的目录下。
解决方法
显式用Gradle提供的projectDir属性作为基准路径拼接文件,这个属性固定指向当前项目的根目录,不会受执行环境影响。
修正后的代码如下:
tasks.register('hello') { doLast { String dirname = "demo"; String filename = "hello.txt"; // 以项目根目录为父路径拼接目标文件 File targetFile = new File(projectDir, "${dirname}/${filename}") // 自动创建不存在的父目录,避免写文件时报路径不存在错误 targetFile.parentFile.mkdirs() String abspath = targetFile.getAbsolutePath(); System.out.println(abspath); } }
补充说明
- 如果你要生成的文件属于构建产物,更推荐把基准路径换成构建目录:
layout.buildDirectory.get().asFile,这样生成的文件会统一落到项目根目录/build路径下,符合Gradle的目录规范,不会污染项目源码目录 - 不要依赖默认工作目录写相对路径,Gradle守护进程的工作目录会随Gradle版本、启动方式变化,稳定性很差
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

