Статьи

Дифференциация задач Gradle на основе муравьев

В своем сообщении в блоге Evolving Gradle Build из Ant Build: импорт файла Ant Ant я продемонстрировал использование встроенной поддержки Ant в AntBuilder для импорта целей Ant в сборке Gradle. Затем к этим целям Ant можно обращаться как к задачам Gradle, и они выглядят так же, как задачи, представленные непосредственно в сборке Gradle. В этой статье я расскажу об использовании Groovy для разграничения задач Gradle на основе импортированных целей Ant и задач, определенных Gradle.

Файл сборки Ant, импортированный сборками Gradle в моих примерах из этого поста, был представлен в моем предыдущем посте . Этот файл сборки Ant содержал цели «-init», «clean», «compile», «jar», «javadoc», «all» и «output». Файл сценария сборки Gradle, который следует за импортом этого build.xml и его целевых объектов Ant.

build-ant-target-and-gradle-tasks.gradle (Версия 1)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
// build-ant-targets-and-gradle-tasks.gradle
//
// Gradle build script demonstrating Gradle Tasks associated with this project
// that are not provided by an imported Ant build file.
 
// ant is a DefaultAntBuilder instance
ant.importBuild 'build.xml'
 
def antTargetsNames = ant.references.get("ant.targets").collect{ it.name }
println "\nAnt Targets: ${antTargetsNames}\n"
 
def taskNames = rootProject.tasks.collect{ it.name }
println "\nGradle Task Names: ${taskNames}\n"
 
def tasksThatAreNotAntTargets = taskNames - antTargetsNames
println "\nGradle Tasks that are NOT Ant Targets: ${tasksThatAreNotAntTargets}\n"

Неявно доступная переменная «ant» (по умолчанию AntBuilder ) сначала используется для получения всех предоставленных Ant целей посредством вызова ant.references.get("ant.targets") . Удобный метод Groovy Collection.collect (Closure) вызывается для этой коллекции, чтобы вернуть коллекцию «имен» целей Ant.

Неявно доступный «rootProject» также может быть использован для получения задач на уровне корневого проекта с использованием rootProject.tasks . Тот же метод Groovy Collection.collect(Closure) используется в этой коллекции для получения имен задач Gradle. Наконец, оператор вычитания Groovy позволяет легко определить, какие задачи Gradle не являются целями Ant. При запуске, как показано выше, все задачи Gradle являются целевыми объектами Ant, поэтому оператор вычитания ничего не возвращает. Это показано на следующем снимке экрана.

АНТ-мишени-Gradle-задача, все-же

Чтобы сделать пример более интересным, я добавляю пару представленных Gradle Задач в файл сборки Gradle, показанный выше. Новая версия с двумя новыми задачами, представленными Gradle, показана далее.

build-ant-target-and-gradle-tasks.gradle (Версия 2)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// build-ant-targets-and-gradle-tasks.gradle
//
// Gradle build script demonstrating Gradle Tasks associated with this project
// that are not provided by an imported Ant build file.
 
// ant is a DefaultAntBuilder instance
ant.importBuild 'build.xml'
 
task(helloWorld) << {
   println "Hello, World!"
}
 
task(currentDateTime) << {
   println new Date()
}
 
def antTargetsNames = ant.references.get("ant.targets").collect{ it.name }
println "\nAnt Targets: ${antTargetsNames}\n"
 
def taskNames = rootProject.tasks.collect{ it.name }
println "\nGradle Task Names: ${taskNames}\n"
 
def tasksThatAreNotAntTargets = taskNames - antTargetsNames
println "\nGradle Tasks that are NOT Ant Targets: ${tasksThatAreNotAntTargets}\n"

Эта пересмотренная версия скрипта сборки Gradle содержит две собственные задачи («helloWorld» и «currentDateTime»). Результат выполнения этого сценария включает эти две новые задачи Gradle в качестве задач Gradle, которые не являются Ant-введенными, целевыми задачами Gradle. Этот вывод показан далее.

муравей-мишеней-Gradle-задача Вары

Примеры в этом посте предоставляют дополнительные примеры преимуществ использования кода Groovy для лучшего понимания сборок Gradle. Получить доступ к экземпляру Ant Builder по умолчанию («ant») и «rootProject» просто, чтобы получить имена всех задач Gradle на основе Ant, а также всех задач (на основе Ant или представленных Gradle).