Анатолий Кондратьев, exigen services

17
www.ExigenServices.com Сборка простых и сложных Java-проектов Анатолий Кондратьев Апрель 2013 История строителя: Maven от новичка до мастера

Upload: natachurda

Post on 14-Jan-2015

1.610 views

Category:

Documents


2 download

DESCRIPTION

«История строителя: Maven - от новичка до мастера. Сборка простых и сложных Java- проектов.» BitByte: 20 апреля 2013, Санкт-Петербург http://bitbyte.itmozg.ru/

TRANSCRIPT

Page 1: Анатолий Кондратьев, Exigen Services

www.ExigenServices.com

Сборка простых и сложных Java-проектов

Анатолий Кондратьев

Апрель 2013

История строителя:

Maven от новичка до мастера

Page 2: Анатолий Кондратьев, Exigen Services

2

Предназначение Maven

• Сборка проектов

• Единый стиль

– Жизненный цикл

– Организация данных

• Автоматизация

– Сборки

– Зависимостей

Page 3: Анатолий Кондратьев, Exigen Services

3

Базовая структура

Магия Maven

Компьютер Интернет

Local repo

repo

- Artifact 1 - Artifact 2 - Etc…

Central repo

repo

• Артефакт (Artifact)

• Репозиторий (Repository)

• Зависимость (Dependency)

Page 4: Анатолий Кондратьев, Exigen Services

4

Maven проект

pom.xml

Исходный код Ресурсы Бинарные файлы

Репозитории

артефактов

Жизненный цикл Maven

plug-in plug-in plug-in

Project Object Model

Менеджер зависимостей

Page 5: Анатолий Кондратьев, Exigen Services

5

Пример приложения

Maven в действии

Page 6: Анатолий Кондратьев, Exigen Services

6

Содержимое проекта

GWT application

EJB B EJB A

My Library

Page 7: Анатолий Кондратьев, Exigen Services

7

Maven: Наследование и Агрегация

Parent pom

EJB A ejb

EJB B ejb

Gwt war

My library jar

Page 8: Анатолий Кондратьев, Exigen Services

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>

Page 9: Анатолий Кондратьев, Exigen Services

9

Maven в действии

• Что насчет развертывания?

– Необходим EAR-файл

– Необходим дополнительный шаг

• Разделение frontend и backend?

• NB! Один pom-файл – один артефакт

Page 10: Анатолий Кондратьев, Exigen Services

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

Page 11: Анатолий Кондратьев, Exigen Services

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>

Page 12: Анатолий Кондратьев, Exigen Services

12

Что ещё может помочь

Dependency & plugin management, Profiles, Execution blocks

Page 13: Анатолий Кондратьев, Exigen Services

13

Dependency&Plugin management

• Избавляемся от Copy-Paste

• Изменяемые и наследуемые

• В родителе – GroupId & ArtifactId

– Version

– Всё, что может быть сконфигурировано

• В наследнике – GroupId & ArtifactId

Page 14: Анатолий Кондратьев, Exigen Services

14

Профили в Maven

• Профиль – способ сконфигурировать сборку

• Разные профили – разные действия

– Переименование

– Использование разных конфигураций

• Активация

– Вручную: -Pprofile1,profile2

– <activeProfiles>

– <activation>

Page 15: Анатолий Кондратьев, Exigen Services

15

Конфигурация плагинов

• Уровень плагина

– Исполнение из командной строки

– Стандартный жизненный цикл

• Уровень исполнения (настройка Mojo)

– Не является частью стандартного жизненного цикла

– Разная настройка Mojo для разных окружений

– Несколько Mojo для одного плагина

Page 16: Анатолий Кондратьев, Exigen Services

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>

Page 17: Анатолий Кондратьев, Exigen Services

17

Спасибо за внимание!