这是我想做的事情:
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])
build/zip
gradle extractTpcds
它即可运行并提取存档所以在我看来
我不知道如何处理,非常感谢您的建议
以下内容适用于我,使用Gradle 2.12(并假定zip文件位于files
):
buildscript {
configurations {
classpath
}
dependencies {
classpath files("files/tpcds.zip")
}
}
def copyFiles = { ->
ant.mkdir(dir: "build/zip")
buildscript.configurations.classpath.each { def thisFile ->
if (thisFile.name ==~ /tpcds.*/) {
ant.copy(file: thisFile.absolutePath, todir: "build/zip")
}
}
}
tasks.whenTaskAdded { task ->
if (task.name == "extractTpcds") {
copyFiles()
}
}
task copyTpcds << {
copyFiles()
}
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?
}
原始文件的问题涉及与ICE规则相对的阻抗失配:初始化阶段,配置阶段和执行阶段。特别是,复制任务的规范处于配置阶段。通常,dependsOn
在执行阶段会强制执行任务相关性(例如)。extractTpcds
在配置阶段,该任务依赖于其他代码。
在我的示例中,有2种情况:
gradle copyTpcds
将copyFiles
在执行阶段调用该方法。的<<
意思是“做[在执行阶段]这个东西最后一个”。gradle tasks
将whenTaskAdded
在配置阶段触发中的代码,并调用copyFiles
。同样的gradle extractTpcds
替代方法是在两个任务中都使用AntBuilder,并Type: Copy
完全避免使用,如下所示:
buildscript {
configurations {
classpath
}
dependencies {
classpath files("files/tpcds.zip")
}
}
task copyTpcds << {
ant.mkdir(dir: "build/zip")
buildscript.configurations.classpath.each { def thisFile ->
if (thisFile.name ==~ /tpcds.*/) {
ant.copy(file: thisFile.absolutePath, todir: "build/zip")
}
}
}
task extractTpcds(dependsOn: 'copyTpcds') << {
def outDir = "build/cmd/tpcds"
ant.mkdir(dir: outDir)
def names = new FileNameFinder().getFileNames('build/zip', 'tpcds*')
names.eachWithIndex { zipFile, index ->
if (index == 0) {
ant.unzip(src: zipFile, dest: outDir)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句