代码之家  ›  专栏  ›  技术社区  ›  Maiko Kingma

渐变蚂蚁排除多个文件

  •  0
  • Maiko Kingma  · 技术社区  · 7 年前

    我有一个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)
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Maiko Kingma    7 年前

    答案很简单。可以在文件集方法中使用多个include和exclude方法,而不是将include和exclude作为参数提供给文件集。因此,将我问题中的文件集行替换为:

    fileset(dir: classes) {
        include(name: "**/*.class")
        exclude(name: "**/*Test.class")
        exclude(name: "**/*Jar.class")
    }
    


    见: https://docs.gradle.org/current/userguide/ant.html#example_passing_nested_elements_to_an_ant_task

    推荐文章