Gradle - сценарий сборки
Gradle создает файл сценария для обработки двух вещей; одинprojects и еще один tasks. Каждая сборка Gradle представляет один или несколько проектов. Проект представляет собой библиотечный JAR-файл или веб-приложение, или он может представлять собой ZIP-архив, собранный из JAR-файлов, созданных другими проектами. Проще говоря, проект состоит из разных задач. Задача - это работа, которую выполняет сборка. Задачей может быть компиляция некоторых классов, создание JAR, создание документации Javadoc или публикация некоторых архивов в репозитории.
Gradle использует Groovy language для написания скриптов.
Написание сценария сборки
Gradle предоставляет доменно-ориентированный язык (DSL) для описания сборок. Здесь используется язык Groovy, чтобы упростить описание сборки. Каждый сценарий сборки Gradle кодируется с использованием UTF-8, сохраняется в автономном режиме и называется build.gradle.
build.gradle
Мы описываем задачи и проекты с помощью сценария Groovy. Вы можете запустить сборку Gradle с помощью команды Gradle. Эта команда ищет файл с именемbuild.gradle. Взгляните на следующий пример, который представляет собой небольшой сценарий, который печатаетtutorialspoint. Скопируйте и сохраните следующий скрипт в файл с именемbuild.gradle. Этот сценарий сборки определяет приветственное имя задачи, которое используется для печати строки учебной точки.
task hello {
doLast {
println 'tutorialspoint'
}
}
Выполните следующую команду в командной строке. Он выполняет указанный выше сценарий. Вы должны выполнить это там, где хранится файл build.gradle.
C:\> gradle –q hello
Вывод:
tutorialspoint
Если вы думаете, что задача работает аналогично цели ANT, тогда это верно - задача Gradle эквивалентна цели ANT.
Вы можете упростить эту задачу приветствия, указав ярлык (представляет собой символ <<) к doLastзаявление. Если вы добавите этот ярлык к указанной выше задачеhello это будет выглядеть как следующий сценарий.
task hello << {
println 'tutorialspoint'
}
Как и выше, вы можете выполнить приведенный выше скрипт, используя gradle –q hello команда.
Сценарий оценки в основном использует два реальных объекта, один из которых является объектом проекта, а другой - объектом сценария.
Project Object- Каждый сценарий описывает один или несколько проектов. Во время выполнения этот скрипт настраивает объект проекта. Вы можете вызывать некоторые методы и использовать свойства в своем сценарии сборки, которые делегированы объекту проекта.
Script Object- Gradle взял код сценария в классы, которые реализуют интерфейс сценария и затем выполняет. Это означает, что все свойства и методы, объявленные интерфейсом скрипта, доступны в вашем скрипте.
Следующая таблица определяет список standard project properties. Все эти свойства доступны в вашем скрипте сборки.
Sr. No. | название | Тип | Значение по умолчанию |
---|---|---|---|
1 | проект | Проект | Экземпляр проекта |
2 | имя | Строка | Имя каталога проекта. |
3 | путь | Строка | Абсолютный путь проекта. |
4 | описание | Строка | Описание проекта. |
5 | projectDir | файл | Каталог, содержащий сценарий сборки. |
6 | buildDir | файл | projectDir / build |
7 | группа | Объект | Неопределенные |
8 | версия | Объект | Неопределенные |
9 | муравей | AntBuilder | Экземпляр AntBuilder |
Основы Groovy
Скрипты сборки Gradle используют полный API Groovy. Как стартап, обратите внимание на следующие примеры.
В следующем примере объясняется преобразование строки в верхний регистр.
Скопируйте и сохраните приведенный ниже код в build.gradle файл.
task upper << {
String expString = 'TUTORIALS point'
println "Original: " + expString
println "Upper case: " + expString.toUpperCase()
}
Выполните следующую команду в командной строке. Он выполняет указанный выше сценарий. Вы должны выполнить это там, где хранится файл build.gradle.
C:\> gradle –q upper
Вывод:
Original: TUTORIALS point
Upper case: TUTORIALS POINT
В следующем примере объясняется, как 4 раза печатать значение неявного параметра ($ it).
Скопируйте и сохраните следующий код в build.gradle файл.
task count << {
4.times {
print "$it "
}
}
Выполните следующую команду в командной строке. Он выполняет указанный выше сценарий. Вы должны выполнить это там, где хранится файл build.gradle.
$ gradle –q count
Вывод:
0 1 2 3
Язык Groovy предоставляет множество функций, некоторые из которых обсуждаются ниже.
Groovy JDK методы
Groovy добавляет множество полезных методов к стандартным классам Java. Например, Iterable API от JDK реализуетeach() метод, который выполняет итерацию по элементам Iterable Interface.
Скопируйте и сохраните следующий код в build.gradle файл.
task groovyJDK << {
String myName = "Marc";
myName.each() {
println "${it}"
};
}
Выполните следующую команду в командной строке. Он выполняет указанный выше сценарий. Вы должны выполнить это там, где хранится файл build.gradle.
C:\> gradle –q groovyJDK
Вывод:
M
a
r
c
Аксессоры собственности
Вы можете автоматически получить доступ к соответствующим методам получения и установки определенного свойства, указав его ссылку.
В следующем фрагменте определяется синтаксис методов получения и установки свойства. buildDir.
// Using a getter method
println project.buildDir
println getProject().getBuildDir()
// Using a setter method
project.buildDir = 'target'
getProject().setBuildDir('target')
Необязательные круглые скобки при вызове методов
Groovy содержит специальную функцию при вызове методов, заключающуюся в том, что скобки не являются обязательными для вызова методов. Эта функция также применима к сценариям Gradle.
Взгляните на следующий синтаксис. Это определяет вызов методаsystemProperty из test объект.
test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')
Замыкание как последний параметр метода
Gradle DSL использует замыкания во многих местах. Если последний параметр метода - это закрытие, вы можете поместить закрытие после вызова метода.
Следующий фрагмент определяет синтаксис, который Closures использует в качестве параметров метода repositories ().
repositories {
println "in a closure"
}
repositories() {
println "in a closure"
}
repositories({ println "in a closure" })
Импорт по умолчанию
Gradle автоматически добавляет набор операторов импорта в скрипты Gradle. В следующем списке показаны пакеты импорта по умолчанию для скрипта Gradle.
import org.gradle.*
import org.gradle.api.*
import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.cache.*
import org.gradle.api.artifacts.component.*
import org.gradle.api.artifacts.dsl.*
import org.gradle.api.artifacts.ivy.*
import org.gradle.api.artifacts.maven.*
import org.gradle.api.artifacts.query.*
import org.gradle.api.artifacts.repositories.*
import org.gradle.api.artifacts.result.*
import org.gradle.api.component.*
import org.gradle.api.credentials.*
import org.gradle.api.distribution.*
import org.gradle.api.distribution.plugins.*
import org.gradle.api.dsl.*
import org.gradle.api.execution.*
import org.gradle.api.file.*
import org.gradle.api.initialization.*
import org.gradle.api.initialization.dsl.*
import org.gradle.api.invocation.*
import org.gradle.api.java.archives.*
import org.gradle.api.logging.*
import org.gradle.api.plugins.*
import org.gradle.api.plugins.announce.*
import org.gradle.api.plugins.antlr.*
import org.gradle.api.plugins.buildcomparison.gradle.*
import org.gradle.api.plugins.jetty.*
import org.gradle.api.plugins.osgi.*
import org.gradle.api.plugins.quality.*
import org.gradle.api.plugins.scala.*
import org.gradle.api.plugins.sonar.*
import org.gradle.api.plugins.sonar.model.*
import org.gradle.api.publish.*
import org.gradle.api.publish.ivy.*
import org.gradle.api.publish.ivy.plugins.*
import org.gradle.api.publish.ivy.tasks.*
import org.gradle.api.publish.maven.*
import org.gradle.api.publish.maven.plugins.*
import org.gradle.api.publish.maven.tasks.*
import org.gradle.api.publish.plugins.*
import org.gradle.api.reporting.*
import org.gradle.api.reporting.components.*
import org.gradle.api.reporting.dependencies.*
import org.gradle.api.reporting.model.*
import org.gradle.api.reporting.plugins.*
import org.gradle.api.resources.*
import org.gradle.api.specs.*
import org.gradle.api.tasks.*
import org.gradle.api.tasks.ant.*
import org.gradle.api.tasks.application.*
import org.gradle.api.tasks.bundling.*
import org.gradle.api.tasks.compile.*
import org.gradle.api.tasks.diagnostics.*
import org.gradle.api.tasks.incremental.*
import org.gradle.api.tasks.javadoc.*
import org.gradle.api.tasks.scala.*
import org.gradle.api.tasks.testing.*
import org.gradle.api.tasks.testing.junit.*
import org.gradle.api.tasks.testing.testng.*
import org.gradle.api.tasks.util.*
import org.gradle.api.tasks.wrapper.*
import org.gradle.authentication.*
import org.gradle.authentication.http.*
import org.gradle.buildinit.plugins.*
import org.gradle.buildinit.tasks.*
import org.gradle.external.javadoc.*
import org.gradle.ide.cdt.*
import org.gradle.ide.cdt.tasks.*
import org.gradle.ide.visualstudio.*
import org.gradle.ide.visualstudio.plugins.*
import org.gradle.ide.visualstudio.tasks.*
import org.gradle.ivy.*
import org.gradle.jvm.*
import org.gradle.jvm.application.scripts.*
import org.gradle.jvm.application.tasks.*
import org.gradle.jvm.platform.*
import org.gradle.jvm.plugins.*
import org.gradle.jvm.tasks.*
import org.gradle.jvm.tasks.api.*
import org.gradle.jvm.test.*
import org.gradle.jvm.toolchain.*
import org.gradle.language.assembler.*
import org.gradle.language.assembler.plugins.*
import org.gradle.language.assembler.tasks.*
import org.gradle.language.base.*
import org.gradle.language.base.artifact.*
import org.gradle.language.base.plugins.*
import org.gradle.language.base.sources.*
import org.gradle.language.c.*
import org.gradle.language.c.plugins.*
import org.gradle.language.c.tasks.*
import org.gradle.language.coffeescript.*
import org.gradle.language.cpp.*
import org.gradle.language.cpp.plugins.*
import org.gradle.language.cpp.tasks.*
import org.gradle.language.java.*
import org.gradle.language.java.artifact.*
import org.gradle.language.java.plugins.*
import org.gradle.language.java.tasks.*
import org.gradle.language.javascript.*
import org.gradle.language.jvm.*
import org.gradle.language.jvm.plugins.*
import org.gradle.language.jvm.tasks.*
import org.gradle.language.nativeplatform.*
import org.gradle.language.nativeplatform.tasks.*
import org.gradle.language.objectivec.*
import org.gradle.language.objectivec.plugins.*
import org.gradle.language.objectivec.tasks.*
import org.gradle.language.objectivecpp.*
import org.gradle.language.objectivecpp.plugins.*
import org.gradle.language.objectivecpp.tasks.*
import org.gradle.language.rc.*
import org.gradle.language.rc.plugins.*
import org.gradle.language.rc.tasks.*
import org.gradle.language.routes.*
import org.gradle.language.scala.*
import org.gradle.language.scala.plugins.*
import org.gradle.language.scala.tasks.*
import org.gradle.language.scala.toolchain.*
import org.gradle.language.twirl.*
import org.gradle.maven.*
import org.gradle.model.*
import org.gradle.nativeplatform.*
import org.gradle.nativeplatform.platform.*
import org.gradle.nativeplatform.plugins.*
import org.gradle.nativeplatform.tasks.*
import org.gradle.nativeplatform.test.*
import org.gradle.nativeplatform.test.cunit.*
import org.gradle.nativeplatform.test.cunit.plugins.*
import org.gradle.nativeplatform.test.cunit.tasks.*
import org.gradle.nativeplatform.test.googletest.*
import org.gradle.nativeplatform.test.googletest.plugins.*
import org.gradle.nativeplatform.test.plugins.*
import org.gradle.nativeplatform.test.tasks.*
import org.gradle.nativeplatform.toolchain.*
import org.gradle.nativeplatform.toolchain.plugins.*
import org.gradle.platform.base.*
import org.gradle.platform.base.binary
import org.gradle.platform.base.component.*
import org.gradle.platform.base.plugins.*
import org.gradle.platform.base.test.*
import org.gradle.play.*
import org.gradle.play.distribution.*
import org.gradle.play.platform.*
import org.gradle.play.plugins.*
import org.gradle.play.tasks.*
import org.gradle.play.toolchain.*
import org.gradle.plugin.use.*
import org.gradle.plugins.ear.*
import org.gradle.plugins.ear.descriptor.*
import org.gradle.plugins.ide.api.*
import org.gradle.plugins.ide.eclipse.*
import org.gradle.plugins.ide.idea.*
import org.gradle.plugins.javascript.base.*
import org.gradle.plugins.javascript.coffeescript.*
import org.gradle.plugins.javascript.envjs.*
import org.gradle.plugins.javascript.envjs.browser.*
import org.gradle.plugins.javascript.envjs.http.*
import org.gradle.plugins.javascript.envjs.http.simple.*
import org.gradle.plugins.javascript.jshint.*
import org.gradle.plugins.javascript.rhino.*
import org.gradle.plugins.javascript.rhino.worker.*
import org.gradle.plugins.signing.*
import org.gradle.plugins.signing.signatory.*
import org.gradle.plugins.signing.signatory.pgp.*
import org.gradle.plugins.signing.type.*
import org.gradle.plugins.signing.type.pgp.*
import org.gradle.process.*
import org.gradle.sonar.runner.*
import org.gradle.sonar.runner.plugins.*
import org.gradle.sonar.runner.tasks.*
import org.gradle.testing.jacoco.plugins.*
import org.gradle.testing.jacoco.tasks.*
import org.gradle.testkit.runner.*
import org.gradle.util.*