Similar presentations:
Язык программирования Java
1.
Первая лекцияjava for web
maven
2.
Что такое maven?"Maven is a project development management and comprehension tool"
с сайта maven.apache.org
Apache Maven – это средство для управления и сборки
проектов. Он позволяет разработчикам управлять жизненным
циклом проекта. Благодаря этому, команда может автоматизировать
процессы, связанные со сборкой, тестирование, упаковкой проекта
и т.д.
В случае, когда над проектом работает несколько команд
разработчиков, Maven позволяет работать в соответствии с
определенными стандартами создаёт базовую структуру проекта.
Maven обеспечивает поведение проекта по умолчанию
Разработчики несут ответственность только за соответственное
размещение файлов.
Логика работы Maven основана на репозиториях.
Репозиторий - это хранилище библиотек и плагинов, которые
автоматически скачиваются при упоминании в файле описания
сборки.
3.
Что важно для нас ?Независимость от платформы и IDE. Всё абсолютно идентично, как на Windows,
так и на Linux/UNIX, MacOS и т.д. Мавен проект легко подхватывается в любой IDE,
будь то IntelliJ IDEA, Eclipse или NetBeans. Всё предельно просто и из командной
строки или из самой среды IDE.
Популярность. В настоящее время Maven используется повсеместно для ведения
новых проектов в любой компании, и множество старых проектов также
переводятся на него. Опыт с Maven будет полезен вам, если будете работать в
области Java.
Глобальные репозитории библиотек. Репозиторий содержащие все известные
популярные Java-библиотеки, и множество малоизвестных. Возможность добавлять
свои библиотеки и инструментарий в глобальные репозитории. Мавен сохраняет
подключенные версии библиотек в локальном репозитории, позволяя работать с
ними в условиях отсутствия связи с Интернет.
Plug-in архитектура, дающая огромную гибкость и расширяемость под свои нужды.
Множество уже готовых плагинов (существуют обширные репозитории Мавенплагинов), простота в разработке и добавлении новых.
Единый унифицированный цикл жизни любого проекта, от малых
алгоритмических задач, разрабатываемых одним человеком, до огромных
Enterprise приложений, в разработке и сопровождении которых заняты сотни и
тысячи людей.
4.
Начало работы с MavenВ самом начале работы с Maven, пользователь непременно
столкнется с таким понятием как архетип. Архетип — это некая стандартная
компоновка файлов и каталогов в проектах различного рода (веб, swingпроекты и прочие). Другими словами, Maven знает, как обычно строятся
проекты и в соответствии с архетипом создает структуру каталогов.
Maven уже предоставляет нам наиболее популярные архетипы для
приложений, но вы можете легко создать свой.
Допустим нас интересует веб-приложение – находим подходящий
архетип, называется он maven-archetype-webapp. Выбереем нужный архетип.
После этого мы имеем наглядную структуру каталогов с говорящими
названиями
java – здесь будут ваши классы,
webapp – здесь размещаются странички веб-приложения,
resources – различного рода ресурсы в classpath (файлы конфигурации,
например),
target - cкомпилированный байт-код
test – юнит-тесты, соответственно и т.п.
5.
6.
Начало работы с MavenСтруктура и сожержание проекта Maven указывается в специальном xml-файле,
который назывется Project Object Model (pom.xml), этот файл является базовым модулем всей
системы.
Ключевым понятием Maven является артефакт — это, по сути, любая библиотека,
хранящаяся в репозитории. Это может быть какая-то зависимость или плагин.
Плагины это настройки для управления жизненным циклом проекта и его
зависимостями.
Мы можем создавать проекты с использованием Maven без понимания того, как
работают эти отдельные плагины.
В Maven каждый проект идентифицируется парой groupId artifactId.
Во избежание конфликта имён,
groupId - наименование организации или подразделения и обычно действуют такие же правила
как и при именовании пакетов в Java - записывают доменное имя организации или сайта
проекта.
artifactId - название проекта.
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
Внутри тэга version, хранится версия проекта. Если состояние кода для проекта не
зафиксировано, то в конце к имени версии добавляется "-SNAPSHOT" что обозначает что
версия в разработке.
Тег <packaging /> определяет какого типа файл будет создаваться как результат сборки.
7.
Зависимости и репозиторииКак правило, большинство популярных библиотек
находятся в центральном репозитории, поэтому их можно
прописывать сразу в раздел dependencies вашего pom-файла.
Например чтобы подключить Log4j
необходимо определить
следующую зависимость:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
Так как плагины являются такими же артефактами, как и
зависимости, то они описываются практически так же. Вместо
раздела dependencies – plugins, dependency – plugin, repositories –
pluginRepositories, repository – pluginRepository.
8.
Объектная модель проектаОбъектная модель проекта определяет полную конфигурацию для какого-то
единственного проекта.
Конфигурация включает:
название
владельца
зависимости от других проектов
и конфигурацию индивидуальных фаз процесса сборки, реализуемую посредством
плагинов.
Например, мы можем указать использование Java version 1.8 для компиляции, или
специфицировать, что проект должен быть упакован, даже если несколько юниттестов не прошли.
Большие проекты могут разделяться на несколько модулей или
подпроектов, каждый со своим POM. Таким образом разрабатывается корневой
POM, в котором описаны модули и с помощью которого можно скомпилировать все
модули одной командой. Все POM-ы наследуют некий базовый супер-POM по
умолчанию. В супер-POM определены source-каталоги и плагины по умолчанию.
Таким образом, структура проекта представляет собой иерархию модулей
и подмодулей иногда с достаточной большой глубиной.
9.
Тэг <build /> не обязательный т. к. существуют значения по умолчанию. Этот разделсодержит информацию по самой сборке: где находятся исходные файлы, где ресурсы, какие плагины
используются.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Также добавляется информация, которая не используется самим мавеном, но нужна для
программиста, чтобы понять, о чём этот проект:
название проекта:
<name>some-name</name>
описание проекта
<description>Description of project functionallity</description>
сайт проекта:
<url>http://www.example.com</url>
10.
Жизненный цикл проектаЖизненным циклом называется вся совокупность операций
над проектом от инициализации сборки до развёртывания.
В процессе прохождения жизненного цикла выполняются
определённые операции над проектом. Жизненный цикл разделён
на фазы.
Каждая фаза подразумевает перевод проекта в новое
состояние в результате её прохождения и появление новых
артефактов.
При выполнении определенной фазы автоматически
последовательно выполняются все предыдущие фазы (те фазы от
которых зависит выполняемая), на каждой фазе производится
вызов соответствующего плагина.
К каждой фазе может быть привязан ноль или более
различных
плагинов.
По
умолчанию,
набор
фаз
с
привязанными плагинами стандартен и зависит от типа артефакта
проекта.
11.
Основные Фазаclean – очистка артефактов, созданных в процессе предыдущих сборок.
validate – проверка проекта на соответствие заданной конфигурации, а также
проверка доступности всей необходимой информации.
compile – компиляция исходного кода.
test – тестирование скомпилированного кода с использованием
сконфигурированного тестового движка (например, JUnit).
package – упаковка скомпилированного кода в формат поставки, например в
JAR.
integration-test – обработка и поставка упакованного пакета в окружение (на
систему), обеспечивающее возможность запуска интеграционных тестов
verify – проверка целостности пакета и его соответствия критериям качества
install – инсталляция пакета в локальный репозиторий для его дальнейшего
использования в качестве зависимости в других локальных пакетах и проектах
site – генерация site-документации для проекта (опциональная фаза)
deploy – поставка пакета на интеграционное или релизное окружение,
включая также его копирование в удалённый репозиторий, где он доступен для
других разработчиков и прочих проектов
12.
Прочие важные понятияArtifact – корневой проект или модуль, определяющий единицу сборки и
ассоциированный с файлом pom.xml
Атрибуты: artifactId, groupId, version, name, …
Module – обычно дочерний подпроект (артефакт)
Parent – артефакт верхнего уровня по отношению к данному
Plug-in – артефакт, ответственный за выполнение различных фаз и специфических
операций (обычно сторонний, загружаемый из глобального/удалённого
репозитория)
Dependency – описание зависимости данного артефакта от другого (локального или
удалённого)
Property – именованная константа, значение которой используется обычно
многократно в рамках данного и дочерних артефактов
Build – секция, задающая конфигурацию сборки артефакта
Default Goal – фаза сборки по умолчанию
Resource – указатель местоположения файлов-ресурсов в рамках данного и
дочерних артефактов