Gradle Ant исключить несколько файлов - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть сложная задача, которая использует 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 Ответ

0 голосов
/ 13 ноября 2018

Ответ оказался довольно простым. Вместо предоставления включений и исключений в качестве параметров для набора файлов можно использовать несколько методов включения и исключения внутри метода набора файлов. Поэтому замените строку набора файлов из моего вопроса следующим:

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

Я нашел это в документации по gradles о передаче вложенных элементов в задачу Ant.
Смотри: https://docs.gradle.org/current/userguide/ant.html#example_passing_nested_elements_to_an_ant_task

...