【问题标题】:gradle ant exclude multiple filesgradle ant 排除多个文件
【发布时间】:2018-11-12 09:48:16
【问题描述】:

我有一个 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)
  }
}

【问题讨论】:

    标签: gradle ant cobertura


    【解决方案1】:

    答案很简单。除了将包含和排除作为参数提供给文件集,还可以在文件集方法中使用多个包含和排除方法。所以用这个替换我的问题中的文件集行:

    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

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2016-06-23
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多