【发布时间】:2016-05-14 02:21:33
【问题描述】:
这就是我想要做的:
- 将归档 (zip) 从 buildscript 依赖项复制到临时目录
- 将存档解压缩到
build中的另一个目录
这是复制档案的任务(作品)
task copyTpcds(type: Copy) {
file('build/zip').mkdirs()
from buildscript.configurations.classpath
include 'tpcds*'
into 'build/zip'
}
以及解压缩然后删除存档的任务
task extractTpcds(type: Copy) {
def names = new FileNameFinder().getFileNames('build/zip', 'tpcds*')
def outDir = file('build/cmd/tpcds')
outDir.mkdirs() // make sure the directory exists
from zipTree(file(names[0])) // generates error when
into outDir
// now remove copied zip file
//zipFile.delete() // deletes file before the extractions completes?
}
这里有几个场景:
- 如果我将两个任务都放入
build.gradle并尝试运行任何东西,即使只是gradle tasks,我也会收到此错误:Neither path nor baseDir may be null or empty string. path='null' basedir='C:\dev\code\td\pdo\tpcds-tpg'来自任务#2 中的此代码:file(names[0]) - 如果我在第二个任务中注释掉代码,第一个任务将运行并将 zip 文件复制到
build/zip - 现在我可以取消注释第二个任务中的代码(删除除外)并执行
gradle extractTpcds它将运行并提取存档
所以在我看来
- 无论执行哪些任务,都会跨所有任务评估文件操作
- 如果我有一个复制文件的代码以及一些尝试对正在复制的文件进行操作的后续代码,那么该代码将不会等待复制过程完成并且会因为文件不存在而失败
我不知道如何处理这个问题,非常感谢您的建议
【问题讨论】:
标签: file-io gradle groovy unzip