
На втором вводном видео мы поговорим про то, что такое build tool, что из себя представляет направленный ациклический граф задач, как и для чего используют инструменты сборки различный build files. Далее поговорим про историю возникновения build tools и почему все-таки стоит выбирать для своих проектов Gradle, сравнив достоинства и недостатки всех основных инструментов сборки проектов для JVM-based языков программирования: Apache Ant, Apache Maven и Gradle.
00:00 - Введение
00:15 - Что такое Build tool
01:54 - Направленный ациклический граф
02:55 - Что такое build file
04:40 - shell и batch скрипты
04:58 - Программа make
05:25 - Программа Apache Ant
07:24 - Программа Apache Maven
09:00 - Программа Gradle
10:28 - Gradle vs Apache Maven
11:26 - Резюме
Перед тем, как переходить к изучения одного из самый лучших и мощных инструментов сборки проектов Gradle, нам необходимо установить соответствующее программное обеспечение. Для этого нам понадобятся: - Java 16 версии (но главное, чтобы была выше 8 в связи с ограничением Gradle) - Gradle 7.1.1 версии (последняя на момент записи видео) - IntelliJ IDEA (в качестве среды разработки Java приложений) Так же попробуем прописать в Environment variable PATH - путь к директории bin нашего скаченного Gradle.
Ссылка для скачивания Java 16: https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
Ссылка для скачивания среды разработки IntelliJ IDEA: https://www.jetbrains.com/idea/download/#section=mac
Ссылка на установку Gradle: https://gradle.org/install 0
0:00 - Введение
00:15 - Установка Java 16
01:18 - Скачивание Gradle
02:03 - Установка IntelliJ IDEA
02:51 - Структура программы Gradle
03:42 - Добавление Gradle в env Path (Unix)
06:23 - Добавление Gradle в env Path (Windows)
Как мы и обсуждали в предыдущих занятиях, Gradle - это обычное Java приложение, следовательно, оно работает с объектами. Поэтому основной задачей Gradle является представление всех build files в виде объектной модели. К счастью, существует лишь 6 основных интерфейсов для описания этой модели, которые мы кратки пройдем в этом видео.
00:00 - Введение
00:33 - Создание проекта через gradle init
02:01 - Gradle проект в IntelliJ IDEA
03:03 - 6 основных интерфейсов Gradle Object Model
03:13 - 1. Интерфейс Gradle
04:09 - 2. Интерфейс Settings
04:35 - 3. Интерфейс Project
05:16 - 4. Интерфейс Task
05:48 - 5. Интерфейс Action
06:15 - 6. Интерфейс Script
Gradle кроме принципа "convention over configuration" также заимствовал в Apache Maven понятие жизненного цикла (Lifecycle). Только использует он Lifecycle не для привязки своих задач к фазам, а для конфигурации объектной модули и последующий их запуск. Всего существует 3 фазы: - initialization (фаза инициализации) - configuration (фаза настройки) - execution (фаза выполнения) На видео попробуем понять, что относится к каждой из этих фаз, а уже на следующих видео более подробно разберем каждую из них.
00:00 - Введение
00:20 - Initialization phase. Gradle object
02:11 - Initialization phase. Settings object
03:27 - Configuration phase. Project objects
04:32 - Execution phase. Execute tasks actions
04:51 - Резюме
00:00 - Введение
00:48 - Директория init.d
02:23 - Исходный код класса DefaultGradle
04:00 - Вызов задачи help
04:50 - Исходный код класса DefaultScript
08:25 - Псевдокод инициализации объекта Gradle
00:00 - Введение
00:20 - Объект класса Settings
01:19 - Псевдокод инициализации объекта Settings
02:24 - Исходный код DefaultSettings
04:01 - Файл settings.gradle
00:00 - Введение
00:17 - Интерфейс Project. Configuration phase
01:42 - Псевдокод инициализации объекта Project
02:45 - Исходный код класса DefaultProject
04:14 - Файл build.gradle
07:00 - Резюме
00:00 - Введение
00:31 - Методы task у класса Project
01:20 - Исходный код класса DefaultTask
04:10 - Обращение к созданной задаче
10:13 - Свойство type
00:00 - Введение
00:50 - Execution phase
02:00 - Методы doLast и doFirst
04:09 - Исходный код методов doLast и doFirst
06:41 - Псевдокод вызова задач
00:00 - Введение
00:30 - Task graph
01:55 - Метод dependsOn
04:32 - Метод finalizedBy
06:01 - Метод taskGraph.whenReady
07:31 - Методы shouldRunAfter и mustRunAfter
09:41 - Резюме
00:00 - Введение
00:34 - whenReady callback
01:26 - beforeTask and afterTask callbacks
03:25 - Как делать условия в callbacks
05:30 - Project defaultTasks
06:58 - Поля и методы класса DefaultTask
00:00 - Введение. 3 варианта указания properties
00:27 - Блок ext
03:04 - Файл gradle.properties
05:35 - Command line properties
00:00 - Введение. 2 варианта плагинов
00:51 - Script plugin
03:00 - Исходный код метода apply
04:00 - Class plugin
00:00 - Введение
01:15 - Новый Plugin DSL
02:10 - Исходный код java plugin
04:38 - TaskContainer. Разница методов create и register
05:50 - Структура java проектов
06:37 - Задачи java проектов
00:00 - Введение
00:35 - Запуск gradle task from IntelliJ IDEA
02:40 - Task classes
04:25 - Task assemble
05:30 - Task testClasses
07:15 - Task build
08:40 - Task clean
08:58 - Other tasks and documentation
00:00 - Введение
00:30 - Исходники java plugin. Класс SourceSet
02:15 - SourceSets DSL
04:39 - SourceSets documentation
00:00 - Введение
01:05 - Repositories DSL
02:05 - Исходный код RepositoryHandler
03:40 - Gradle local cache
05:05 - Добавление репозиториев в Repository DSL
07:19 - offline mode
00:00 - Введение
00:34 - Dependencies DSL
01:10 - Исходный код DependencyHandler
03:25 - Класс Dependency. group.name.version
05:36 - Добавление первой зависимости
07:58 - Поиск зависимостей в Gradle local cache
00:00 - Введение
00:33 - Исходный код java plugin. Класc Configuration
02:00 - Dependency configurations documentation
05:45 - Configurations DSL
00:00 - Введение
00:20 - Что такое транзитивные зависимости
01:22 - Как Gradle определяет транзитивные зависимости
03:15 - Метод exclude
04:30 - Метод transitive
05:39 - Gradle dependency resolution strategy
00:00 - Введение
00:30 - Поиск зависимостей в maven central
01:05 - Поиск зависимости в Gradle local cache
02:55 - Класс PlatformSupport
04:20 - BOM (Bill Of Materials)
00:00 - Введение. Fat jar
01:10 - Создание и запуск jar
02:24 - Файл MANIFEST.MF
03:15 - Task jar
06:03 - Добавление jar dependencies в Fat jar
11:48 - Резюме
00:00 - Введение
00:35 - Второй вариант создания executable jar на примере Gradle
01:58 - Task Copy
05:38 - MANIFEST.MF свойство Class-Path
00:00 - Введение
00:29 - Подключение war plugin
01:03 - Подключение servlet-api jar
01:35 - Написание классов для тестирования
05:01 - Указание версии Java в проекте
05:47 - webapp directory
07:09 - Скачивание tomcat 10
08:42 - Task Copy (deployToTomcat)
00:00 - Введение
00:57 - Древовидная структура Gradle проектов
02:26 - Указывание зависимостей между проектами в Gradle
03:28 - Создание модулей в Gradle
08:29 - Полный путь для вызова задачи
09:28 - Древовидная структура в IntelliJ IDEA. Task projects
00:00 - Введение
00:40 - Добавление классов для core и util проектов
01:58 - Добавление классов для database проекта
02:25 - Добавление зависимости между проектами database и core
03:40 - Добавление классов для service проекта
04:33 - Java-library plugin
06:11 - Добавление классов для web проекта
08:08 - Запуск задач для всего Gradle проекта
11:01 - Запуск задач для конкретного Gradle проекта
11:54 - Задачи buildNeeded и buildDependents
00:00 - Введение
00:32 - allprojects DSL
01:26 - subprojects DSL
03:07 - Метод project
03:55 - buildscript DSL. Порядок следований DSL в build.gradle
07:44 - Резюме
00:00 - Введение
00:38 - Настройка задачи test
02:15 - Создание теста
03:35 - Запуск тестов
04:55 - Jacoco plugin
06:35 - Jacoco plugin documentation
07:35 - Checkstyle plugin
08:08 - Parallel test execution
00:00 - Введение
00:45 - Модуль buildSrc
02:03 - Вынесение CustomPlugin в buildSrc
05:01 - Добавление id для CustomPlugin
07:04 - Резюме
00:00 - Введение
00:33 - inputs and outputs task fields
04:55 - Создание ReleaseTask в модуле buildSrc
08:34 - Резюме
00:00 - Введение
00:48 - Использование wrapper через Command Line
01:51 - IntelliJ IDEA использует wrapper
02:34 - Task wrapper
04:53 - Gradle releases
00:00 - Введение
00:48 - IntelliJ IDEA new project with Kotlin DSL
01:30 - Отличия Groovy DSL и Kotlin DSL
03:33 - Резюме
00:00 - Введение
01:20 - Миграция с Maven на Gradle
03:48 - Рекомендуемая литература
Курс по Gradle рассчитан для тех, кто уже владеет Java Core, знает язык программирования Groovy и прекрасно владеет такими понятиями как Closure и DSL. Также очень желательно иметь базовые понятия о тестировании, т.к. будет демонстрироваться фреймворк JUnit 5, и веб приложениях, так как будет демонстрироваться Apache Tomcat.
Сам же курс по Gradle предоставляет углубленные знания про то, как устроен этот современный и на текущий момент лучший автоматизированный инструмент сборки проектов. Каждый аспект, всю объектную модель мы будем разбирать, обращаясь в исходный код, чтобы лучше понимать, что происходит на самом деле.
По окончании курса, вы будете прекрасно понимать Gradle Lifecycle, знать каждый объект DSL, будете отчетливо понимать, что такое задача, как строится взаимосвязь между ними и причем здесь Task Graph. Узнаете, что из себя представляют Plugins, как их можно подключать в проект и даже как писать самим. Поймете, как Gradle скачивает зависимости, где он их хранит и как определяет транзитивные зависимости.
Научитесь собирать ваш проект в executable jar двумя разными способами, и придется конечно же для этого немного познакомиться с командной строкой.
Соберем war артефакт, воспользовавшись war plugin. Поэтому очень желательно понимать устройство Apache Tomcat и сервлетов.
Узнаем, как Gradle использует кэш для того, чтобы сохранить время запуска задач, а также почему нужно использовать gradle wrapper и какие бонусы он нам предоставляет.
Также сравнив Groovy DSL и Kotlin DSL и выясним в каких случаях стоит использовать тот или другой.
В заключительном видео поговорим, как лучше мигрировать ваш проект из Apache Maven и какую литературу прочесть, чтобы еще больше углубить свои знания в Gradle.