Как создать коллекцию файловых коллекций в gradle?

#java #gradle #groovy #build.gradle

#java #gradle #groovy #build.gradle

Вопрос:

Я работаю над переносом проекта ant в проект gradle. У меня есть набор файловых коллекций, которые будут использоваться в качестве входных данных для нескольких задач. Это возможно в ant с помощью .

 <zipfileset id="zipfileset1" src="C:/reporter/servlet/reporter.war">
    <include name="WEB-INF/classes/**/*.class"/>
    <exclude name="WEB-INF/classes/**/*_jsp*.class"/>
</zipfileset>
<fileset id="fileset1" dir="C:/lib">
    <include name="test*.jar"/>
</fileset>
<union id="resources.reports.lib">
    <fileset refid="fileset1"/>
    <fileset id="fileset2" dir="C:/adaptors/lib">
        <include name="com*.jar"/>
    </fileset>
    <zipfileset refid="zipfileset1"/>
</union>
  

Есть ли в gradle какой-либо метод, эквивалентный «объединению» в ant.

Ответ №1:

Здесь есть рабочий пример

Обратите внимание, что Gradle имеет тесную интеграцию с Ant (см. Здесь ), поэтому одним из вариантов является прямая миграция из кода Ant. Например:

 // NOTE: this uses local dirs instead of Windows paths (e.g. C:lib)

ant.zipfileset(id:"zipfileset1", src:"c_reporter/servlet/reporter.war") {
    include(name:"WEB-INF/classes/**/*.class")
    exclude(name:"WEB-INF/classes/**/*_jsp*.class")
}   
ant.fileset(id:"fileset1", dir:"c_lib") {
    include(name:"test*.jar")
}   
ant.union(id:"resources.reports.lib") {
    fileset(refid:"fileset1")
    fileset(id:"fileset2", dir:"c_adaptors/lib") {
        include(name:"com*.jar")
    }   
    zipfileset(refid:"zipfileset1")
}   
  

Согласно комментарию, альтернативный — и более похожий на Gradle-подход — это: (также показано в ссылке выше)

 project.ext.zipFiles1 = 
zipTree("${projectDir}/c_reporter/servlet/reporter.war").matching {
    include 'WEB-INF/classes/**/*.class'
    exclude 'WEB-INF/classes/**/*_jsp.class'
}

project.ext.files1 = 
fileTree("${projectDir}/c_lib").matching {
    include 'test*.jar'
}

project.ext.files2 = 
fileTree("${projectDir}/c_adaptors/lib").matching {
    include 'com*.jar'
}

project.ext.allFiles = 
project.ext.zipFiles1.plus(project.ext.files1)
                     .plus(project.ext.files2)
  

Комментарии:

1. можно ли использовать files.plus() или FileTree вместо ant?

2. Я добавил еще один вариант, основанный на вашем комментарии / вопросе. Новый стиль содержится в b2.gradle ссылке на GitHub. Он не копирует файлы, а скорее перечисляет пути. Я не уверен, какова конечная цель, но, надеюсь, это поможет.