如何在Gradle中使用ant压缩(解开xz-tar文件)



我想取消标记.tar.xz格式的文件。Gradle的tarTree()不支持这种格式,所以我需要将.xz解压缩为.tar,然后才能使用它。

根据文档,我应该能够做这样的事情:

ant.untar(src: myTarFile, compression: "xz", dest: extractDir)

然而,我得到了一个错误:

Caused by: : xz is not a legal value for this attribute
at org.apache.tools.ant.types.EnumeratedAttribute.setValue(EnumeratedAttribute.java:94)

这个SO回答谈到了在Maven中使用Apache Ant Compress antlib。如何使用Gradle获得类似的结果?

在链接中转换Maven SO答案类似于:

configurations {
antCompress
} 
dependencies {
antCompress 'org.apache.ant:ant-compress:1.4'
}
task untar {
ext {
xzFile = file('path/to/file.xz')
outDir = "$buildDir/untar"
} 
inputs.file xzFile
outputs.dir outDir
doLast {
ant.taskdef(
resource:"org/apache/ant/compress/antlib.xml" 
classpath: configurations.antCompress.asPath
) 
ant.unxz(src:xzFile.absolutePath, dest:"$buildDir/unxz.tar" )
copy {
from tarTree("$buildDir/unxz.tar") 
into outDir
}   
} 
} 

请参阅https://docs.gradle.org/current/userguide/ant.html

这是我的解决方案,涉及命令行实用程序。

task untar() {
inputs.property('archiveFile', 'path/to/file.xz')
inputs.property('dest', 'path/to/file.xz')
outputs.dir("${buildDir}/destination")
doLast {
mkdir("${buildDir}/destination")
exec {
commandLine('tar', 'xJf', inputs.properties.archiveFile, '-C', "${buildDir}/destination")
}
}
}

相关内容

  • 没有找到相关文章

最新更新