Tar Gradle 任务期间未包含某些文件

Some files are not included during a Tar Gradle task

我刚刚从 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。有什么解释吗?

感谢 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

There are a set of definitions that are excluded by default from all directory-based tasks. As of Ant 1.8.1 they are:

 **/*~
 **/#*#
 **/.#*
 **/%*%
 **/._*
 **/CVS
 **/CVS/**
 **/.cvsignore
 **/SCCS
 **/SCCS/**
 **/vssver.scc
 **/.svn
 **/.svn/**
 **/.DS_Store

Ant 1.8.2 adds the following default excludes:

 **/.git
 **/.git/**
 **/.gitattributes
 **/.gitignore
 **/.gitmodules
 **/.hg
 **/.hg/**
 **/.hgignore
 **/.hgsub
 **/.hgsubstate
 **/.hgtags
 **/.bzr
 **/.bzr/**
 **/.bzrignore