что эквивалентно Ant , в gradle?

#java #gradle #ant #build.gradle #gradle-task

#java #gradle #ant #build.gradle #gradle-задача

Вопрос:

Я переношу проект на основе ant в проект gradle. Я должен использовать набор файлов или шаблонов во многих задачах, что заставляет меня писать дублированный код, в то время как его можно просто сохранить в ресурсах и тегах набора шаблонов в ant. Есть ли какой-нибудь более простой способ, подобный эквиваленту ресурсов или набора шаблонов в gradle.

 <patternset id="pattern.files.to.instrument">
    <include name="lib/cat*.jar"/>
    <include name="lib/extensions/cat*.jar"/>
    <include name="lib/cas*.jar"/>
    <include name="bld/internal-lib/cat*.jar"/>
    <exclude name="**/*test.jar"/>
    <exclude name="**/*.war"/>
</patternset>

<fileset id="fileset.instrument" dir="${uninstrumented.jars.folder}">
    <patternset refid="pattern.files.to.instrument"/>
</fileset>
  

Ответ №1:

Я не знаком с Ant, но моя первая мысль о подобной концепции в Gradle — это a FileTree (или a ConfigurableFileTree ) . Вы можете настроить a FileTree один раз и (поскольку он реализует FileCollection ) ссылаться на него везде, где вы хотите использовать файлы, соответствующие указанным вами шаблонам:

 def filesToInstrument = fileTree(projectDir) {
    include 'lib/cat*.jar'
    include 'lib/extensions/cat*.jar'
    include 'lib/cas*.jar'
    include 'bld/internal-lib/cat*.jar'
    exclude '**/*test.jar'
    exclude '**/*.war'
}

task copyFilesToInstrument(type: Copy) {
    from filesToInstrument
    into 'my/destination/path'
}
  

Однако, насколько я знаю, FileTree элементы всегда привязаны к корневому каталогу, поэтому, если вы просто хотите повторно использовать шаблоны включения / исключения, вы можете взглянуть на CopySpec . Элементы типа CopySpec могут быть повторно использованы с использованием метода with в задачах, которые реализуют CopySpec себя (например Copy , Zip , Jar …):

 def filesToInstrumentPattern = copySpec {
    include 'lib/cat*.jar'
    include 'lib/extensions/cat*.jar'
    include 'lib/cas*.jar'
    include 'bld/internal-lib/cat*.jar'
    exclude '**/*test.jar'
    exclude '**/*.war'
}

task zipFilesToInstrument(type: Zip) {
    from fileTree('src')
    with filesToInstrumentPattern
}
  

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

1. CopySpec был бы полезен только для конкретных задач, верно. как мне использовать шаблоны в дереве файлов или наборе файлов для задач, отличных от копирования, zip и т. Д.?