Maven - Краткое руководство
Что такое Maven?
Maven - это инструмент для управления проектами и понимания, который предоставляет разработчикам полную структуру жизненного цикла сборки. Команда разработчиков может автоматизировать инфраструктуру сборки проекта практически в кратчайшие сроки, поскольку Maven использует стандартную структуру каталогов и жизненный цикл сборки по умолчанию.
В случае создания среды с несколькими командами разработчиков Maven может настроить работу в соответствии со стандартами за очень короткое время. Поскольку большинство настроек проекта просты и допускают повторное использование, Maven упрощает жизнь разработчикам, создавая отчеты, проверяя, создавая и тестируя настройки автоматизации.
Maven предоставляет разработчикам способы управлять следующим:
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- Список рассылки
Подводя итог, Maven упрощает и стандартизирует процесс сборки проекта. Он легко справляется с компиляцией, распространением, документацией, совместной работой в команде и другими задачами. Maven увеличивает возможность повторного использования и берет на себя большинство задач, связанных со сборкой.
Maven Evolution
Первоначально Maven был разработан для упрощения процессов сборки в проекте Jakarta Turbine. Было несколько проектов, и каждый проект содержал немного разные файлы сборки ANT. JAR были проверены в CVS.
Затем группа Apache разработала Maven которые могут создавать несколько проектов вместе, публиковать информацию о проектах, развертывать проекты, совместно использовать JAR в нескольких проектах и помогать в совместной работе команд.
Задача
Основная цель Maven - предоставить разработчику следующее:
Комплексная модель для проектов, которую можно использовать повторно, поддерживать и легче понимать.
Плагины или инструменты, которые взаимодействуют с этой декларативной моделью.
Структура и содержимое проекта Maven объявляются в XML-файле pom.xml, называемом объектной моделью проекта (POM), который является основной единицей всей системы Maven. В следующих главах мы подробно объясним POM.
Соглашение важнее конфигурации
Maven использует Convention над Configuration, что означает, что разработчикам не нужно создавать процесс сборки самостоятельно.
Разработчикам не нужно упоминать каждую деталь конфигурации. Maven обеспечивает разумное поведение по умолчанию для проектов. Когда создается проект Maven, Maven создает структуру проекта по умолчанию. От разработчика требуется только разместить файлы соответствующим образом, и ему / ей не нужно определять какую-либо конфигурацию в pom.xml.
В качестве примера в следующей таблице показаны значения по умолчанию для файлов исходного кода проекта, файлов ресурсов и других конфигураций. Предполагая,${basedir} обозначает местоположение проекта -
Вещь | По умолчанию |
---|---|
исходный код | $ {basedir} / src / main / java |
Ресурсы | $ {basedir} / src / main / resources |
Тесты | $ {basedir} / src / test |
Соответствующий байт-код | $ {basedir} / цель |
распространяемый JAR | $ {basedir} / target / classes |
Для создания проекта Maven предоставляет разработчикам возможность указать цели жизненного цикла и зависимости проекта (которые зависят от возможностей плагина Maven и его соглашений по умолчанию). Большая часть задач, связанных с управлением проектами и сборкой, выполняется плагинами Maven.
Разработчики могут создавать любой проект Maven без необходимости понимать, как работают отдельные плагины. Мы подробно обсудим плагины Maven в следующих главах.
Особенности Maven
Простая настройка проекта в соответствии с лучшими практиками.
Последовательное использование во всех проектах.
Управление зависимостями, включая автоматическое обновление.
Большой и постоянно растущий репозиторий библиотек.
Расширяемый, с возможностью легко писать плагины на Java или языках сценариев.
Мгновенный доступ к новым функциям с небольшой дополнительной настройкой или без нее.
Model-based builds - Maven может встраивать любое количество проектов в предопределенные типы вывода, такие как jar, war, metadata.
Coherent site of project information - Используя те же метаданные, что и в процессе сборки, maven может создавать веб-сайт и PDF-файл, включая полную документацию.
Release management and distribution publication - Без дополнительной настройки maven интегрируется с вашей системой управления версиями, такой как CVS, и управляет выпуском проекта.
Backward Compatibility- Вы можете легко перенести несколько модулей проекта в Maven 3 из более старых версий Maven. Он также может поддерживать более старые версии.
Automatic parent versioning - Нет необходимости указывать родителя в подмодуле для обслуживания.
Parallel builds- Он анализирует график зависимостей проекта и позволяет создавать модули расписания параллельно. Используя это, вы можете добиться повышения производительности на 20-50%.
Better Error and Integrity Reporting - В Maven улучшен отчет об ошибках, и он предоставляет вам ссылку на вики-страницу Maven, где вы получите полное описание ошибки.
Maven - это инструмент на основе Java, поэтому самое первое требование - установить JDK на вашем компьютере.
Системные требования
JDK | 1.7 или выше. |
---|---|
объем памяти | Нет минимальных требований. |
Дисковое пространство | Нет минимальных требований. |
Операционная система | Нет минимальных требований. |
Шаг 1. Проверьте установку Java на вашем компьютере.
Откройте консоль и выполните следующее java команда.
Операционные системы | Задача | Команда |
---|---|---|
Windows | Открыть командную консоль | c: \> java -версия |
Linux | Открыть командный терминал | $ java -версия |
Mac | Открыть Терминал | машина: ~ joseph $ java -version |
Давайте проверим вывод для всех операционных систем -
Операционные системы | Вывод |
---|---|
Windows | версия java "1.7.0_60" Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 24.60-b09, смешанный режим) |
Linux | версия java "1.7.0_60" Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 24.60-b09, смешанный режим) |
Mac | версия java "1.7.0_60" Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 24.60-b09, смешанный режим) |
Если у вас не установлена Java, установите Java Software Development Kit (SDK) из https://www.oracle.com/technetwork/java/javase/downloads/index.html. Мы предполагаем, что Java 1.7.0.60 является установленной версией этого руководства.
Шаг 2 - Установите среду JAVA
Установить JAVA_HOMEпеременная среды, указывающая на расположение базового каталога, в котором установлена Java на вашем компьютере. Например -
Операционные системы | Вывод |
---|---|
Windows | Установите для переменной среды JAVA_HOME значение C: \ Program Files \ Java \ jdk1.7.0_60 |
Linux | экспорт JAVA_HOME = / usr / local / java-current |
Mac | экспорт JAVA_HOME = / Библиотека / Java / Home |
Добавьте расположение компилятора Java в системный путь.
Операционные системы | Вывод |
---|---|
Windows | Добавьте строку «; C: \ Program Files \ Java \ jdk1.7.0.60 \ bin» в конец системной переменной Path. |
Linux | экспорт PATH =$PATH:$JAVA_HOME / bin / |
Mac | не требуется |
Проверьте установку Java с помощью java -version как описано выше.
Шаг 3 - Загрузите архив Maven
Загрузите Maven 2.2.1 из https://maven.apache.org/download.cgi.
Операционные системы | Имя архива |
---|---|
Windows | apache-maven-3.3.1-bin.zip |
Linux | apache-maven-3.3.1-bin.tar.gz |
Mac | apache-maven-3.3.1-bin.tar.gz |
Шаг 4 - Извлеките архив Maven
Распакуйте архив в каталог, в который вы хотите установить Maven 3.3.1. Подкаталог apache-maven-3.3.1 будет создан из архива.
Операционные системы | Расположение (может отличаться в зависимости от вашей установки) |
---|---|
Windows | C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.1 |
Linux | / USR / местные / apache-maven |
Mac | / USR / местные / apache-maven |
Шаг 5 - Установите переменные среды Maven
Добавьте M2_HOME, M2, MAVEN_OPTS в переменные среды.
Операционные системы | Вывод |
---|---|
Windows | Установите переменные среды, используя системные свойства. M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.1 M2 =% M2_HOME% \ bin MAVEN_OPTS = -Xms256m -Xmx512m |
Linux | Откройте командный терминал и установите переменные среды. экспорт M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 экспорт M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m |
Mac | Откройте командный терминал и установите переменные среды. экспорт M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 экспорт M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m |
Шаг 6 - Добавьте расположение каталога Maven bin в системный путь
Теперь добавьте переменную M2 в системный путь.
Операционные системы | Вывод |
---|---|
Windows | Добавьте строку% M2% в конец системной переменной Path. |
Linux | экспорт PATH =$M2:$ПУТЬ |
Mac | экспорт PATH =$M2:$ПУТЬ |
Шаг 7 - Проверьте установку Maven
Теперь откройте консоль и выполните следующее mvn команда.
Операционные системы | Задача | Команда |
---|---|---|
Windows | Открыть командную консоль | c: \> mvn --version |
Linux | Открыть командный терминал | $ mvn --version |
Mac | Открыть Терминал | машина: ~ joseph $ mvn --version |
Наконец, проверьте вывод вышеуказанных команд, который должен быть следующим:
Операционные системы | Вывод |
---|---|
Windows | Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01 + 0530) Версия Java: 1.7.0_60 Домашняя страница Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre |
Linux | Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01 + 0530) Версия Java: 1.7.0_60 Домашняя страница Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre |
Mac | Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01 + 0530) Версия Java: 1.7.0_60 Домашняя страница Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre |
POM означает объектную модель проекта. Это фундаментальная единица работы в Maven. Это XML-файл, который находится в базовом каталоге проекта как pom.xml.
POM содержит информацию о проекте и различные детали конфигурации, используемые Maven для создания проекта (ов).
POM также содержит цели и плагины. При выполнении задачи или цели Maven ищет POM в текущем каталоге. Он считывает POM, получает необходимую информацию о конфигурации и затем выполняет цель. Некоторые конфигурации, которые могут быть указаны в POM, следующие:
- зависимости проекта
- plugins
- goals
- строить профили
- версия проекта
- developers
- список рассылки
Перед созданием POM мы должны сначала определиться с проектом group (groupId), его name (artifactId) и его версию, поскольку эти атрибуты помогают однозначно идентифицировать проект в репозитории.
Пример POM
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
Следует отметить, что для каждого проекта должен быть один файл POM.
Все файлы POM требуют project элемент и три обязательных поля: groupId, artifactId, version.
Обозначение проектов в репозитории groupId:artifactId:version.
Минимальные требования для ПОМ -
Sr.No. | Узел и описание |
---|---|
1 | Project root Это корневой тег проекта. Вам необходимо указать базовые настройки схемы, такие как схема apache и спецификация w3.org. |
2 | Model version Версия модели должна быть 4.0.0. |
3 | groupId Это идентификатор группы проекта. Это обычно уникально для организации или проекта. Например, у банковской группы com.company.bank есть все проекты, связанные с банками. |
4 | artifactId Это идентификатор проекта. Обычно это название проекта. Например, потребительский банкинг. Наряду с groupId, artifactId определяет расположение артефакта в репозитории. |
5 | version Это версия проекта. Наряду с groupId он используется в репозитории артефактов для отделения версий друг от друга. Например - com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Супер ПОМ
Super POM - это POM Maven по умолчанию. Все POM наследуются от родителя или по умолчанию (несмотря на то, что они явно определены или нет). Этот базовый ПОМ известен какSuper POM, и содержит значения, унаследованные по умолчанию.
Maven использует эффективный POM (конфигурация из super pom плюс конфигурация проекта) для достижения соответствующей цели. Это помогает разработчикам указать минимальные детали конфигурации в его / ее pom.xml. Хотя конфигурации можно легко переопределить.
Простой способ просмотреть конфигурации супер POM по умолчанию - это выполнить следующую команду: mvn help:effective-pom
Создайте pom.xml в любом каталоге на вашем компьютере. Используйте содержимое вышеупомянутого примера pom.
В примере ниже мы создали pom.xml в папке C: \ MVN \ project.
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvn команда.
C:\MVN\project>mvn help:effective-pom
Maven начнет обработку и отобразит файл Effective-pom.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO] task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]
.....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
Эффективный POM отображается как результат в консоли после применения наследования, интерполяции и профилей.
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ==============================================-->
<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/
2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
<outputDirectory>C:\MVN\project\target\classes</outputDirectory>
<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:\MVN\project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:\MVN\project\src\test\resources</directory>
</testResource>
</testResources>
<directory>C:\MVN\project\target</directory>
<finalName>project-1.0</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin< /artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin< /artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-8</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<reporting>
<outputDirectory>C:\MVN\project\target/site</outputDirectory>
</reporting>
</project>
В приведенном выше pom.xml вы можете увидеть структуру исходных папок проекта по умолчанию, выходной каталог, необходимые плагины, репозитории, каталог отчетов, которые Maven будет использовать при выполнении желаемых целей.
Maven pom.xml также не требуется писать вручную. Maven предоставляет множество подключаемых модулей архетипа для создания проектов, которые по порядку создают структуру проекта и pom.xml.
Что такое жизненный цикл сборки?
Жизненный цикл сборки - это четко определенная последовательность этапов, которые определяют порядок, в котором должны выполняться цели. Здесь фаза представляет собой этап жизненного цикла. Например, типичныйMaven Build Lifecycle состоит из следующей последовательности фаз.
Фаза | Ручки | Описание |
---|---|---|
подготовить ресурсы | копирование ресурсов | На этом этапе можно настроить копирование ресурсов. |
подтверждать | Проверка информации | Проверяет правильность проекта и доступность всей необходимой информации. |
компилировать | сборник | На этом этапе выполняется компиляция исходного кода. |
Контрольная работа | Тестирование | Проверяет скомпилированный исходный код, подходящий для среды тестирования. |
пакет | упаковка | На этом этапе создается пакет JAR / WAR, как указано в пакете в POM.xml. |
установить | установка | На этом этапе пакет устанавливается в локальный / удаленный репозиторий maven. |
Развернуть | Развертывание | Копирует окончательный пакет в удаленный репозиторий. |
Всегда есть pre и post этапы регистрации goals, который должен выполняться до или после определенного этапа.
Когда Maven начинает сборку проекта, он проходит через определенную последовательность этапов и выполняет цели, которые регистрируются для каждой фазы.
Maven имеет следующие три стандартных жизненных цикла:
- clean
- по умолчанию (или сборка)
- site
А goalпредставляет собой конкретную задачу, которая способствует созданию и управлению проектом. Он может быть привязан к нулю или более фазам сборки. Цель, не привязанная к какой-либо фазе сборки, может быть выполнена вне жизненного цикла сборки путем прямого вызова.
Порядок выполнения зависит от порядка, в котором вызываются цель (цели) и этап (ы) построения. Например, рассмотрим команду ниже. Вclean и package аргументы - это этапы построения, в то время как dependency:copy-dependencies это цель.
mvn clean dependency:copy-dependencies package
Здесь сначала выполняется чистая фаза, а затемdependency:copy-dependencies goal, и, наконец , будет выполнена фаза пакета .
Чистый жизненный цикл
Когда мы выполняем команду mvn post-clean , Maven вызывает чистый жизненный цикл, состоящий из следующих фаз.
- pre-clean
- clean
- post-clean
Maven чистый гол (чистый: чистый) связан с чистой фазы в чистом жизненном цикле. этоclean:cleangoalудаляет вывод сборки, удаляя каталог сборки. Таким образом, при выполнении команды mvn clean Maven удаляет каталог сборки.
Мы можем настроить это поведение, указав цели на любой из вышеуказанных фаз чистого жизненного цикла.
В следующем примере мы присоединим maven-antrun-plugin: run goal к этапам предварительной очистки, очистки и пост-очистки. Это позволит нам отображать текстовые сообщения, отображающие фазы чистого жизненного цикла.
Мы создали pom.xml в папке C: \ MVN \ project.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvn команда.
C:\MVN\project>mvn post-clean
Maven начнет обработку и отображение всех фаз чистого жизненного цикла.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
Вы можете попробовать тюнинг mvn clean команда, которая отобразит pre-cleanи чисто. Ничего не будет исполнено заpost-clean фаза.
Жизненный цикл по умолчанию (или сборки)
Это основной жизненный цикл Maven, который используется для создания приложения. Он состоит из 21 фазы.
Sr.No. | Фаза жизненного цикла и описание |
---|---|
1 | validate Проверяет правильность проекта и доступность всей необходимой информации для завершения процесса сборки. |
2 | initialize Инициализирует состояние сборки, например устанавливает свойства. |
3 | generate-sources Создайте любой исходный код для включения в фазу компиляции. |
4 | process-sources Обработайте исходный код, например, отфильтруйте любое значение. |
5 | generate-resources Создайте ресурсы, которые будут включены в пакет. |
6 | process-resources Скопируйте и обработайте ресурсы в целевой каталог, готовые к этапу упаковки. |
7 | compile Скомпилируйте исходный код проекта. |
8 | process-classes Постобработка сгенерированных файлов из компиляции, например, для улучшения / оптимизации байт-кода в классах Java. |
9 | generate-test-sources Сгенерируйте любой тестовый исходный код для включения в фазу компиляции. |
10 | process-test-sources Обработайте исходный код теста, например, отфильтруйте любые значения. |
11 | test-compile Скомпилируйте исходный код теста в целевой каталог теста. |
12 | process-test-classes Обработать сгенерированные файлы из компиляции файла тестового кода. |
13 | test Запускайте тесты, используя подходящую среду модульного тестирования (например, Junit). |
14 | prepare-package Выполните все операции, необходимые для подготовки упаковки перед самой упаковкой. |
15 | package Возьмите скомпилированный код и упакуйте его в распространяемый формат, такой как файл JAR, WAR или EAR. |
16 | pre-integration-test Выполните действия, необходимые перед выполнением интеграционных тестов. Например, настройка необходимой среды. |
17 | integration-test При необходимости обработайте и разверните пакет в среде, в которой можно выполнять интеграционные тесты. |
18 | post-integration-test Выполните действия, необходимые после выполнения интеграционных тестов. Например, очистка окружающей среды. |
19 | verify Проведите любые проверки, чтобы убедиться, что пакет действителен и соответствует критериям качества. |
20 | install Установите пакет в локальный репозиторий, который можно использовать как зависимость в других проектах локально. |
21 год | deploy Копирует окончательный пакет в удаленный репозиторий для совместного использования с другими разработчиками и проектами. |
Есть несколько важных концепций, связанных с жизненными циклами Maven, о которых стоит упомянуть:
Когда фаза вызывается через команду Maven, например mvn compile, будут выполняться только фазы до этой фазы включительно.
Различные цели maven будут привязаны к разным фазам жизненного цикла Maven в зависимости от типа упаковки (JAR / WAR / EAR).
В следующем примере мы присоединим maven-antrun-plugin: run target к нескольким этапам жизненного цикла сборки. Это позволит нам отображать текстовые сообщения, отображающие фазы жизненного цикла.
Мы обновили pom.xml в папке C: \ MVN \ project.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvn команда.
C:\MVN\project>mvn compile
Maven начнет обработку и отобразит этапы жизненного цикла сборки вплоть до фазы компиляции.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-
Жизненный цикл сайта
Плагин Maven Site обычно используется для создания новой документации для создания отчетов, развертывания сайта и т. Д. Он имеет следующие этапы:
- pre-site
- site
- post-site
- site-deploy
В следующем примере мы прикрепим maven-antrun-plugin:runцель на всех этапах жизненного цикла сайта. Это позволит нам отображать текстовые сообщения, отображающие фазы жизненного цикла.
Мы обновили pom.xml в папке C: \ MVN \ project.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvn команда.
C:\MVN\project>mvn site
Maven начнет обработку и отображение этапов жизненного цикла сайта до фазы сайта.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------
Что такое профиль сборки?
Профиль сборки - это набор значений конфигурации, которые можно использовать для установки или переопределения значений по умолчанию сборки Maven. Используя профиль сборки, вы можете настроить сборку для различных сред, таких как «Производство» и «Среды разработки».
Профили указываются в файле pom.xml с помощью его элементов activeProfiles / profiles и запускаются различными способами. Профили изменяют POM во время сборки и используются для задания параметров различных целевых сред (например, путь к серверу базы данных в средах разработки, тестирования и производства).
Типы профиля сборки
Профили сборки бывают трех типов.
Тип | Где это определяется |
---|---|
На проект | Определяется в файле POM проекта, pom.xml |
На пользователя | Определен в XML-файле настроек Maven (% USER_HOME% /. M2 / settings.xml) |
Глобальный | Определено в XML-файле глобальных настроек Maven (% M2_HOME% / conf / settings.xml) |
Активация профиля
Профиль сборки Maven можно активировать различными способами.
- Явно используя ввод командной консоли.
- Через настройки maven.
- На основе переменных среды (пользовательские / системные переменные).
- Настройки ОС (например, семейство Windows).
- Присутствующие / отсутствующие файлы.
Примеры активации профиля
Давайте предположим следующую структуру каталогов вашего проекта -
Теперь под src/main/resources, есть три файла для конкретной среды -
Sr.No. | Имя и описание файла |
---|---|
1 | env.properties используется конфигурация по умолчанию, если профиль не указан. |
2 | env.test.properties тестовая конфигурация при использовании тестового профиля. |
3 | env.prod.properties конфигурация производства при использовании профиля prod. |
Явная активация профиля
В следующем примере мы подключим maven-antrun-plugin: run goal для тестирования фазы. Это позволит нам отображать текстовые сообщения для разных профилей. Мы будем использовать pom.xml для определения различных профилей и активируем профиль в командной консоли с помощью команды maven.
Предположим, мы создали следующий файл pom.xml в папке C: \ MVN \ project.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Using env.test.properties</echo>
<copy file="src/main/resources/env.test.properties"
tofile="${project.build.outputDirectory}
/env.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvnкоманда. Передайте имя профиля в качестве аргумента с помощью опции -P.
C:\MVN\project>mvn test -Ptest
Maven начнет обработку и отображение результатов профиля тестовой сборки.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------
Теперь в качестве упражнения вы можете выполнить следующие шаги -
Добавьте еще один элемент профиля к элементу профилей файла pom.xml (скопируйте существующий элемент профиля и вставьте его в конец элементов профиля).
Обновите идентификатор этого элемента профиля с тестового до нормального.
Обновите раздел задачи, чтобы отобразить env.properties и скопируйте env.properties в целевой каталог.
Снова повторите три вышеуказанных шага, обновите id до prod и раздел задач для env.prod.properties.
Это все. Теперь у вас есть три готовых профиля сборки (normal / test / prod).
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvnкоманды. Передайте имена профилей в качестве аргумента с помощью опции -P.
C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod
Проверьте результат сборки, чтобы увидеть разницу.
Активация профиля через настройки Maven
Откройте Maven settings.xml файл доступен в каталоге% USER_HOME% /. m2, где %USER_HOME%представляет домашний каталог пользователя. Если файла settings.xml нет, создайте новый.
Добавьте тестовый профиль в качестве активного профиля с помощью узла активных профилей, как показано ниже в примере.
<settings xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>maven.dev.snaponglobal.com</id>
<name>Internal Artifactory Maven repository</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvnкоманда. Не передавайте имя профиля с помощью опции -P. Maven отобразит результат того, что тестовый профиль является активным.
C:\MVN\project>mvn test
Активация профиля через переменные среды
Теперь удалите активный профиль из maven settings.xml и обновите тестовый профиль, указанный в pom.xml. Добавьте элемент активации к элементу профиля, как показано ниже.
Тестовый профиль сработает, когда системное свойство «env» будет указано со значением «test». Создайте переменную среды «env» и установите ее значение как «test».
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
</profile>
Откроем командную консоль, перейдем в папку, содержащую pom.xml, и выполним следующее mvn команда.
C:\MVN\project>mvn test
Активация профиля через операционную систему
Элемент активации для включения деталей операционной системы, как показано ниже. Этот тестовый профиль сработает, если в системе установлена Windows XP.
<profile>
<id>test</id>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvnкоманды. Не передавайте имя профиля с помощью опции -P. Maven отобразит результат того, что тестовый профиль является активным.
C:\MVN\project>mvn test
Активация профиля через существующий / отсутствующий файл
Теперь элемент активации, чтобы включить детали ОС, как показано ниже. Тестовый профиль сработает, когдаtarget/generated-sources/axistools/wsdl2java/com/companyname/group пропал, отсутствует.
<profile>
<id>test</id>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
</file>
</activation>
</profile>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvnкоманды. Не передавайте имя профиля с помощью опции -P. Maven отобразит результат того, что тестовый профиль является активным.
C:\MVN\project>mvn test
Что такое репозиторий Maven?
В терминологии Maven репозиторий - это каталог, в котором хранятся все jar-файлы проекта, jar-файлы библиотеки, плагины или любые другие артефакты проекта, и Maven может легко их использовать.
Репозиторий Maven бывает трех типов. Следующая иллюстрация дает представление об этих трех типах.
- local
- central
- remote
Локальный репозиторий
Локальный репозиторий Maven - это папка на вашем компьютере. Он создается, когда вы запускаете любую команду maven в первый раз.
В локальном репозитории Maven хранятся все зависимости вашего проекта (jar-файлы библиотеки, jar-файлы плагинов и т. Д.). Когда вы запускаете сборку Maven, Maven автоматически загружает все jar-файлы зависимостей в локальный репозиторий. Это помогает избежать ссылок на зависимости, хранящиеся на удаленном компьютере, при каждой сборке проекта.
Локальный репозиторий Maven по умолчанию создается Maven в каталоге% USER_HOME%. Чтобы изменить расположение по умолчанию, укажите другой путь в файле Maven settings.xml, доступном в каталоге% M2_HOME% \ conf.
<settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>
Когда вы запускаете команду Maven, Maven загружает зависимости по вашему пользовательскому пути.
Центральный репозиторий
Центральный репозиторий Maven - это репозиторий, предоставленный сообществом Maven. Он содержит большое количество часто используемых библиотек.
Когда Maven не находит зависимости в локальном репозитории, он начинает поиск в центральном репозитории, используя следующий URL-адрес - https://repo1.maven.org/maven2/
Ключевые концепции Центрального репозитория следующие:
- Этот репозиторий управляется сообществом Maven.
- Настраивать не требуется.
- Для поиска требуется доступ в Интернет.
Для просмотра содержимого центрального репозитория maven сообщество maven предоставило URL-адрес - https://search.maven.org/#browse. Используя эту библиотеку, разработчик может искать все доступные библиотеки в центральном репозитории.
Удаленный репозиторий
Иногда Maven также не находит упомянутую зависимость в центральном репозитории. Затем он останавливает процесс сборки и выводит сообщение об ошибке на консоль. Чтобы предотвратить такую ситуацию, Maven предоставляет концепциюRemote Repository, который представляет собой собственный репозиторий разработчика, содержащий необходимые библиотеки или другие jar-файлы проекта.
Например, используя нижеупомянутый POM.xml, Maven загрузит зависимость (недоступную в центральном репозитории) из удаленных репозиториев, упомянутых в том же pom.xml.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.companyname.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
</project>
Последовательность поиска зависимостей Maven
Когда мы выполняем команды сборки Maven, Maven начинает искать библиотеки зависимостей в следующей последовательности:
Step 1 - Поиск зависимости в локальном репозитории, если не найден, перейдите к шагу 2, иначе выполните дальнейшую обработку.
Step 2 - Поиск зависимости в центральном репозитории, если не найден и удаленный репозиторий / репозитории упомянуты, переходите к шагу 4. В противном случае он загружается в локальный репозиторий для дальнейшего использования.
Step 3 - Если удаленный репозиторий не был упомянут, Maven просто останавливает обработку и выдает ошибку (Невозможно найти зависимость).
Step 4- Поиск зависимости в удаленном репозитории или репозиториях, если она найдена, она загружается в локальный репозиторий для дальнейшего использования. В противном случае Maven прекращает обработку и выдает ошибку (не удается найти зависимость).
Что такое плагины Maven?
Maven на самом деле представляет собой среду выполнения плагинов, в которой каждая задача фактически выполняется плагинами. Плагины Maven обычно используются для -
- создать файл jar
- создать военный файл
- компилировать файлы кода
- модульное тестирование кода
- создать проектную документацию
- создавать отчеты по проекту
Плагин обычно предоставляет набор целей, которые могут быть выполнены с использованием следующего синтаксиса:
mvn [plugin-name]:[goal-name]
Например, проект Java можно скомпилировать с целью компиляции maven-compiler-plugin, выполнив следующую команду.
mvn compiler:compile
Типы плагинов
Maven предоставил следующие два типа плагинов:
Sr.No. | Тип и описание |
---|---|
1 | Build plugins Они выполняются в процессе сборки и должны быть настроены в элементе <build /> файла pom.xml. |
2 | Reporting plugins Они выполняются в процессе создания сайта и должны быть настроены в элементе <reporting /> файла pom.xml. |
Ниже приведен список нескольких распространенных плагинов -
Sr.No. | Плагин и описание |
---|---|
1 | clean Очищает цель после сборки. Удаляет целевой каталог. |
2 | compiler Компилирует исходные файлы Java. |
3 | surefire Запускает модульные тесты JUnit. Создает отчеты об испытаниях. |
4 | jar Создает файл JAR из текущего проекта. |
5 | war Создает файл WAR из текущего проекта. |
6 | javadoc Создает Javadoc для проекта. |
7 | antrun Выполняет набор задач муравьев из любой упомянутой фазы сборки. |
Example
Мы использовали maven-antrun-pluginв наших примерах широко используется для печати данных на консоли. См. Главу "Профили сборки". Давайте разберемся с этим лучше и создадим pom.xml в папке C: \ MVN \ project.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Затем откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующее mvn команда.
C:\MVN\project>mvn clean
Maven начнет обработку и отображение чистой фазы жизненного цикла чистой.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
Приведенный выше пример иллюстрирует следующие ключевые концепции -
Плагины указываются в pom.xml с помощью элемента plugins.
У каждого плагина может быть несколько целей.
Вы можете определить фазу, с которой плагин должен начать свою обработку, используя свой элемент фазы. Мы использовалиclean фаза.
Вы можете настроить выполнение задач, привязав их к целям плагина. Мы связалиecho задача с runцель maven-antrun-plugin .
Затем Maven загрузит плагин, если он недоступен в локальном репозитории, и начнет его обработку.
Maven использует archetypeплагины для создания проектов. Чтобы создать простое Java-приложение, мы воспользуемся плагином maven-archetype-quickstart. В приведенном ниже примере мы создадим проект Java-приложения на основе maven в папке C: \ MVN.
Откроем командную консоль, перейдем в каталог C: \ MVN и выполним следующее mvn команда.
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.bank
-DartifactId = consumerBanking
-DarchetypeArtifactId = maven-archetype-quickstart
-DinteractiveMode = false
Maven начнет обработку и создаст полную структуру проекта Java-приложения.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.bank
[INFO] Parameter: packageName, Value: com.companyname.bank
[INFO] Parameter: package, Value: com.companyname.bank
[INFO] Parameter: artifactId, Value: consumerBanking
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\consumerBanking
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 14 seconds
[INFO] Finished at: Tue Jul 10 15:38:58 IST 2012
[INFO] Final Memory: 21M/124M
[INFO] ------------------------------------------------------------------
Теперь перейдите в каталог C: / MVN. Вы увидите созданный проект Java-приложения с именем Customer Banking (как указано в artifactId). Maven использует стандартный макет каталогов, как показано ниже -
Используя приведенный выше пример, мы можем понять следующие ключевые концепции:
Sr.No. | Структура и описание папки |
---|---|
1 | consumerBanking содержит папку src и pom.xml |
2 | src/main/java содержит файлы кода Java в структуре пакета (com / companyName / bank). |
3 | src/main/test содержит тестовые файлы кода Java в структуре пакета (com / companyName / bank). |
4 | src/main/resources он содержит файлы изображений / свойств (в приведенном выше примере нам нужно создать эту структуру вручную). |
Если вы заметите, вы обнаружите, что Maven также создал образец файла исходного кода Java и файл теста Java. Откройте папку C: \ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bank, вы увидите App.java.
package com.companyname.bank;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ){
System.out.println( "Hello World!" );
}
}
Откройте папку C: \ MVN \ consumerBanking \ src \ test \ java \ com \ companyname \ bank, чтобы увидеть AppTest.java.
package com.companyname.bank;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
Разработчики должны размещать свои файлы, как указано в таблице выше, и Maven обрабатывает все сложности, связанные со сборкой.
В следующей главе мы обсудим, как собрать и протестировать проект с помощью maven Build and Test Project.
В главе «Создание проекта» мы узнали, как создать приложение Java с помощью Maven. Теперь посмотрим, как собрать и протестировать приложение.
Перейдите в каталог C: / MVN, в котором вы создали свое Java-приложение. открытоconsumerBankingпапка. Вы увидитеPOM.xml файл со следующим содержимым.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
Здесь вы можете видеть, что Maven уже добавил Junit в качестве тестовой среды. По умолчанию Maven добавляет исходный файлApp.java и тестовый файл AppTest.java в своей структуре каталогов по умолчанию, как обсуждалось в предыдущей главе.
Откройте командную консоль, перейдите в каталог C: \ MVN \ consumerBanking и выполните следующее mvn команда.
C:\MVN\consumerBanking>mvn clean package
Maven приступит к сборке проекта.
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\consumerBanking\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-----------------------------------------------------
T E S T S
-----------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\consumerBanking\target\
consumerBanking-1.0-SNAPSHOT.jar
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Jul 10 16:52:18 IST 2012
[INFO] Final Memory: 16M/89M
[INFO]-----------------------------------------------
Вы создали свой проект и создали окончательный файл jar, ниже приведены ключевые концепции обучения:
Мы ставим перед maven две цели: сначала очистить целевой каталог (очистить), а затем упаковать вывод сборки проекта как jar (пакет).
Упакованный jar доступен в папке consumerBanking \ target как consumerBanking-1.0-SNAPSHOT.jar.
Отчеты об испытаниях доступны в папке consumerBanking \ target \ surefire-reports.
Maven компилирует файл (ы) исходного кода, а затем проверяет файл (ы) исходного кода.
Затем Maven запускает тестовые примеры.
Наконец, Maven создает пакет.
Теперь откройте командную консоль, перейдите в каталог C: \ MVN \ consumerBanking \ target \ classes и выполните следующую команду java.
>java com.companyname.bank.App
Вы увидите следующий результат -
Hello World!
Добавление исходных файлов Java
Давайте посмотрим, как мы можем добавить дополнительные файлы Java в наш проект. Откройте папку C: \ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bank, создайте в ней класс Util как Util.java.
package com.companyname.bank;
public class Util {
public static void printMessage(String message){
System.out.println(message);
}
}
Обновите класс App, чтобы использовать класс Util.
package com.companyname.bank;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ){
Util.printMessage("Hello World!");
}
}
Теперь откройте командную консоль, перейдите C:\MVN\consumerBanking каталог и выполните следующие mvn команда.
>mvn clean compile
После успешной сборки Maven перейдите в каталог C: \ MVN \ consumerBanking \ target \ classes и выполните следующую команду java.
>java -cp com.companyname.bank.App
Вы увидите следующий результат -
Hello World!
Как вы знаете, Maven осуществляет управление зависимостями, используя концепцию репозиториев. Но что произойдет, если зависимость недоступна ни в одном из удаленных репозиториев и в центральном репозитории? Maven дает ответ на такой сценарий, используя концепциюExternal Dependency.
Например, давайте внесем следующие изменения в проект, созданный в главе «Создание проекта Java».
Добавить lib папку в папку src.
Скопируйте любую банку в папку lib. Мы использовалиldapjdk.jar, которая является вспомогательной библиотекой для операций LDAP.
Теперь наша структура проекта должна выглядеть следующим образом -
Здесь у вас есть собственная библиотека, специфичная для проекта, что является обычным случаем и содержит jar-файлы, которые могут быть недоступны в каком-либо репозитории для загрузки maven. Если ваш код использует эту библиотеку с Maven, то сборка Maven завершится ошибкой, поскольку она не сможет загрузить или обратиться к этой библиотеке на этапе компиляции.
Чтобы справиться с ситуацией, давайте добавим эту внешнюю зависимость в maven pom.xml используя следующий способ.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.bank</groupId>
<artifactId>consumerBanking</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>consumerBanking</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
</project>
Взгляните на второй элемент зависимости под зависимостями в приведенном выше примере, который очищает следующие ключевые понятия о External Dependency.
Внешние зависимости (расположение jar библиотеки) можно настроить в pom.xml так же, как и другие зависимости.
Укажите groupId так же, как имя библиотеки.
Укажите artifactId так же, как имя библиотеки.
Укажите область как систему.
Укажите системный путь относительно местоположения проекта.
Надеюсь, теперь вы понимаете внешние зависимости и сможете указать внешние зависимости в своем проекте Maven.
Этот учебник научит вас создавать документацию приложения за один раз. Итак, начнем, перейдите в каталог C: / MVN, в котором вы создали свой java.consumerBankingприложение, используя примеры, приведенные в предыдущих главах. открытоconsumerBanking папку и выполните следующие mvn команда.
C:\MVN>mvn site
Maven приступит к сборке проекта.
[INFO] Scanning for projects...
[INFO]-----------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [site]
[INFO]-----------------------------------------------
[INFO] [site:site {execution: default-site}]
[INFO] artifact org.apache.maven.skins:maven-default-skin:
checking for updates from central
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Wed Jul 11 18:11:18 IST 2012
[INFO] Final Memory: 23M/148M
[INFO]-----------------------------------------------
Теперь ваша проектная документация готова. Maven создал сайт в целевом каталоге.
Откройте папку C: \ MVN \ consumerBanking \ target \ site. Щелкните index.html, чтобы просмотреть документацию.
Maven создает документацию, используя механизм обработки документации под названием Doxia, который считывает несколько исходных форматов в общую модель документа. Чтобы написать документацию для вашего проекта, вы можете написать свой контент в следующих нескольких часто используемых форматах, которые анализируются Doxia.
Имя формата | Описание | Справка |
---|---|---|
XDoc | Формат документации Maven 1.x | https://jakarta.apache.org/site |
FML | Используется для документов FAQ | https://maven.apache.org |
Maven предоставляет пользователям очень большой список различных типов шаблонов проектов (614 цифр) с использованием концепции Archetype. Maven помогает пользователям быстро запустить новый Java-проект с помощью следующей команды.
mvn archetype:generate
Что такое архетип?
Archetype - это плагин Maven, задача которого - создать структуру проекта в соответствии с его шаблоном. Мы собираемся использовать плагин быстрого старта архетипа, чтобы создать здесь простое Java-приложение.
Использование шаблона проекта
Откроем командную консоль, перейдем в C:\ > MVN каталог и выполните следующие mvn команда.
C:\MVN>mvn archetype:generate
Maven начнет обработку и попросит выбрать нужный архетип.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
...
600: remote −> org.trailsframework:trails-archetype (-)
601: remote −> org.trailsframework:trails-secure-archetype (-)
602: remote −> org.tynamo:tynamo-archetype (-)
603: remote −> org.wicketstuff.scala:wicket-scala-archetype (-)
604: remote −> org.wicketstuff.scala:wicketstuff-scala-archetype
Basic setup for a project that combines Scala and Wicket,
depending on the Wicket-Scala project.
Includes an example Specs test.)
605: remote −> org.wikbook:wikbook.archetype (-)
606: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-glassfish (-)
607: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-spring (-)
608: remote −> org.xwiki.commons:xwiki-commons-component-archetype
(Make it easy to create a maven project for creating XWiki Components.)
609: remote −> org.xwiki.rendering:xwiki-rendering-archetype-macro
(Make it easy to create a maven project for creating XWiki Rendering Macros.)
610: remote −> org.zkoss:zk-archetype-component (The ZK Component archetype)
611: remote −> org.zkoss:zk-archetype-webapp (The ZK wepapp archetype)
612: remote −> ru.circumflex:circumflex-archetype (-)
613: remote −> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
614: remote −> sk.seges.sesam:sesam-annotation-archetype (-)
Choose a number or apply filter
(format: [groupId:]artifactId, case sensitive contains): 203:
Нажмите Enter, чтобы выбрать вариант по умолчанию (203: maven-archetype-quickstart)
Maven запросит конкретную версию архетипа.
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
Нажмите Enter, чтобы выбрать вариант по умолчанию (6: maven-archetype-quickstart: 1.1)
Maven запросит детали проекта. Введите детали проекта, как просили. Нажмите Enter, если указано значение по умолчанию. Вы можете изменить их, введя собственное значение.
Define value for property 'groupId': : com.companyname.insurance
Define value for property 'artifactId': : health
Define value for property 'version': 1.0-SNAPSHOT:
Define value for property 'package': com.companyname.insurance:
Maven запросит подтверждение деталей проекта. Нажмите Enter или Y.
Confirm properties configuration:
groupId: com.companyname.insurance
artifactId: health
version: 1.0-SNAPSHOT
package: com.companyname.insurance
Y:
Теперь Maven начнет создавать структуру проекта и отобразит следующее:
[INFO]-----------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO]-----------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.insurance
[INFO] Parameter: packageName, Value: com.companyname.insurance
[INFO] Parameter: package, Value: com.companyname.insurance
[INFO] Parameter: artifactId, Value: health
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\health
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 4 minutes 12 seconds
[INFO] Finished at: Fri Jul 13 11:10:12 IST 2012
[INFO] Final Memory: 20M/90M
[INFO]-----------------------------------------------
Созданный проект
Теперь перейдите к C:\ > MVNкаталог. Вы увидите созданный проект Java-приложения с именемhealth, который был задан как artifactIdна момент создания проекта. Maven создаст стандартный макет каталога для проекта, как показано ниже -
Создан POM.xml
Maven создает файл POM.xml для проекта, как указано ниже -
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.insurance</groupId>
<artifactId>health</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Создан App.java
Maven создает образец исходного файла Java, App.java для проекта, как указано ниже -
Расположение: C:\ > MVN > health > src > main > java > com > companyname > insurance > App.java.
package com.companyname.insurance;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
Создан AppTest.java
Maven создает образец исходного тестового файла java, AppTest.java для проекта, как указано ниже -
Расположение: C:\ > MVN > health > src > test > java > com > companyname > insurance > AppTest.java.
package com.companyname.insurance;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
Теперь вы можете увидеть мощь Maven. Вы можете создать любой проект, используя одну команду в maven, и начать разработку.
Различные архетипы
Sr.No. | Идентификаторы и описание артефактов архетипа |
---|---|
1 | maven-archetype-archetype Архетип, содержащий образец архетипа. |
2 | maven-archetype-j2ee-simple Архетип, содержащий упрощенный пример приложения J2EE. |
3 | maven-archetype-mojo Архетип, содержащий образец плагина Maven. |
4 | maven-archetype-plugin Архетип, содержащий образец плагина Maven. |
5 | maven-archetype-plugin-site Архетип, содержащий образец сайта плагина Maven. |
6 | maven-archetype-portlet Архетип, содержащий образец портлета JSR-268. |
7 | maven-archetype-quickstart Архетип, содержащий образец проекта Maven. |
8 | maven-archetype-simple Архетип, содержащий простой проект Maven. |
9 | maven-archetype-site Архетип, который содержит образец сайта Maven для демонстрации некоторых поддерживаемых типов документов, таких как APT, XDoc и FML, и демонстрирует, как i18n ваш сайт. |
10 | maven-archetype-site-simple Архетип, содержащий образец сайта Maven. |
11 | maven-archetype-webapp Архетип, содержащий образец проекта Maven Webapp. |
Большое программное приложение обычно состоит из нескольких модулей, и это распространенный сценарий, когда несколько команд работают над разными модулями одного и того же приложения. Например, представьте, что группа работает над внешним интерфейсом приложения как проект app-ui (app-ui.jar: 1.0), и они используют проект службы данных (data-service.jar: 1.0).
Теперь может случиться так, что команда, работающая над сервисом данных, быстро исправляет ошибки или вносит улучшения, и они выпускают библиотеку в удаленный репозиторий почти через день.
Теперь, если команда службы данных загружает новую версию через день, тогда возникнут следующие проблемы:
команда службы данных должна сообщать команде app-ui каждый раз, когда они выпускают обновленный код.
Команда app-ui должна регулярно обновлять свой pom.xml, чтобы получить обновленную версию.
Чтобы справиться с такой ситуацией, SNAPSHOT концепция вступает в игру.
Что такое SNAPSHOT?
SNAPSHOT - это специальная версия, которая указывает текущую разрабатываемую копию. В отличие от обычных версий, Maven проверяет наличие новой версии SNAPSHOT в удаленном репозитории для каждой сборки.
Теперь команда службы данных будет выпускать SNAPSHOT своего обновленного кода каждый раз в репозиторий, например, data-service: 1.0-SNAPSHOT, заменяя более старую банку SNAPSHOT.
Снимок против версии
В случае с версией, если Maven однажды загрузил указанную версию, скажем data-service: 1.0, он никогда не попытается загрузить более новую версию 1.0, доступную в репозитории. Чтобы загрузить обновленный код, необходимо обновить версию службы данных до 1.1.
В случае SNAPSHOT Maven будет автоматически получать последний SNAPSHOT (data-service: 1.0-SNAPSHOT) каждый раз, когда команда app-ui создает свой проект.
app-ui pom.xml
app-ui В проекте используется 1.0-SNAPSHOT data-сервиса.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
служба данных pom.xml
data-service проект выпускает 1.0-SNAPSHOT для каждого незначительного изменения.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Хотя в случае SNAPSHOT Maven автоматически загружает последнюю версию SNAPSHOT ежедневно, вы можете заставить maven загружать последнюю сборку моментального снимка, используя переключатель -U для любой команды maven.
mvn clean package -U
Откроем командную консоль, перейдем в C:\ > MVN > app-ui каталог и выполните следующие mvn команда.
C:\MVN\app-ui>mvn clean package -U
Maven приступит к сборке проекта после загрузки последней SNAPSHOT службы данных.
[INFO] Scanning for projects...
[INFO]--------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO]--------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources
[INFO] [compiler:compile {execution:default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\app-ui\target\
surefire-reports
--------------------------------------------------
T E S T S
--------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO]--------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]--------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO]------------------------------------------------------------------------
Build Automation определяет сценарий, при котором процесс сборки зависимого проекта (ов) запускается после успешного завершения сборки проекта, чтобы гарантировать, что зависимые проекты являются стабильными.
Example
Представьте, что команда разрабатывает проект bus-core-api на котором два других проекта app-web-ui и app-desktop-ui зависимы.
app-web-ui в проекте используется 1.0-SNAPSHOT из bus-core-api проект.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-web-ui</groupId>
<artifactId>app-web-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
app-desktop-ui в проекте используется 1.0-SNAPSHOT из bus-core-api проект.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app_desktop_ui</groupId>
<artifactId>app_desktop_ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>app_desktop_ui</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
bus-core-api проект -
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
Теперь команды app-web-ui и app-desktop-ui проекты требуют, чтобы их процесс сборки запускался всякий раз, когда bus-core-api изменения проекта.
Использование моментального снимка гарантирует, что последний bus-core-api project следует использовать, но для удовлетворения вышеуказанного требования нам нужно сделать что-то дополнительное.
Мы можем действовать двумя способами:
Добавить цель после сборки в bus-core-api pom для запуска app-web-ui и app-desktop-ui строит.
Используйте сервер непрерывной интеграции (CI), такой как Hudson, для автоматического управления автоматизацией сборки.
Использование Maven
Обновить bus-core-api проект pom.xml.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.6</version>
<configuration>
<debug>true</debug>
<pomIncludes>
<pomInclude>app-web-ui/pom.xml</pomInclude>
<pomInclude>app-desktop-ui/pom.xml</pomInclude>
</pomIncludes>
</configuration>
<executions>
<execution>
<id>build</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
</project>
Откроем командную консоль, перейдем в C:\ > MVN > bus-core-api каталог и выполните следующие mvn команда.
>mvn clean package -U
Maven приступит к сборке проекта bus-core-api.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
однажды bus-core-api сборка выполнена успешно, Maven начнет сборку app-web-ui проект.
[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
однажды app-web-ui сборка выполнена успешно, Maven начнет сборку app-desktop-ui проект.
[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
Использование службы непрерывной интеграции с Maven
Разработчики предпочитают использовать CI-сервер. Обновлятьbus-core-api project, каждый раз, когда добавляется новый проект (например, app-mobile-ui), как зависимый проект на bus-core-apiпроект. Hudsion - это инструмент непрерывной интеграции, написанный на java, который находится в контейнере сервлетов, таком как Apache tomcat и сервер приложений Glassfish. Hudson автоматически управляет автоматизацией сборки с помощью управления зависимостями Maven. Следующий снимок определит роль инструмента Хадсона.
Хадсон рассматривает каждую сборку проекта как работу. После того, как код проекта зарегистрирован в SVN (или в любом инструменте управления исходным кодом, сопоставленном с Hudson), Hudson запускает задание сборки, а после его завершения автоматически запускает другие зависимые задания (другие зависимые проекты).
В приведенном выше примере, когда bus-core-uiисходный код обновлен в SVN, Hudson начинает сборку. После успешной сборки Hudson автоматически ищет зависимые проекты и начинает сборку.app-web-ui и app-desktop-ui проекты.
Одна из основных функций Maven - управление зависимостями. Управление зависимостями - сложная задача, когда мы имеем дело с многомодульными проектами (состоящими из сотен модулей / подпроектов). Maven обеспечивает высокую степень контроля для управления такими сценариями.
Обнаружение транзитивных зависимостей
Довольно часто библиотека, скажем, A, зависит от другой библиотеки, скажем B. Если другой проект C хочет использовать A, этот проект также требует использования библиотеки B.
Maven помогает избежать таких требований, чтобы обнаружить все необходимые библиотеки. Maven делает это, читая файлы проекта (pom.xml) зависимостей, выясняя их зависимости и так далее.
Нам нужно только определить прямую зависимость в каждом проекте pom. Все остальное Maven сделает автоматически.
Благодаря транзитивным зависимостям граф включенных библиотек может быстро значительно увеличиться. Случаи могут возникнуть при наличии дублирующих библиотек. Maven предоставляет несколько функций для контроля степени транзитивных зависимостей.
Sr.No. | Особенности и описание |
---|---|
1 | Dependency mediation Определяет, какая версия зависимости должна использоваться при обнаружении нескольких версий артефакта. Если две версии зависимости находятся на одной и той же глубине в дереве зависимостей, будет использоваться первая объявленная зависимость. |
2 | Dependency management Непосредственно укажите версии артефактов, которые будут использоваться, когда они встречаются в транзитивных зависимостях. Например, проект C может включать B как зависимость в свой раздел управления зависимостями и напрямую контролировать, какая версия B должна использоваться, когда на нее когда-либо ссылаются. |
3 | Dependency scope Включает зависимости в соответствии с текущим этапом сборки. |
4 | Excluded dependencies Любую транзитивную зависимость можно исключить с помощью элемента «исключение». Например, A зависит от B, а B зависит от C, тогда A может пометить C как исключенный. |
5 | Optional dependencies Любая транзитивная зависимость может быть помечена как необязательная с помощью элемента «optional». Например, A зависит от B, а B зависит от C. Теперь B пометил C как необязательный. Тогда A не будет использовать C. |
Область зависимости
Обнаружение транзитивных зависимостей может быть ограничено с помощью различных областей зависимости, как указано ниже.
Sr.No. | Объем и описание |
---|---|
1 | compile Эта область указывает, что зависимость доступна в пути к классам проекта. Это область действия по умолчанию. |
2 | provided Эта область указывает, что зависимость должна предоставляться JDK или веб-сервером / контейнером во время выполнения. |
3 | runtime Эта область указывает, что зависимость не требуется для компиляции, но требуется во время выполнения. |
4 | test Эта область указывает, что зависимость доступна только для фаз компиляции и выполнения теста. |
5 | system Эта область указывает, что вы должны указать системный путь. |
6 | import Эта область используется, только если зависимость имеет тип pom. Эта область указывает, что указанный POM следует заменить зависимостями в разделе <dependencyManagement> этого POM. |
Управление зависимостями
Обычно у нас есть набор проектов под общий проект. В таком случае мы можем создать общий pom, имеющий все общие зависимости, а затем сделать этот pom родительским для poms подпроекта. Следующий пример поможет вам понять эту концепцию.
Ниже приведены детали приведенного выше графика зависимостей.
- App-UI-WAR зависит от App-Core-lib и App-Data-lib.
- Корень является родительским для App-Core-lib и App-Data-lib.
- Root определяет Lib1, lib2, Lib3 как зависимости в своем разделе зависимостей.
App-UI-WAR
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-UI-WAR</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
App-Core-lib
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
App-Data-lib
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
Root
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname1</groupId>
<artifactId>Lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname2</groupId>
<artifactId>Lib2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname3</groupId>
<artifactId>Lib3</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
Теперь, когда мы создаем проект App-UI-WAR, Maven обнаружит все зависимости, пройдя по графу зависимостей и собрав приложение.
Из приведенного выше примера мы можем изучить следующие ключевые концепции -
Общие зависимости можно разместить в одном месте, используя концепцию родительского pom. ЗависимостиApp-Data-lib и App-Core-libпроект перечислены в корневом проекте (см. тип упаковки Root. Это POM).
Нет необходимости указывать Lib1, lib2, Lib3 в качестве зависимости в App-UI-WAR. Maven используетTransitive Dependency Mechanism управлять такой деталью.
При разработке проекта обычно процесс развертывания состоит из следующих шагов:
Зарегистрируйте код из всего текущего проекта в SVN (систему контроля версий) или в репозиторий исходного кода и пометьте его.
Загрузите полный исходный код из SVN.
Создайте приложение.
Сохраните выходные данные сборки в файле WAR или EAR в общей сетевой папке.
Получите файл из сети и разверните его на рабочем сайте.
Обновлена документация с указанием даты и номера обновленной версии приложения.
Постановка задачи
Обычно в вышеупомянутый процесс развертывания вовлечено несколько человек. Одна команда может заниматься проверкой кода, другая - сборкой и так далее. Весьма вероятно, что любой шаг может быть пропущен из-за ручных усилий и из-за многокомандной среды. Например, старую сборку нельзя заменить на сетевом компьютере, и группа развертывания снова развернула старую сборку.
Решение
Автоматизируйте процесс развертывания, объединив следующее:
- Maven для сборки и выпуска проектов.
- SubVersion, репозиторий исходного кода, для управления исходным кодом.
- Удаленный менеджер репозитория (Jfrog / Nexus) для управления двоичными файлами проекта.
Обновить проект POM.xml
Мы будем использовать плагин Maven Release для создания автоматизированного процесса выпуска.
Например: bus-core-api, проект POM.xml.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<scm>
<url>http://www.svn.com</url>
<connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
Framework</connection>
<developerConnection>scm:svn:${username}/${password}@localhost:8080:
common_core_api:1101:code</developerConnection>
</scm>
<distributionManagement>
<repository>
<id>Core-API-Java-Release</id>
<name>Release repository</name>
<url>http://localhost:8081/nexus/content/repositories/
Core-Api-Release</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<scmCommentPrefix>[bus-core-api-release-checkin]-<
/scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
</project>
В Pom.xml следующие важные элементы, которые мы использовали:
Sr.No. | Элемент и описание |
---|---|
1 | SCM Настраивает расположение SVN, откуда Maven будет извлекать исходный код. |
2 | Repositories Место, где будет храниться созданный WAR / EAR / JAR или любой другой артефакт после успешной сборки кода. |
3 | Plugin maven-release-plugin настроен для автоматизации процесса развертывания. |
Плагин выпуска Maven
Maven выполняет следующие полезные задачи, используя maven-release-plugin.
mvn release:clean
Он очищает рабочую область, если последний процесс выпуска не был успешным.
mvn release:rollback
Откатите изменения, внесенные в код и конфигурацию рабочей области, в случае, если последний процесс выпуска не был успешным.
mvn release:prepare
Выполняет несколько операций, например -
Проверяет наличие незафиксированных локальных изменений.
Гарантирует отсутствие зависимостей SNAPSHOT.
Изменяет версию приложения и удаляет SNAPSHOT из версии для выпуска.
Обновите файлы pom до SVN.
Запустите тестовые случаи.
Зафиксируйте измененные файлы POM.
Пометьте код в Subversion
Увеличьте номер версии и добавьте SNAPSHOT для будущего выпуска.
Зафиксируйте измененные файлы POM в SVN.
mvn release:perform
Проверяет код, используя ранее определенный тег, и запускает цель развертывания Maven, чтобы развернуть войну или построенный артефакт в репозиторий.
Откроем командную консоль, перейдем в C:\ > MVN >bus-core-api каталог и выполните следующие mvn команда.
>mvn release:prepare
Maven приступит к сборке проекта. После успешной сборки запустите следующееmvn команда.
>mvn release:perform
После успешной сборки вы можете проверить загруженный файл JAR в своем репозитории.
В этой главе рассказывается, как управлять веб-проектом с помощью Maven. Здесь вы узнаете, как создать / построить / развернуть и запустить веб-приложение.
Создать веб-приложение
Чтобы создать простое веб-приложение на Java, мы будем использовать maven-archetype-webappплагин. Итак, откроем командную консоль, перейдем вC:\MVN каталог и выполните следующие mvn команда.
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.automobile
-DartifactId = trucks
-DarchetypeArtifactId = maven-archetype-webapp
-DinteractiveMode = false
Maven начнет обработку и создаст полную структуру проекта веб-приложения Java следующим образом:
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] --------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] --------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\trucks
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Tue Jul 17 11:00:00 IST 2012
[INFO] Final Memory: 20M/89M
[INFO] -------------------------------------------------------------------
Теперь перейдите в каталог C: / MVN. Вы увидите созданный проект Java-приложения с именем trucks (как указано в artifactId), как указано на следующем снимке. Следующая структура каталогов обычно используется для веб-приложений -
Maven использует стандартную структуру каталогов. Используя приведенный выше пример, мы можем понять следующие ключевые концепции:
Sr.No. | Структура и описание папки |
---|---|
1 | trucks содержит папку src и pom.xml. |
2 | src/main/webapp содержит index.jsp и папку WEB-INF. |
3 | src/main/webapp/WEB-INF содержит web.xml |
4 | src/main/resources он содержит файлы изображений / свойств. |
POM.xml
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.automobile</groupId>
<artifactId>trucks</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>trucks Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>trucks</finalName>
</build>
</project>
Если вы заметите, вы обнаружите, что Maven также создал образец исходного файла JSP.
открыто C:\ > MVN > trucks > src > main > webapp > папку, чтобы увидеть index.jsp со следующим кодом -
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
Создать веб-приложение
Откроем командную консоль, перейдем в каталог C: \ MVN \ trucks и выполним следующее mvn команда.
C:\MVN\trucks>mvn clean package
Maven приступит к сборке проекта.
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building trucks Maven Webapp
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] No sources to compile
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\trucks\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[INFO] Assembling webapp[trucks] in [C:\MVN\trucks\target\trucks]
[INFO] Processing war project
[INFO] Copying webapp resources[C:\MVN\trucks\src\main\webapp]
[INFO] Webapp assembled in[77 msecs]
[INFO] Building war: C:\MVN\trucks\target\trucks.war
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jul 17 11:22:45 IST 2012
[INFO] Final Memory: 11M/85M
[INFO] -------------------------------------------------------------------
Развернуть веб-приложение
Теперь скопируйте trucks.war создан в C:\ > MVN > trucks > target > папку в каталог webapp вашего веб-сервера и перезапустите веб-сервер.
Тестовое веб-приложение
Запустите веб-приложение, используя URL: http://<server-name>:<port-number>/trucks/index.jsp.
Проверьте вывод.
Eclipse предоставляет отличный плагин m2eclipse, который легко интегрирует Maven и Eclipse вместе.
Некоторые из функций m2eclipse перечислены ниже -
Вы можете запускать цели Maven из Eclipse.
Вы можете просматривать вывод команд Maven внутри Eclipse, используя его собственную консоль.
Вы можете обновить зависимости maven с помощью IDE.
Вы можете запускать сборки Maven из Eclipse.
Он выполняет управление зависимостями для пути сборки Eclipse на основе Maven pom.xml.
Он разрешает зависимости Maven из рабочей области Eclipse без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
Он автоматически загружает необходимые зависимости и исходные коды из удаленных репозиториев Maven.
Он предоставляет мастера для создания новых проектов Maven, pom.xml и для включения поддержки Maven в существующих проектах.
Он обеспечивает быстрый поиск зависимостей в удаленных репозиториях Maven.
Установка плагина m2eclipse
Используйте одну из следующих ссылок для установки m2eclipse -
Затмение | URL |
---|---|
Eclipse 3.5 (Gallileo) | Установка m2eclipse в Eclipse 3.5 (Gallileo) |
Затмение 3.6 (Гелиос) | Установка m2eclipse в Eclipse 3.6 (Helios) |
Следующий пример поможет вам использовать преимущества интеграции Eclipse и maven.
Импортировать проект maven в Eclipse
Откройте Eclipse.
Выбрать File > Import > вариант.
Выберите вариант Maven Projects. Нажмите кнопку «Далее».
Выберите расположение проекта, в котором проект был создан с помощью Maven. В предыдущих главах мы создали клиентский банк Java Project. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Нажмите кнопку «Готово».
Теперь вы можете увидеть проект maven в eclipse.
Теперь посмотри на consumer Bankingсвойства проекта. Вы можете видеть, что Eclipse добавил зависимости Maven в путь сборки java.
Теперь пришло время создать этот проект, используя maven-возможности eclipse.
- Щелкните правой кнопкой мыши проект consumerBanking, чтобы открыть контекстное меню.
- Выберите вариант «Запуск от имени».
- Затем вариант пакета maven.
Maven приступит к сборке проекта. Вы можете увидеть вывод в консоли Eclipse следующим образом:
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]
[INFO] Id: com.companyname.bank:consumerBanking:jar:1.0-SNAPSHOT
[INFO] task-segment: [package]
[INFO] -------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory:
C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar]
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Thu Jul 12 18:18:24 IST 2012
[INFO] Final Memory: 2M/15M
[INFO] -------------------------------------------------------------------
Теперь щелкните правой кнопкой мыши App.java. ВыбратьRun Asвариант. Затем выберитеJava Application.
Вы увидите следующий результат -
Hello World!
NetBeans 6.7 и новее имеет встроенную поддержку Maven. В случае предыдущей версии плагин Maven доступен в диспетчере плагинов. В этом примере мы используем NetBeans 6.9.
Некоторые из функций NetBeans перечислены ниже -
Вы можете запускать цели Maven из NetBeans.
Вы можете просматривать вывод команд Maven внутри NetBeans, используя его собственную консоль.
Вы можете обновить зависимости maven с помощью IDE.
Вы можете запускать сборки Maven из NetBeans.
NetBeans автоматически выполняет управление зависимостями на основе файла Maven pom.xml.
NetBeans разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
NetBeans автоматически загружает необходимые зависимости и исходные коды из удаленных репозиториев Maven.
NetBeans предоставляет мастеров для создания новых проектов Maven, pom.xml.
NetBeans предоставляет браузер репозитория Maven, который позволяет просматривать локальный репозиторий и зарегистрированные внешние репозитории Maven.
Следующий пример поможет вам воспользоваться преимуществами интеграции NetBeans и Maven.
Откройте проект maven в NetBeans
Откройте NetBeans.
Выбрать File Menu > Open Project вариант.
Выберите расположение проекта, в котором проект был создан с помощью Maven. Мы создали Java Project ConsumerBanking. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Теперь вы можете увидеть проект maven в NetBeans. Взгляните на библиотеки проекта consumerBanking и библиотеки тестирования. Вы можете видеть, что NetBeans добавил зависимости Maven в свой путь сборки.
Создайте проект maven в NetBeans
Теперь пришло время создать этот проект с использованием возможностей maven в NetBeans.
- Щелкните правой кнопкой мыши проект consumerBanking, чтобы открыть контекстное меню.
- Выберите вариант «Очистить и построить как».
Maven приступит к сборке проекта. Вы можете увидеть вывод в консоли NetBeans следующим образом:
NetBeans: Executing 'mvn.bat -Dnetbeans.execution = true clean install'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [clean, install]
------------------------------------------------------------------------
[clean:clean]
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Compiling 2 source files to C:\MVN\consumerBanking\target\classes
[resources:testResources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[compiler:testCompile]
Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[surefire:test]
Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[jar:jar]
Building jar: C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
[install:install]
Installing C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
to C:\Users\GB3824\.m2\repository\com\companyname\bank\consumerBanking\
1.0-SNAPSHOT\consumerBanking-1.0-SNAPSHOT.jar
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 9 seconds
Finished at: Thu Jul 19 12:57:28 IST 2012
Final Memory: 16M/85M
------------------------------------------------------------------------
Запустить приложение в NetBeans
Теперь щелкните правой кнопкой мыши App.java. ВыбратьRun Fileкак вариант. Вы увидите результат в консоли NetBeans.
NetBeans: Executing 'mvn.bat -Dexec.classpathScope = runtime
-Dexec.args = -classpath %classpath com.companyname.bank.App
-Dexec.executable = C:\Program Files\Java\jdk1.6.0_21\bin\java.exe
-Dnetbeans.execution = true process-classes
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [process-classes,
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec]
------------------------------------------------------------------------
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Nothing to compile - all classes are up to date
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 1 second
Finished at: Thu Jul 19 14:18:13 IST 2012
Final Memory: 7M/64M
------------------------------------------------------------------------
IntelliJ IDEA имеет встроенную поддержку Maven. В этом примере мы используем IntelliJ IDEA Community Edition 11.1.
Некоторые из функций IntelliJ IDEA перечислены ниже -
Вы можете запускать цели Maven из IntelliJ IDEA.
Вы можете просматривать вывод команд Maven внутри IntelliJ IDEA, используя его собственную консоль.
Вы можете обновить зависимости maven в среде IDE.
Вы можете запускать сборки Maven из IntelliJ IDEA.
IntelliJ IDEA автоматически выполняет управление зависимостями на основе Maven pom.xml.
IntelliJ IDEA разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
IntelliJ IDEA автоматически загружает необходимые зависимости и источники из удаленных репозиториев Maven.
IntelliJ IDEA предоставляет мастеров для создания новых проектов Maven, pom.xml.
Следующий пример поможет вам использовать преимущества интеграции IntelliJ IDEA и Maven.
Создайте новый проект в IntelliJ IDEA
Мы импортируем проект Maven с помощью мастера создания нового проекта.
Откройте IntelliJ IDEA.
Выбрать File Menu > New Project Вариант.
Выберите проект импорта из существующей модели.
- Выберите вариант Maven
Выберите расположение проекта, в котором проект был создан с помощью Maven. Мы создали Java Project ConsumerBanking. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
- Выберите проект Maven для импорта.
- Введите название проекта и нажмите «Готово».
Теперь вы можете увидеть проект maven в IntelliJ IDEA. Взгляните на внешние библиотеки проекта consumerBanking. Вы можете видеть, что IntelliJ IDEA добавила зависимости Maven в свой путь сборки в разделе Maven.
Создайте проект maven в IntelliJ IDEA
Теперь пришло время создать этот проект, используя возможности IntelliJ IDEA.
Выберите проект ConsumerBanking.
Выбрать Buid menu > Rebuild Project Вариант
Вы можете увидеть результат в консоли IntelliJ IDEA Console
4:01:56 PM Compilation completed successfully
Запустить приложение в IntelliJ IDEA
Выберите проект ConsumerBanking.
Щелкните правой кнопкой мыши App.java, чтобы открыть контекстное меню.
Выбрать Run App.main()
Вы увидите результат в консоли IntelliJ IDEA.
"C:\Program Files\Java\jdk1.6.0_21\bin\java"
-Didea.launcher.port=7533
"-Didea.launcher.bin.path=
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 11.1.2\bin"
-Dfile.encoding=UTF-8
-classpath "C:\Program Files\Java\jdk1.6.0_21\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\deploy.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\javaws.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\management-agent.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\plugin.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\dnsns.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\localedata.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunjce_provider.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunmscapi.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunpkcs11.jar
C:\MVN\consumerBanking\target\classes;
C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 11.1.2\lib\idea_rt.jar"
com.intellij.rt.execution.application.AppMain com.companyname.bank.App
Hello World!
Process finished with exit code 0