#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 и т. Д.?