gradle ant 排除多个文件
gradle ant exclude multiple files
我有一个 gradle 任务,它使用 ant 通过 Cobertura 创建代码覆盖率报告。当排除一个文件时,这按预期工作:
fileset(dir: classes,
includes:"**/*.class",
excludes:"**/*Test.class")
但是当我想排除多个文件时,*Test.class
文件仍然被排除,但 *Jar.class
.
文件不被排除
fileset(dir: classes,
includes:"**/*.class",
excludes:["**/*Test.class", "**/*Jar.java"])
我现在正在用一个文件对此进行测试,但最终目标是排除整个包。排除多个文件的正确语法是什么?
整个gradle任务:
logger.info "Configuring Cobertura Plugin"
configurations{
coberturaRuntime {extendsFrom testRuntime}
}
dependencies {
coberturaRuntime 'net.sourceforge.cobertura:cobertura:2.1.1'
}
def serFile="${project.buildDir}/cobertura.ser"
def classes="${project.buildDir}/"
def classesCopy="${classes}-copy"
task cobertura(type: Test){
dependencies {
testRuntime 'net.sourceforge.cobertura:cobertura:2.1.1'
}
systemProperty "net.sourceforge.cobertura.datafile", serFile
}
cobertura.doFirst {
logger.quiet "Instrumenting classes for Cobertura"
ant {
delete(file:serFile, failonerror:false)
delete(dir: classesCopy, failonerror:false)
copy(todir: classesCopy) { fileset(dir: classes) }
taskdef(resource:'tasks.properties', classpath: configurations.coberturaRuntime.asPath)
'cobertura-instrument'(datafile: serFile) {
fileset(dir: classes,
includes:"**/*.class",
excludes:["**/*Test.class", "**/*Jar.class"])
}
}
}
cobertura.doLast{
if (new File(classesCopy).exists()) {
//create html cobertura report
// ant.'cobertura-report'(destdir:"${project.reportsDir}/cobertura",
// format:'html', srcdir:"src/main/java", datafile: serFile)
//create xml cobertura report
ant.'cobertura-report'(destdir:"${project.reportsDir}/cobertura",
format:'xml', srcdir:"src/main/java", datafile: serFile)
ant.delete(file: classes)
ant.move(file: classesCopy, tofile: classes)
}
}
原来答案很简单。不是将包含和排除作为文件集的参数,而是可以在文件集方法中使用多个包含和排除方法。因此,将我的问题中的文件集行替换为:
fileset(dir: classes) {
include(name: "**/*.class")
exclude(name: "**/*Test.class")
exclude(name: "**/*Jar.class")
}
我在关于将嵌套元素传递给 Ant 任务的 gradles 文档中找到了这个。
参见:https://docs.gradle.org/current/userguide/ant.html#example_passing_nested_elements_to_an_ant_task
我有一个 gradle 任务,它使用 ant 通过 Cobertura 创建代码覆盖率报告。当排除一个文件时,这按预期工作:
fileset(dir: classes,
includes:"**/*.class",
excludes:"**/*Test.class")
但是当我想排除多个文件时,*Test.class
文件仍然被排除,但 *Jar.class
.
fileset(dir: classes,
includes:"**/*.class",
excludes:["**/*Test.class", "**/*Jar.java"])
我现在正在用一个文件对此进行测试,但最终目标是排除整个包。排除多个文件的正确语法是什么?
整个gradle任务:
logger.info "Configuring Cobertura Plugin"
configurations{
coberturaRuntime {extendsFrom testRuntime}
}
dependencies {
coberturaRuntime 'net.sourceforge.cobertura:cobertura:2.1.1'
}
def serFile="${project.buildDir}/cobertura.ser"
def classes="${project.buildDir}/"
def classesCopy="${classes}-copy"
task cobertura(type: Test){
dependencies {
testRuntime 'net.sourceforge.cobertura:cobertura:2.1.1'
}
systemProperty "net.sourceforge.cobertura.datafile", serFile
}
cobertura.doFirst {
logger.quiet "Instrumenting classes for Cobertura"
ant {
delete(file:serFile, failonerror:false)
delete(dir: classesCopy, failonerror:false)
copy(todir: classesCopy) { fileset(dir: classes) }
taskdef(resource:'tasks.properties', classpath: configurations.coberturaRuntime.asPath)
'cobertura-instrument'(datafile: serFile) {
fileset(dir: classes,
includes:"**/*.class",
excludes:["**/*Test.class", "**/*Jar.class"])
}
}
}
cobertura.doLast{
if (new File(classesCopy).exists()) {
//create html cobertura report
// ant.'cobertura-report'(destdir:"${project.reportsDir}/cobertura",
// format:'html', srcdir:"src/main/java", datafile: serFile)
//create xml cobertura report
ant.'cobertura-report'(destdir:"${project.reportsDir}/cobertura",
format:'xml', srcdir:"src/main/java", datafile: serFile)
ant.delete(file: classes)
ant.move(file: classesCopy, tofile: classes)
}
}
原来答案很简单。不是将包含和排除作为文件集的参数,而是可以在文件集方法中使用多个包含和排除方法。因此,将我的问题中的文件集行替换为:
fileset(dir: classes) {
include(name: "**/*.class")
exclude(name: "**/*Test.class")
exclude(name: "**/*Jar.class")
}
我在关于将嵌套元素传递给 Ant 任务的 gradles 文档中找到了这个。
参见:https://docs.gradle.org/current/userguide/ant.html#example_passing_nested_elements_to_an_ant_task