Groovy 如何使用Gradle在没有第一个目录的情况下提取?
我正在尝试在没有父目录的情况下提取从属zip文件,在使用Gradle提取时排除一些文件。 这就是我所得到的,这是有效的,但感觉不对劲,我希望有更好的方法来做到这一点 我正在提取的Zip文件Groovy 如何使用Gradle在没有第一个目录的情况下提取?,groovy,build,gradle,unzip,Groovy,Build,Gradle,Unzip,我正在尝试在没有父目录的情况下提取从属zip文件,在使用Gradle提取时排除一些文件。 这就是我所得到的,这是有效的,但感觉不对劲,我希望有更好的方法来做到这一点 我正在提取的Zip文件 jar tf parent-folder-name.zip parent-folder-name/bin/something.sh parent-folder-name/bin/something.bat parent-folder-name/lib/somelib.jar 选项1 task explo
jar tf parent-folder-name.zip
parent-folder-name/bin/something.sh
parent-folder-name/bin/something.bat
parent-folder-name/lib/somelib.jar
选项1
task explodeToDist1(type: Copy) {
from zipTree(configurations.extractDist.singleFile)
exclude "**/lib/**"
eachFile {
def newPath = it.relativePath.segments[1..-1].join("/")
it.relativePath = RelativePath.parse(true, newPath)
}
into 'build/dist'
doLast {
def path = buildDir.getPath() + "/dist/parent-folder-name"
def dirToDelete = new File(path)
dirToDelete.deleteOnExit()
}
}
选项2
task explodeToDist2 << {
def unzipDir = new File('build/unzipTmp')
copy {
from zipTree(configurations.extractDist.singleFile)
into unzipDir
}
def rootZipDir = unzipDir.listFiles()[0]
fileTree(rootZipDir){
exclude "**/lib/**"
}.copy {
into 'src/dist'
}
unzipDir.deleteDir()
}
task explodeToDist2似乎您的用例在gradle中还没有以非常用户友好的方式得到支持。列出了一个相关的功能请求
这里还有一些建议,看起来比你已有的选项更简单
因为gradle与ant集成得很好,ant解压任务确实支持扁平化,所以您也可以依赖它
有关更多详细信息,请参阅:
只是一个交叉链接,在Gradle论坛上提出了相同的问题-