Gradle 使用渐变类型的任务如何排除不同类型的文件?

Gradle 使用渐变类型的任务如何排除不同类型的文件?,gradle,Gradle,使用Gradle类型的任务,我们如何排除以字符串开头和结尾的文件名的文件副本 def contentSpec = copySpec { exclude { it.file.name.startsWith('img') it.file.name.endsWith('gif') } from 'src' } task copyImages (type: Copy) { with contentSpec into 'Dest' } 在运行gradlecopyim

使用Gradle类型的任务,我们如何排除以字符串开头和结尾的文件名的文件副本

def contentSpec = copySpec {
  exclude {
    it.file.name.startsWith('img')
    it.file.name.endsWith('gif')
  }
  from 'src'
}

task copyImages (type: Copy) {
  with contentSpec
  into 'Dest'
}
在运行
gradlecopyimages
时,它会排除以gif结尾的文件,但不排除以img开头的文件

有什么方法可以同时实现这两个目标吗?

您忘记了两个条件之间的or(
|
):

exclude { it.file.name.startsWith('img') || it.file.name.endsWith('gif') }
闭包的值是其最后一个表达式的值。由于代码中的最后一个表达式是
it.file.name.endsWith('gif')
,这是闭包的值,因此当
it.file.name.endsWith('gif')
为true时,文件将被排除

当然,您也可以使用两种排除:

exclude {
  it.file.name.startsWith('img')
}
exclude {
  it.file.name.endsWith('gif')
}
您忘记了两个条件之间的or(
|
):

exclude { it.file.name.startsWith('img') || it.file.name.endsWith('gif') }
闭包的值是其最后一个表达式的值。由于代码中的最后一个表达式是
it.file.name.endsWith('gif')
,这是闭包的值,因此当
it.file.name.endsWith('gif')
为true时,文件将被排除

当然,您也可以使用两种排除:

exclude {
  it.file.name.startsWith('img')
}
exclude {
  it.file.name.endsWith('gif')
}