SlideShare a Scribd company logo
1 of 111
Download to read offline
Автоматизация сборки Java проектов 
Часть 1. Про инструменты сборки вообще 
Часть 2. Про Maven
Часть 1. Про инструменты сборки вообще 
Библиотека HelloWorld
Типичные проблемы 
● Структура кода. Где и что хранится?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)? 
● Как выполнить тесты?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)? 
● Как выполнить тесты? 
● Как разбить процесс сборки на стадии?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)? 
● Как выполнить тесты? 
● Как разбить процесс сборки на стадии? 
● Где хранить сторонние библиотеки?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)? 
● Как выполнить тесты? 
● Как разбить процесс сборки на стадии? 
● Где хранить сторонние библиотеки? 
● Как версионировать продукт?
Типичные проблемы 
● Структура кода. Где и что хранится? 
● Как скомпилировать код (поддержка javac)? 
● Как выполнить тесты? 
● Как разбить процесс сборки на стадии? 
● Где хранить сторонние библиотеки? 
● Как версионировать продукт? 
● Как передавать свои разработки другим людям?
Инструменты сборки 
● Компиляция кода
Инструменты сборки 
● Компиляция кода 
● Запуск тестов и определение степени покрытия 
кода
Инструменты сборки 
● Компиляция кода 
● Запуск тестов и определение степени покрытия 
кода 
● Статический анализ кода: поиск ошибок в коде 
без его выполнения
Инструменты сборки 
● Компиляция кода 
● Запуск тестов и определение степени покрытия 
кода 
● Статический анализ кода: поиск ошибок в коде 
без его выполнения 
● Сборка архивов с бинарными файлами, 
исходными кодами, документацией
Инструменты сборки 
● Компиляция кода 
● Запуск тестов и определение степени покрытия 
кода 
● Статический анализ кода: поиск ошибок в коде 
без его выполнения 
● Сборка архивов с бинарными файлами, 
исходными кодами, документацией 
● Построение отчетов
Польза от инструментов сборки 
● Уменьшение числа рутинных ошибок
Польза от инструментов сборки 
● Уменьшение числа рутинных ошибок 
● Уменьшение времени сборки проекта
Польза от инструментов сборки 
● Уменьшение числа рутинных ошибок 
● Уменьшение времени сборки проекта 
● Можно хранить историю сборок проекта и 
анализировать ошибки
Польза от инструментов сборки 
● Уменьшение числа рутинных ошибок 
● Уменьшение времени сборки проекта 
● Можно хранить историю сборок проекта и 
анализировать ошибки 
● В итоге – уменьшение затрат и улучшение 
качества продукта
История развития инструментов 
сборки 
https://github.com/autoschool/build-tools
Нет автоматизации 
Недостатки 
● Неудобно работать с большим число файлов 
● Не поддерживается условная логика 
● Платформозависимость 
● ...
Shell-скрипт
Shell-скрипт. Преимущества 
● Можно выполнять много команд без 
копирования 
● Условная логика 
● Примитивное разбиение на стадии: 
clean.sh, compile.sh, test.sh
Shell-скрипт. Недостатки 
● Платформозависим 
● Нет единого подхода к описанию 
процесса сборки
Make (1977 год) 
Makefile
Make. Преимущества 
● Единый формат описания процесса сборки
Make. Недостатки 
● Платформозависим 
● Tab символы в Makefile 
● Нет поддержки Java задач, параметров, 
плагинов
Apache Ant (2000 год) 
build.xml
Apache Ant. Преимущества 
● Поддержка Java-специфичных задач 
● Переносимость между платформами 
● Возможность расширения (плагины) 
● Параметризованные билды
Apache Ant. Недостатки 
● Нет конвенций версионирования кода
Apache Ant. Недостатки 
● Нет конвенций версионирования кода 
● Нет конвенций по расположению кода
Apache Ant. Недостатки 
● Нет конвенций версионирования кода 
● Нет конвенций по расположению кода 
● Нет автоматического управления 
зависимостями (их кладут в lib/)
Apache Ant. Недостатки 
● Нет конвенций версионирования кода 
● Нет конвенций по расположению кода 
● Нет автоматического управления 
зависимостями (их кладут в lib/) 
● Произвольный набор целей (нет жизненного 
цикла)
Apache Ant. Недостатки 
● Нет конвенций версионирования кода 
● Нет конвенций по расположению кода 
● Нет автоматического управления 
зависимостями (их кладут в lib/) 
● Произвольный набор целей (нет жизненного 
цикла) 
● Императивный стиль описания билда 
(последовательность действий)
Apache Ant. Недостатки 
● Нет конвенций версионирования кода 
● Нет конвенций по расположению кода 
● Нет автоматического управления 
зависимостями (их кладут в lib/) 
● Произвольный набор целей (нет жизненного 
цикла) 
● Императивный стиль описания билда 
(последовательность действий) 
● Не поддерживает JUnit 4
Apache Ivy (2004) 
ivy.xml 
Решили проблему Ant: 
● Автоматическое управление зависимостями
Apache Maven (2004 год) 
pom.xml
Apache Maven 
● Конвенции расположения кода, тестов, 
ресурсов и т.д.
Apache Maven 
● Конвенции расположения кода, тестов, 
ресурсов и т.д. 
● Четкий жизненный цикл: цели предопределены
Apache Maven 
● Конвенции расположения кода, тестов, 
ресурсов и т.д. 
● Четкий жизненный цикл: цели предопределены 
● Способ поделиться кодом с другими – 
удаленные репозитории зависимостей
Apache Maven 
● Конвенции расположения кода, тестов, 
ресурсов и т.д. 
● Четкий жизненный цикл: цели предопределены 
● Способ поделиться кодом с другими – 
удаленные репозитории зависимостей 
● Понятный механизм хранения зависимостей – 
локальный репозиторий
Apache Maven 
● Правила версионирования кода
Apache Maven 
● Правила версионирования кода 
● Поддержка многомодульных проектов
Apache Maven 
● Правила версионирования кода 
● Поддержка многомодульных проектов 
● Декларативный подход к описанию билда
Apache Maven 
● Правила версионирования кода 
● Поддержка многомодульных проектов 
● Декларативный подход к описанию билда 
● Модульная структура (даже простые действия 
делают плагины)
Gradle (2009 год) 
build.gradle
Gradle 
● Поддерживает основные возможности Maven
Gradle 
● Поддерживает основные возможности Maven 
● Файл build.gradle с DSL на Groovy
Gradle 
● Поддерживает основные возможности Maven 
● Файл build.gradle с DSL на Groovy 
● Инкрементальная компиляция
Gradle 
● Поддерживает основные возможности Maven 
● Файл build.gradle с DSL на Groovy 
● Инкрементальная компиляция 
● Использует те же удаленные репозитории, что 
и Maven
Gradle 
● Поддерживает основные возможности Maven 
● Файл build.gradle с DSL на Groovy 
● Инкрементальная компиляция 
● Использует те же удаленные репозитории, что 
и Maven 
● Эмулирует поведение Maven, но можно 
задавать свой порядок целей
Gradle 
● Поддерживает основные возможности Maven 
● Файл build.gradle с DSL на Groovy 
● Инкрементальная компиляция 
● Использует те же удаленные репозитории, что 
и Maven 
● Эмулирует поведение Maven, но можно 
задавать свой порядок целей 
● Поддерживает плагины, несовместимые с 
Maven
SBT (2011) 
build.sbt, build.scala
SBT 
Интерактивная консоль
SBT 
● Полная поддержка компиляции Scala
SBT 
● Полная поддержка компиляции Scala 
● Интерактивная консоль
SBT 
● Полная поддержка компиляции Scala 
● Интерактивная консоль 
● Инкрементальная компиляция кода
SBT 
● Полная поддержка компиляции Scala 
● Интерактивная консоль 
● Инкрементальная компиляция кода 
● Файлы build.sbt и build.scala (требуется 
компиляция)
SBT 
● Полная поддержка компиляции Scala 
● Интерактивная консоль 
● Инкрементальная компиляция кода 
● Файлы build.sbt и build.scala (требуется 
компиляция) 
● Плагины, несовместимые с Maven
Leiningen 
project.clj
Leiningen (Clojure) 
● Файл project.clj на Clojure 
● Зависимости из репозиториев Maven 
● Альтернативный репозиторий Clojars 
(http://clojars.org)
Инструменты сборки в 
других языках программирования
Rake (Ruby) 
Rakefile 
Система управления зависимостями – RubyGems
Grunt (Javascript) 
Gruntfile.js 
Система управления зависимостями – Bower
Cabal (Haskell) 
*.cabal
Cabal 
● Собственный репозиторий артефактов Hackage 
● Архивы с расширением *.tar.gz, а не *.jar.
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика 
● Автоматическое управление зависимостями
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика 
● Автоматическое управление зависимостями 
● Хранилища артефактов
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика 
● Автоматическое управление зависимостями 
● Хранилища артефактов 
● Четкий жизненный цикл
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика 
● Автоматическое управление зависимостями 
● Хранилища артефактов 
● Четкий жизненный цикл 
● Конвенции версионирования
Современная система сборки на 
любом языке 
● Основная цель – автоматизация действий с 
кодом на локальной машине разработчика 
● Автоматическое управление зависимостями 
● Хранилища артефактов 
● Четкий жизненный цикл 
● Конвенции версионирования 
● Конвенции расположения исходного кода
Часть 2. Про Maven 
Файл pom.xml 
● Все pom.xml переопределяют “super pom”
Часть 2. Про Maven 
Файл pom.xml 
● Все pom.xml переопределяют “super pom” 
● Описание проекта (название, версия, ссылки 
на исходные коды, CI, лицензия, разработчики 
и т.п.)
Часть 2. Про Maven 
Файл pom.xml 
● Все pom.xml переопределяют “super pom” 
● Описание проекта (название, версия, ссылки 
на исходные коды, CI, лицензия, разработчики 
и т.п.) 
● Список зависимостей
Часть 2. Про Maven 
Файл pom.xml 
● Все pom.xml переопределяют “super pom” 
● Описание проекта (название, версия, ссылки 
на исходные коды, CI, лицензия, разработчики 
и т.п.) 
● Список зависимостей 
● Список плагинов и их конфигурация
Часть 2. Про Maven 
● Все pom.xml переопределяют “super pom” 
● Описание проекта (название, версия, ссылки 
на исходные коды, CI, лицензия, разработчики 
и т.п.) 
● Список зависимостей 
● Список плагинов и их конфигурация 
● Профили 
Файл pom.xml
Название проекта и параметры
Список модулей
Информация о проекте
Описание сборки проекта (плагины)
Зависимости
Именование директорий 
● src/ - все исходные коды 
● src/main – все, что касается продукта 
● src/test – все, что касается тестов
Именование директорий 
● src/main/java – Java-код продукта 
● src/main/resources – ресурсы продукта 
● src/main/webapp – файлы веб-приложений 
продукта (стили, Javascript и т.п.)
Именование директорий 
● src/test/java – Java-код тестов 
● src/test/resources – ресурсы тестов 
● src/test/webapp – файлы веб-приложений 
тестов
Жизненные циклы Maven 
● Clean – очищает проект перед сборкой 
● Default – собирает проект 
● Site – создает сайт проекта со ссылками на 
зависимости, CI, тикетную систему и т.п.
Сборка проекта. Команда mvn. 
● Validate – проверить правильность проекта 
● Compile – скомпилировать исходники 
● Test – скомпилировать и выполнить тесты 
● Package – упаковать скомпилированный код и исходники 
● Verify – проверить, что код правильно упакован 
● Install – установить пакеты в локальный репозиторий 
● Deploy – выгрузить пакеты в удаленный репозиторий
Управление зависимостями 
● Секции <dependencies> и 
<dependencyManagement> 
● Зависимость = groupId + artifactId + номер 
версии + scope 
● Scope: compile, test, runtime, provided, system
Версии пакетов. Релизы и снепшоты 
● Снепшот – промежуточная версия пакета, 
используемая в разработке: 1.0-SNAPSHOT. Может 
быть бесконечно много снепшотов с одной и той же 
версией. 
● Релиз – стабильная версия пакета, предназначенная 
для использования другими проектами: 1.0. Релиз 
всегда один. 
● Порядок версий: 1.0-SNAPSHOT, 1.0, 1.1-SNAPSHOT, 
1.1, 1.2-SNAPSHOT и т.д.
Конфликт зависимостей. Дерево 
зависимостей. 
● Для разрешения конфликтов зависимостей 
нужно построить дерево зависимостей 
● Построение дерева зависимостей:
Пример дерева зависимостей
Исключение зависимостей 
● Исключение зависимостей – exclusions:
Необязательные зависимости 
● Такая зависимость не будет скачиваться в 
проектах, зависящих от данного 
● Для того, чтобы пометить необязательную 
зависимость – секция optional:
Плагины. Настройка билда. 
Изменение процесса билда – это изменение 
настроек отдельных плагинов в секции 
build/plugins.
Maven Compiler Plugin 
● Компилирует Java-код продукта и тестов 
● Основная настройка – версия компилятора 
● Настройка:
Maven Source Plugin 
● Упаковывает исходные коды проекта 
● Настройка:
Maven Dependency Plugin 
● Разрешение зависимостей, построение дерева зависимостей 
● Копирование, распаковка и другие операции с 
зависимостями
Maven Jar Plugin 
● Упаковывает файлы в jar-архив:
Maven Assembly Plugin 
● Сборка дистрибутивов продукта (например, 
zip-архив с jar, bash-скриптами и README)
Maven Release Plugin 
● Автоматизирует выкладку релизов 
● Добавляются цели release:prepare и 
release:perform 
● Настройка:
Maven Surefire Plugin 
● Выполнение тестов Junit или TestNG
Maven Site Plugin 
● Первоначальное назначение - сгенерировать 
сайт проекта 
● Основное применение – генерация отчетов 
● Настройка:
Служебные файлы и каталоги 
● Папка ~/.m2 – локальный репозиторий артефактов 
● Файлы ~/.m2/settings.xml и /etc/maven/settings.xml, 
~/.mavenrc и /etc/mavenrc – конфигурация Maven
Профили. Settings.xml 
● Профиль – способ изменять настройки билда, 
не изменяя pom.xml 
● Профиль хранится в pom.xml или в settings.xml 
в секции profiles 
● Использование профиля:
Пример профиля
Центральные репозитории 
артефактов 
● Maven Central Repository (http://maven.org/) 
● В папке репозитория: 
– maven-metadata.xml 
– jar, jar.md5, jar.sha1 
– javadoc.jar, javadoc.jar.md5, javadoc.jar.sha1 
– sources.jar, sources.jar.md5, sources.jar.sha1 
– jar.asc, jar.asc.md5, jar.asc.sha1 
● Специализированные веб-приложения Sonatype Nexus и 
Artifactory
Пример папки из центрального 
репозитория
Локальный репозиторий артефактов 
● Кэширует данные с центрального репозитория 
● В папке репозитория: 
– pom, pom.sha1 
– jar, jar.sha1 
– javadoc.jar, javadoc.jar.sha1 
– sources.jar, sources.jar.sha1 
● За счет кэширования ускоряется выполнение 
билда
Пример папки из локального 
репозитория
Архетипы 
● Архетип – готовый шаблон проекта 
● Создание проекта по шаблону:
Крутов Иван 
Skype: vania-pooh 
vania-pooh@yandex-team.ru

More Related Content

What's hot

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationSQALab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleGeeksLab Odessa
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?CEE-SEC(R)
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникSQALab
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
"Electron. How the most modern framework works" Oleksii Holubiev
"Electron. How the most modern framework works" Oleksii Holubiev"Electron. How the most modern framework works" Oleksii Holubiev
"Electron. How the most modern framework works" Oleksii HolubievFwdays
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QAFest
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funAlexandr Khotemskoy
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCOMAQA.BY
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
 

What's hot (20)

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
"Electron. How the most modern framework works" Oleksii Holubiev
"Electron. How the most modern framework works" Oleksii Holubiev"Electron. How the most modern framework works" Oleksii Holubiev
"Electron. How the most modern framework works" Oleksii Holubiev
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 

Similar to Иван Крутов - Автоматизация сборки Java-проекта

Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это былоMskDotNet Community
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidAnton Rutkevich
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовCOMAQA.BY
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nixAlexander Gerasiov
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'codeIvan Mosiev
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 

Similar to Иван Крутов - Автоматизация сборки Java-проекта (20)

Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Abf
AbfAbf
Abf
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Иван Крутов - Автоматизация сборки Java-проекта

  • 1.
  • 2. Автоматизация сборки Java проектов Часть 1. Про инструменты сборки вообще Часть 2. Про Maven
  • 3. Часть 1. Про инструменты сборки вообще Библиотека HelloWorld
  • 4. Типичные проблемы ● Структура кода. Где и что хранится?
  • 5. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)?
  • 6. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)? ● Как выполнить тесты?
  • 7. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)? ● Как выполнить тесты? ● Как разбить процесс сборки на стадии?
  • 8. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)? ● Как выполнить тесты? ● Как разбить процесс сборки на стадии? ● Где хранить сторонние библиотеки?
  • 9. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)? ● Как выполнить тесты? ● Как разбить процесс сборки на стадии? ● Где хранить сторонние библиотеки? ● Как версионировать продукт?
  • 10. Типичные проблемы ● Структура кода. Где и что хранится? ● Как скомпилировать код (поддержка javac)? ● Как выполнить тесты? ● Как разбить процесс сборки на стадии? ● Где хранить сторонние библиотеки? ● Как версионировать продукт? ● Как передавать свои разработки другим людям?
  • 11. Инструменты сборки ● Компиляция кода
  • 12. Инструменты сборки ● Компиляция кода ● Запуск тестов и определение степени покрытия кода
  • 13. Инструменты сборки ● Компиляция кода ● Запуск тестов и определение степени покрытия кода ● Статический анализ кода: поиск ошибок в коде без его выполнения
  • 14. Инструменты сборки ● Компиляция кода ● Запуск тестов и определение степени покрытия кода ● Статический анализ кода: поиск ошибок в коде без его выполнения ● Сборка архивов с бинарными файлами, исходными кодами, документацией
  • 15. Инструменты сборки ● Компиляция кода ● Запуск тестов и определение степени покрытия кода ● Статический анализ кода: поиск ошибок в коде без его выполнения ● Сборка архивов с бинарными файлами, исходными кодами, документацией ● Построение отчетов
  • 16. Польза от инструментов сборки ● Уменьшение числа рутинных ошибок
  • 17. Польза от инструментов сборки ● Уменьшение числа рутинных ошибок ● Уменьшение времени сборки проекта
  • 18. Польза от инструментов сборки ● Уменьшение числа рутинных ошибок ● Уменьшение времени сборки проекта ● Можно хранить историю сборок проекта и анализировать ошибки
  • 19. Польза от инструментов сборки ● Уменьшение числа рутинных ошибок ● Уменьшение времени сборки проекта ● Можно хранить историю сборок проекта и анализировать ошибки ● В итоге – уменьшение затрат и улучшение качества продукта
  • 20. История развития инструментов сборки https://github.com/autoschool/build-tools
  • 21. Нет автоматизации Недостатки ● Неудобно работать с большим число файлов ● Не поддерживается условная логика ● Платформозависимость ● ...
  • 23. Shell-скрипт. Преимущества ● Можно выполнять много команд без копирования ● Условная логика ● Примитивное разбиение на стадии: clean.sh, compile.sh, test.sh
  • 24. Shell-скрипт. Недостатки ● Платформозависим ● Нет единого подхода к описанию процесса сборки
  • 25. Make (1977 год) Makefile
  • 26. Make. Преимущества ● Единый формат описания процесса сборки
  • 27. Make. Недостатки ● Платформозависим ● Tab символы в Makefile ● Нет поддержки Java задач, параметров, плагинов
  • 28. Apache Ant (2000 год) build.xml
  • 29. Apache Ant. Преимущества ● Поддержка Java-специфичных задач ● Переносимость между платформами ● Возможность расширения (плагины) ● Параметризованные билды
  • 30. Apache Ant. Недостатки ● Нет конвенций версионирования кода
  • 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: ● Автоматическое управление зависимостями
  • 37. Apache Maven (2004 год) pom.xml
  • 38. Apache Maven ● Конвенции расположения кода, тестов, ресурсов и т.д.
  • 39. Apache Maven ● Конвенции расположения кода, тестов, ресурсов и т.д. ● Четкий жизненный цикл: цели предопределены
  • 40. Apache Maven ● Конвенции расположения кода, тестов, ресурсов и т.д. ● Четкий жизненный цикл: цели предопределены ● Способ поделиться кодом с другими – удаленные репозитории зависимостей
  • 41. Apache Maven ● Конвенции расположения кода, тестов, ресурсов и т.д. ● Четкий жизненный цикл: цели предопределены ● Способ поделиться кодом с другими – удаленные репозитории зависимостей ● Понятный механизм хранения зависимостей – локальный репозиторий
  • 42. Apache Maven ● Правила версионирования кода
  • 43. Apache Maven ● Правила версионирования кода ● Поддержка многомодульных проектов
  • 44. Apache Maven ● Правила версионирования кода ● Поддержка многомодульных проектов ● Декларативный подход к описанию билда
  • 45. Apache Maven ● Правила версионирования кода ● Поддержка многомодульных проектов ● Декларативный подход к описанию билда ● Модульная структура (даже простые действия делают плагины)
  • 46. Gradle (2009 год) build.gradle
  • 47. Gradle ● Поддерживает основные возможности 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
  • 53. SBT (2011) build.sbt, build.scala
  • 55. SBT ● Полная поддержка компиляции Scala
  • 56. SBT ● Полная поддержка компиляции Scala ● Интерактивная консоль
  • 57. SBT ● Полная поддержка компиляции Scala ● Интерактивная консоль ● Инкрементальная компиляция кода
  • 58. SBT ● Полная поддержка компиляции Scala ● Интерактивная консоль ● Инкрементальная компиляция кода ● Файлы build.sbt и build.scala (требуется компиляция)
  • 59. SBT ● Полная поддержка компиляции Scala ● Интерактивная консоль ● Инкрементальная компиляция кода ● Файлы build.sbt и build.scala (требуется компиляция) ● Плагины, несовместимые с Maven
  • 61. Leiningen (Clojure) ● Файл project.clj на Clojure ● Зависимости из репозиториев Maven ● Альтернативный репозиторий Clojars (http://clojars.org)
  • 62. Инструменты сборки в других языках программирования
  • 63. Rake (Ruby) Rakefile Система управления зависимостями – RubyGems
  • 64. Grunt (Javascript) Gruntfile.js Система управления зависимостями – Bower
  • 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
  • 83. Именование директорий ● src/ - все исходные коды ● src/main – все, что касается продукта ● src/test – все, что касается тестов
  • 84. Именование директорий ● src/main/java – Java-код продукта ● src/main/resources – ресурсы продукта ● src/main/webapp – файлы веб-приложений продукта (стили, Javascript и т.п.)
  • 85. Именование директорий ● src/test/java – Java-код тестов ● src/test/resources – ресурсы тестов ● src/test/webapp – файлы веб-приложений тестов
  • 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. Конфликт зависимостей. Дерево зависимостей. ● Для разрешения конфликтов зависимостей нужно построить дерево зависимостей ● Построение дерева зависимостей:
  • 92. Исключение зависимостей ● Исключение зависимостей – exclusions:
  • 93. Необязательные зависимости ● Такая зависимость не будет скачиваться в проектах, зависящих от данного ● Для того, чтобы пометить необязательную зависимость – секция optional:
  • 94. Плагины. Настройка билда. Изменение процесса билда – это изменение настроек отдельных плагинов в секции build/plugins.
  • 95. Maven Compiler Plugin ● Компилирует Java-код продукта и тестов ● Основная настройка – версия компилятора ● Настройка:
  • 96. Maven Source Plugin ● Упаковывает исходные коды проекта ● Настройка:
  • 97. Maven Dependency Plugin ● Разрешение зависимостей, построение дерева зависимостей ● Копирование, распаковка и другие операции с зависимостями
  • 98. Maven Jar Plugin ● Упаковывает файлы в jar-архив:
  • 99. Maven Assembly Plugin ● Сборка дистрибутивов продукта (например, zip-архив с jar, bash-скриптами и README)
  • 100. Maven Release Plugin ● Автоматизирует выкладку релизов ● Добавляются цели release:prepare и release:perform ● Настройка:
  • 101. Maven Surefire Plugin ● Выполнение тестов Junit или TestNG
  • 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 ● Использование профиля:
  • 106. Центральные репозитории артефактов ● Maven Central Repository (http://maven.org/) ● В папке репозитория: – maven-metadata.xml – jar, jar.md5, jar.sha1 – javadoc.jar, javadoc.jar.md5, javadoc.jar.sha1 – sources.jar, sources.jar.md5, sources.jar.sha1 – jar.asc, jar.asc.md5, jar.asc.sha1 ● Специализированные веб-приложения Sonatype Nexus и Artifactory
  • 107. Пример папки из центрального репозитория
  • 108. Локальный репозиторий артефактов ● Кэширует данные с центрального репозитория ● В папке репозитория: – pom, pom.sha1 – jar, jar.sha1 – javadoc.jar, javadoc.jar.sha1 – sources.jar, sources.jar.sha1 ● За счет кэширования ускоряется выполнение билда
  • 109. Пример папки из локального репозитория
  • 110. Архетипы ● Архетип – готовый шаблон проекта ● Создание проекта по шаблону:
  • 111. Крутов Иван Skype: vania-pooh vania-pooh@yandex-team.ru