我刚从Gradle Tar
任务中观察到一种非常奇怪的行为。
我们举一个简单的例子,2个文件:
/tmp/test$ ls
test1.txt ##test2##
这是一个简单的Tar
任务:
task('testHash', type: Tar) {
from "/tmp/test"
extension = 'tar.gz'
compression = Compression.GZIP
}
在运行##test2##
:
gradle testHash
由于某种原因被跳过
/path/to/gradle/project/foo$ tar tvf build/distributions/foo-1.0.tar.gz
test1.txt
当文件名在开头和结尾都包含#
字符时,似乎会发生这种情况。
常规tar
运作良好:
/tmp/test$ tar czvf test.tar.gz *
test1.txt
##test2##
/tmp/test$ tar tf test.tar.gz
test1.txt
##test2##
我正在使用Gradle 4.1。有什么解释吗?
答案 0 :(得分:2)
感谢Opal的评论,我调整了我的搜索并找到了解决方法。可能有一种更清洁的方式,但这个适用于我
task('testHash', type: Tar) {
doFirst {
org.apache.tools.ant.DirectoryScanner.defaultExcludes.each {
DirectoryScanner.removeDefaultExclude it
}
}
from "/tmp/test"
extension = 'tar.gz'
compression = Compression.GZIP
}
仅供参考,这里是default excludes
默认情况下,有一组定义被排除在外 基于目录的任务。从Ant 1.8.1开始,它们是:
**/*~ **/#*# **/.#* **/%*% **/._* **/CVS **/CVS/** **/.cvsignore **/SCCS **/SCCS/** **/vssver.scc **/.svn **/.svn/** **/.DS_Store
Ant 1.8.2添加了以下默认排除:
**/.git **/.git/** **/.gitattributes **/.gitignore **/.gitmodules **/.hg **/.hg/** **/.hgignore **/.hgsub **/.hgsubstate **/.hgtags **/.bzr **/.bzr/** **/.bzrignore