我有一个文件夹copyAggregatedLibs。在这个文件夹中,我有2个libs> a-libs.zip,b-libs.zip。这些库具有结构>> a-libs.zip - jar和b-libs.zip - jar 现在我想在unzippedLiraries的另一个文件夹中解压缩这些文件,使结构完好无损。它应该看起来像:unzippedLibraries - a-libs - jar和b-libs - jar。 现在的问题是,我在名为libNames的数组中动态获取库的名称。 libNames = {a-lib.zip,b-lib.zip} 现在,我编写了一个任务来将文件从copyAggregatedLibs解压缩到unzippedLibraries
task unzipLibrary(type:Copy){
libNames.each { fullComponentName ->
println('fullname'+fullComponentName)
def zipFile = []
zipFile = file('build/tmp/libs/copyAggregatedLibraries/'+fullComponentName)
from zipTree(zipFile)
println('Zips'+zipFile)
into 'build/tmp/unpacked/unzippedLibraries/'+fullComponentName
}
}
现在,zip打印两个文件的名称,但我没有得到文件夹结构。我得到的只是第二个库的名称,即b-lib里面的jar文件夹。似乎不是每次都不会运行。谁能建议我如何让这个工作。
我也尝试过destinationDir。它不起作用 还尝试使用两个任务,在另一个内执行一个,也不起作用。说没有源文件
答案 0 :(得分:0)
为什么它不起作用:Copy task的from
方法可以多次调用,每次添加另一个源文件/目录进行复制。然而,into
方法就像目标目录的setter一样。
你应该能够实现这样的目标:
task unzipLibrary(type:Copy){
libNames.each { fullComponentName ->
println('fullname'+fullComponentName)
def zipFile = file('build/tmp/libs/copyAggregatedLibraries/'+fullComponentName)
println('Zips'+zipFile)
into project.buildDir
// the following into calls will be relative to the one above
from(zipTree(zipFile)) {
into 'tmp/unpacked/unzippedLibraries/'+fullComponentName // notice the missing leading 'build/'
}
}
}
此处from
calls使用提供的闭包来配置子CopySpec。这也是闭包内指定的目录相对于任务的目标目录的原因。