Анатолий Кондратьев, exigen services
DESCRIPTION
«История строителя: Maven - от новичка до мастера. Сборка простых и сложных Java- проектов.» BitByte: 20 апреля 2013, Санкт-Петербург http://bitbyte.itmozg.ru/TRANSCRIPT
www.ExigenServices.com
Сборка простых и сложных Java-проектов
Анатолий Кондратьев
Апрель 2013
История строителя:
Maven от новичка до мастера
2
Предназначение Maven
• Сборка проектов
• Единый стиль
– Жизненный цикл
– Организация данных
• Автоматизация
– Сборки
– Зависимостей
3
Базовая структура
Магия Maven
Компьютер Интернет
Local repo
repo
- Artifact 1 - Artifact 2 - Etc…
Central repo
repo
• Артефакт (Artifact)
• Репозиторий (Repository)
• Зависимость (Dependency)
4
Maven проект
pom.xml
Исходный код Ресурсы Бинарные файлы
Репозитории
артефактов
Жизненный цикл Maven
plug-in plug-in plug-in
Project Object Model
Менеджер зависимостей
5
Пример приложения
Maven в действии
6
Содержимое проекта
GWT application
EJB B EJB A
My Library
7
Maven: Наследование и Агрегация
Parent pom
EJB A ejb
EJB B ejb
Gwt war
My library jar
8
Maven в действии
<project …>
<modelVersion>4.0.0</modelVersion>
<groupId>ru.exigenservices</groupId>
<artifactId>my-parent</artifactId>
<version>1.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>EJB-A</module>
<module>EJB-B</module>
<module>Gwt</module>
<module>MyLibrary</module>
</modules>
</project>
9
Maven в действии
• Что насчет развертывания?
– Необходим EAR-файл
– Необходим дополнительный шаг
• Разделение frontend и backend?
• NB! Один pom-файл – один артефакт
10
Maven в действии
Parent
pom
Frontend
pom
Gwt
war
Frontend wrapper
ear
Backend
pom
EJB A
ejb
EJB B
ejb
Backend wrapper
ear
My library jar
11
Многомодульная иерархия
• Parent pom <project …> <groupId>exigen</groupId> <artifactId>parent</artifactId> <version>1.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>backend</module> <module>frontend</module> </modules>
</project>
• Frontend pom <project …> <parent> <groupId>exigen</groupId> <artifactId>parent</artifactId> <version>1.0.1-SNAPSHOT</version> </parent>
<artifactId>frontend</artifactId> <packaging>pom</packaging> <modules> <module>Gwt</module> </modules>
</project>
12
Что ещё может помочь
Dependency & plugin management, Profiles, Execution blocks
13
Dependency&Plugin management
• Избавляемся от Copy-Paste
• Изменяемые и наследуемые
• В родителе – GroupId & ArtifactId
– Version
– Всё, что может быть сконфигурировано
• В наследнике – GroupId & ArtifactId
14
Профили в Maven
• Профиль – способ сконфигурировать сборку
• Разные профили – разные действия
– Переименование
– Использование разных конфигураций
• Активация
– Вручную: -Pprofile1,profile2
– <activeProfiles>
– <activation>
15
Конфигурация плагинов
• Уровень плагина
– Исполнение из командной строки
– Стандартный жизненный цикл
• Уровень исполнения (настройка Mojo)
– Не является частью стандартного жизненного цикла
– Разная настройка Mojo для разных окружений
– Несколько Mojo для одного плагина
16
Конфигурация Mojo
Plugin:time
<plugin>
<groupId>com.mycompany.example</groupId>
<artifactId>plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>first</id>
<phase>test</phase>
<goals>
<goal>time</goal>
</goals>
<configuration> … </configuration>
</execution>
<execution>
<id>default</id>
…
<!– No phase block -->
</execution>
</executions>
</plugin>
17
Спасибо за внимание!