Gradle
Выполняет задачи по сборке в графе задач. Граф выстраивается применительно к lifecycle task. Можно создавать свои задачи, но существуют и стандартные:
- clean
- compile. Выполняет помиляцию для всех языков, также применяется фильтрация
processResources - test. Unit тесты, а также все, что определено в
test source set - package
- verify. Всевозможные проверки, например,
Checkstyle.Integrationтесты выполняются тут же. - install. Выполняется публикация
publishToMavenLocal - deploy. Публикация в публичном Maven. По умолчанию публикация исходников и JavaDoc не выполняется
gradle init
Создает скелет проекта посредством похожего диалога:
1 | Select type of project to generate: |
Выполняется следующий
Gradle properties
Параметры для Gradle загружаются из следующих локаций и переписывают друг друга в указанной последовательности:
- build script
- gradle.properties
- gradle.properties из $HOME/.gradle (точное расположение зависит от ОС)
Profiles
В Gradle нет такого понятия как профиль сборки (как, например, в Maven), но благодаря возможности управления сборкой кодом, это доступно. Так, достаточно определить несколько Gradle скриптов, которые будут определять действия согласно требованиям “профиля” (profile-default.gradle, profile-test.gradle, profile-highload.gradle, profile-production.gradle). Затем, достаточно подключать указанные Gradle посредством проверки условий. Наприме так:
1 | if(!hasProperty("buildProfile")) ext.activeProfile = "default" |
1 | ext.welcomeMessage = "Default welcome" |
1 | ext.welcomeMessage = "Test welcome" |
1 | ext.welcomeMessage = "Highload welcome" |
1 | ext.welcomeMessage = "Production welcome" |
Вызов gradle greeting выдаст Default welcome, но если будет указан параметр псевдо-профиля gradle -PbuildProfile=highload greeting, то будет выдано Highload welcome.
Можно использовать не только параметры, но и системные переменные, внешние переменные (загруженные из внешнего ресурса, например, etcd).
Однако, Gradle комьюнити не рекомендует использовать подобный подход (через профили), т.к. это усложняет понимание сборочного процесса. В частности, рекомендуемым подходом является Build Types, Product Flavors и Build Variants концепции.
Gradle Repository
Gradle требует указания хотя бы 1 репозитория. Указания mavenLocal всегда безопасно.
Integration test
Явного блока с интеграционными тестами не предусмотрено, можно создать его самостоятельно - достаточно добавить исходные коды в качестве source set для тестов (рекомендовано хранить их отдельно), отключение всех сторонних компонентов можно выполнить в блоке finalizedBy.
Интеграционные тесты не всегда являются необходимыми для успешных проверок, так что обязательность для гарантий их успешного выполнения можно отключить: test.ignoreFailures.
Build blocks
Process resources
С помощью данного блока можно управлять ресурсами, участвующими в сборке (по ум., находятся в src/main/resources). Так, можно фильтровать их (с помощью exclude)
1 | processResources { |
Dependencies
Gradle требует указания группы, артефакта и версии.
implementation platform и implementation enforcedPlatform
В Gradle можно использовать версии, которые определены в качестве рекомендуемых для той или иной библиотеки и определены в ее POM. Так, например, можно указать:
1 | implementation platform("org.springframework.boot:spring-boot-dependencies:3.2.0") |
Это позволит загрузить все связанные c Spring Boot библиотеки именно тех версий, которые определены в POM и не указывать их принудительно:
1 | implementation "org.springframework.boot:spring-boot-starter-web" |
Команда mustRunAfter
Определяет, что целевая задача должна быть выполнена после указанной задачи(задач):
1 | test.mustRunAfter checkstyleMain, checkstyleTest |