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