5. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
6. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
● Как выполнить тесты?
7. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
● Как выполнить тесты?
● Как разбить процесс сборки на стадии?
8. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
● Как выполнить тесты?
● Как разбить процесс сборки на стадии?
● Где хранить сторонние библиотеки?
9. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
● Как выполнить тесты?
● Как разбить процесс сборки на стадии?
● Где хранить сторонние библиотеки?
● Как версионировать продукт?
10. Типичные проблемы
● Структура кода. Где и что хранится?
● Как скомпилировать код (поддержка javac)?
● Как выполнить тесты?
● Как разбить процесс сборки на стадии?
● Где хранить сторонние библиотеки?
● Как версионировать продукт?
● Как передавать свои разработки другим людям?
12. Инструменты сборки
● Компиляция кода
● Запуск тестов и определение степени покрытия
кода
13. Инструменты сборки
● Компиляция кода
● Запуск тестов и определение степени покрытия
кода
● Статический анализ кода: поиск ошибок в коде
без его выполнения
14. Инструменты сборки
● Компиляция кода
● Запуск тестов и определение степени покрытия
кода
● Статический анализ кода: поиск ошибок в коде
без его выполнения
● Сборка архивов с бинарными файлами,
исходными кодами, документацией
15. Инструменты сборки
● Компиляция кода
● Запуск тестов и определение степени покрытия
кода
● Статический анализ кода: поиск ошибок в коде
без его выполнения
● Сборка архивов с бинарными файлами,
исходными кодами, документацией
● Построение отчетов
17. Польза от инструментов сборки
● Уменьшение числа рутинных ошибок
● Уменьшение времени сборки проекта
18. Польза от инструментов сборки
● Уменьшение числа рутинных ошибок
● Уменьшение времени сборки проекта
● Можно хранить историю сборок проекта и
анализировать ошибки
19. Польза от инструментов сборки
● Уменьшение числа рутинных ошибок
● Уменьшение времени сборки проекта
● Можно хранить историю сборок проекта и
анализировать ошибки
● В итоге – уменьшение затрат и улучшение
качества продукта
23. Shell-скрипт. Преимущества
● Можно выполнять много команд без
копирования
● Условная логика
● Примитивное разбиение на стадии:
clean.sh, compile.sh, test.sh
29. Apache Ant. Преимущества
● Поддержка Java-специфичных задач
● Переносимость между платформами
● Возможность расширения (плагины)
● Параметризованные билды
31. Apache Ant. Недостатки
● Нет конвенций версионирования кода
● Нет конвенций по расположению кода
32. Apache Ant. Недостатки
● Нет конвенций версионирования кода
● Нет конвенций по расположению кода
● Нет автоматического управления
зависимостями (их кладут в lib/)
33. Apache Ant. Недостатки
● Нет конвенций версионирования кода
● Нет конвенций по расположению кода
● Нет автоматического управления
зависимостями (их кладут в lib/)
● Произвольный набор целей (нет жизненного
цикла)
34. Apache Ant. Недостатки
● Нет конвенций версионирования кода
● Нет конвенций по расположению кода
● Нет автоматического управления
зависимостями (их кладут в lib/)
● Произвольный набор целей (нет жизненного
цикла)
● Императивный стиль описания билда
(последовательность действий)
35. Apache Ant. Недостатки
● Нет конвенций версионирования кода
● Нет конвенций по расположению кода
● Нет автоматического управления
зависимостями (их кладут в lib/)
● Произвольный набор целей (нет жизненного
цикла)
● Императивный стиль описания билда
(последовательность действий)
● Не поддерживает JUnit 4
36. Apache Ivy (2004)
ivy.xml
Решили проблему Ant:
● Автоматическое управление зависимостями
38. Apache Maven
● Конвенции расположения кода, тестов,
ресурсов и т.д.
39. Apache Maven
● Конвенции расположения кода, тестов,
ресурсов и т.д.
● Четкий жизненный цикл: цели предопределены
40. Apache Maven
● Конвенции расположения кода, тестов,
ресурсов и т.д.
● Четкий жизненный цикл: цели предопределены
● Способ поделиться кодом с другими –
удаленные репозитории зависимостей
41. Apache Maven
● Конвенции расположения кода, тестов,
ресурсов и т.д.
● Четкий жизненный цикл: цели предопределены
● Способ поделиться кодом с другими –
удаленные репозитории зависимостей
● Понятный механизм хранения зависимостей –
локальный репозиторий
43. Apache Maven
● Правила версионирования кода
● Поддержка многомодульных проектов
44. Apache Maven
● Правила версионирования кода
● Поддержка многомодульных проектов
● Декларативный подход к описанию билда
45. Apache Maven
● Правила версионирования кода
● Поддержка многомодульных проектов
● Декларативный подход к описанию билда
● Модульная структура (даже простые действия
делают плагины)
48. Gradle
● Поддерживает основные возможности Maven
● Файл build.gradle с DSL на Groovy
49. Gradle
● Поддерживает основные возможности Maven
● Файл build.gradle с DSL на Groovy
● Инкрементальная компиляция
50. Gradle
● Поддерживает основные возможности Maven
● Файл build.gradle с DSL на Groovy
● Инкрементальная компиляция
● Использует те же удаленные репозитории, что
и Maven
51. Gradle
● Поддерживает основные возможности Maven
● Файл build.gradle с DSL на Groovy
● Инкрементальная компиляция
● Использует те же удаленные репозитории, что
и Maven
● Эмулирует поведение Maven, но можно
задавать свой порядок целей
52. Gradle
● Поддерживает основные возможности Maven
● Файл build.gradle с DSL на Groovy
● Инкрементальная компиляция
● Использует те же удаленные репозитории, что
и Maven
● Эмулирует поведение Maven, но можно
задавать свой порядок целей
● Поддерживает плагины, несовместимые с
Maven
66. Cabal
● Собственный репозиторий артефактов Hackage
● Архивы с расширением *.tar.gz, а не *.jar.
67. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
68. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
● Автоматическое управление зависимостями
69. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
● Автоматическое управление зависимостями
● Хранилища артефактов
70. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
● Автоматическое управление зависимостями
● Хранилища артефактов
● Четкий жизненный цикл
71. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
● Автоматическое управление зависимостями
● Хранилища артефактов
● Четкий жизненный цикл
● Конвенции версионирования
72. Современная система сборки на
любом языке
● Основная цель – автоматизация действий с
кодом на локальной машине разработчика
● Автоматическое управление зависимостями
● Хранилища артефактов
● Четкий жизненный цикл
● Конвенции версионирования
● Конвенции расположения исходного кода
73. Часть 2. Про Maven
Файл pom.xml
● Все pom.xml переопределяют “super pom”
74. Часть 2. Про Maven
Файл pom.xml
● Все pom.xml переопределяют “super pom”
● Описание проекта (название, версия, ссылки
на исходные коды, CI, лицензия, разработчики
и т.п.)
75. Часть 2. Про Maven
Файл pom.xml
● Все pom.xml переопределяют “super pom”
● Описание проекта (название, версия, ссылки
на исходные коды, CI, лицензия, разработчики
и т.п.)
● Список зависимостей
76. Часть 2. Про Maven
Файл pom.xml
● Все pom.xml переопределяют “super pom”
● Описание проекта (название, версия, ссылки
на исходные коды, CI, лицензия, разработчики
и т.п.)
● Список зависимостей
● Список плагинов и их конфигурация
77. Часть 2. Про Maven
● Все pom.xml переопределяют “super pom”
● Описание проекта (название, версия, ссылки
на исходные коды, CI, лицензия, разработчики
и т.п.)
● Список зависимостей
● Список плагинов и их конфигурация
● Профили
Файл pom.xml
86. Жизненные циклы Maven
● Clean – очищает проект перед сборкой
● Default – собирает проект
● Site – создает сайт проекта со ссылками на
зависимости, CI, тикетную систему и т.п.
87. Сборка проекта. Команда mvn.
● Validate – проверить правильность проекта
● Compile – скомпилировать исходники
● Test – скомпилировать и выполнить тесты
● Package – упаковать скомпилированный код и исходники
● Verify – проверить, что код правильно упакован
● Install – установить пакеты в локальный репозиторий
● Deploy – выгрузить пакеты в удаленный репозиторий
88. Управление зависимостями
● Секции <dependencies> и
<dependencyManagement>
● Зависимость = groupId + artifactId + номер
версии + scope
● Scope: compile, test, runtime, provided, system
89. Версии пакетов. Релизы и снепшоты
● Снепшот – промежуточная версия пакета,
используемая в разработке: 1.0-SNAPSHOT. Может
быть бесконечно много снепшотов с одной и той же
версией.
● Релиз – стабильная версия пакета, предназначенная
для использования другими проектами: 1.0. Релиз
всегда один.
● Порядок версий: 1.0-SNAPSHOT, 1.0, 1.1-SNAPSHOT,
1.1, 1.2-SNAPSHOT и т.д.
90. Конфликт зависимостей. Дерево
зависимостей.
● Для разрешения конфликтов зависимостей
нужно построить дерево зависимостей
● Построение дерева зависимостей:
93. Необязательные зависимости
● Такая зависимость не будет скачиваться в
проектах, зависящих от данного
● Для того, чтобы пометить необязательную
зависимость – секция optional:
94. Плагины. Настройка билда.
Изменение процесса билда – это изменение
настроек отдельных плагинов в секции
build/plugins.
95. Maven Compiler Plugin
● Компилирует Java-код продукта и тестов
● Основная настройка – версия компилятора
● Настройка:
102. Maven Site Plugin
● Первоначальное назначение - сгенерировать
сайт проекта
● Основное применение – генерация отчетов
● Настройка:
103. Служебные файлы и каталоги
● Папка ~/.m2 – локальный репозиторий артефактов
● Файлы ~/.m2/settings.xml и /etc/maven/settings.xml,
~/.mavenrc и /etc/mavenrc – конфигурация Maven
104. Профили. Settings.xml
● Профиль – способ изменять настройки билда,
не изменяя pom.xml
● Профиль хранится в pom.xml или в settings.xml
в секции profiles
● Использование профиля:
108. Локальный репозиторий артефактов
● Кэширует данные с центрального репозитория
● В папке репозитория:
– pom, pom.sha1
– jar, jar.sha1
– javadoc.jar, javadoc.jar.sha1
– sources.jar, sources.jar.sha1
● За счет кэширования ускоряется выполнение
билда