Maven — Обзор
Maven — это инструмент управления проектами и понимания, который предоставляет разработчикам полную среду жизненного цикла сборки. Команда разработчиков может автоматизировать инфраструктуру сборки проекта практически мгновенно, поскольку Maven использует стандартную структуру каталогов и жизненный цикл сборки по умолчанию.
В случае нескольких групп разработчиков, Maven может настроить способ работы в соответствии со стандартами в очень короткое время. Поскольку большинство настроек проекта просты и могут использоваться повторно, Maven упрощает жизнь разработчика при создании отчетов, проверок, сборке и тестировании настроек автоматизации.
Maven предоставляет разработчикам способы управления следующим:
- Строит
- Документация
- Составление отчетов
- зависимости
- СДМ
- релизы
- распределение
- Список рассылки
Подводя итог, Maven упрощает и стандартизирует процесс сборки проекта. Он легко обрабатывает компиляцию, распространение, документацию, совместную работу в команде и другие задачи. Maven увеличивает возможность многократного использования и выполняет большинство задач, связанных со сборкой.
Maven Evolution
Первоначально Maven был разработан для упрощения строительных процессов в проекте Jakarta Turbine. Было несколько проектов, и каждый проект содержал немного разные файлы сборки ANT. JAR были проверены в CVS.
Затем группа Apache разработала Maven, который может создавать несколько проектов вместе, публиковать информацию о проектах, развертывать проекты, совместно использовать JAR-файлы для нескольких проектов и помогать в совместной работе команд.
Задача
Основная цель Maven — предоставить разработчику следующее:
-
Комплексная модель для проектов, которую можно использовать повторно, обслуживать и которую легче понять.
-
Плагины или инструменты, которые взаимодействуют с этой декларативной моделью.
Комплексная модель для проектов, которую можно использовать повторно, обслуживать и которую легче понять.
Плагины или инструменты, которые взаимодействуют с этой декларативной моделью.
Структура и содержимое проекта Maven объявляются в XML-файле pom.xml, называемом Project Object Model (POM), который является фундаментальной единицей всей системы Maven. В последующих главах мы подробно объясним POM.
Соглашение по конфигурации
Maven использует Convention over Configuration , что означает, что разработчики не обязаны сами создавать процесс сборки.
Разработчики не должны упоминать каждую деталь конфигурации. Maven обеспечивает разумное поведение по умолчанию для проектов. Когда создается проект Maven, Maven создает структуру проекта по умолчанию. От разработчика требуется только соответствующее размещение файлов, и ему / ей не нужно определять какие-либо настройки в pom.xml.
В качестве примера в следующей таблице приведены значения по умолчанию для файлов исходного кода проекта, файлов ресурсов и других конфигураций. Предполагая, что $ {basedir} обозначает местоположение проекта —
Вещь | По умолчанию |
---|---|
исходный код | $ {Имя_базовой_папки} / SRC / Основной / Java |
Ресурсы | $ {Имя_базовой_папки} / SRC / основные / ресурсы |
тесты | $ {Имя_базовой_папки} / SRC / тест |
Соответствующий байт-код | $ {Имя_базовой_папки} / целевая |
распространяемый JAR | $ {Имя_базовой_папки} / целевые / классы |
Чтобы построить проект, Maven предоставляет разработчикам возможность упомянуть цели жизненного цикла и зависимости проекта (которые зависят от возможностей подключаемого модуля Maven и его соглашений по умолчанию). Большая часть задач, связанных с управлением проектом и сборкой, поддерживается подключаемыми модулями Maven.
Разработчики могут создавать любой проект Maven без необходимости понимать, как работают отдельные плагины. Мы подробно обсудим плагины Maven в следующих главах.
Особенности Maven
-
Простая настройка проекта в соответствии с лучшими практиками.
-
Последовательное использование во всех проектах.
-
Управление зависимостями, включая автоматическое обновление.
-
Большое и растущее хранилище библиотек.
-
Расширяемый, с возможностью легко писать плагины на Java или языках сценариев.
-
Мгновенный доступ к новым функциям практически без дополнительной настройки.
-
Сборки на основе моделей — Maven может встраивать любое количество проектов в предопределенные типы вывода, такие как jar, war, metadata.
-
Согласованный сайт с информацией о проекте. Используя те же метаданные, что и в процессе сборки, maven может создавать веб-сайт и PDF, включая полную документацию.
-
Публикация управления выпуском и распространением — без дополнительной настройки maven интегрируется с вашей системой управления версиями, такой как CVS, и управляет выпуском проекта.
-
Обратная совместимость — вы можете легко перенести несколько модулей проекта в Maven 3 из более старых версий Maven. Он также может поддерживать более старые версии.
-
Автоматическое управление версиями для родителей — нет необходимости указывать родителя в субмодуле для обслуживания.
-
Параллельные сборки — анализирует график зависимости проекта и позволяет вам строить модули расписания параллельно. Используя это, вы можете добиться повышения производительности на 20-50%.
-
Улучшение отчетов об ошибках и целостности — Maven улучшил отчеты об ошибках, и он предоставляет вам ссылку на вики-страницу Maven, где вы получите полное описание ошибки.
Простая настройка проекта в соответствии с лучшими практиками.
Последовательное использование во всех проектах.
Управление зависимостями, включая автоматическое обновление.
Большое и растущее хранилище библиотек.
Расширяемый, с возможностью легко писать плагины на Java или языках сценариев.
Мгновенный доступ к новым функциям практически без дополнительной настройки.
Сборки на основе моделей — Maven может встраивать любое количество проектов в предопределенные типы вывода, такие как jar, war, metadata.
Согласованный сайт с информацией о проекте. Используя те же метаданные, что и в процессе сборки, maven может создавать веб-сайт и PDF, включая полную документацию.
Публикация управления выпуском и распространением — без дополнительной настройки maven интегрируется с вашей системой управления версиями, такой как CVS, и управляет выпуском проекта.
Обратная совместимость — вы можете легко перенести несколько модулей проекта в Maven 3 из более старых версий Maven. Он также может поддерживать более старые версии.
Автоматическое управление версиями для родителей — нет необходимости указывать родителя в субмодуле для обслуживания.
Параллельные сборки — анализирует график зависимости проекта и позволяет вам строить модули расписания параллельно. Используя это, вы можете добиться повышения производительности на 20-50%.
Улучшение отчетов об ошибках и целостности — Maven улучшил отчеты об ошибках, и он предоставляет вам ссылку на вики-страницу Maven, где вы получите полное описание ошибки.
Maven — настройка среды
Maven — это инструмент на основе Java, поэтому самое первое требование — установить JDK на ваш компьютер.
Системные требования
JDK | 1,7 или выше. |
---|---|
объем памяти | Нет минимальных требований. |
Дисковое пространство | Нет минимальных требований. |
Операционная система | Нет минимальных требований. |
Шаг 1. Проверка установки Java на вашем компьютере.
Откройте консоль и выполните следующую команду Java .
Операционные системы | задача | команда |
---|---|---|
Windows | Открытая командная консоль | c: \> Java-версия |
Linux | Открытый командный терминал | $ java-версия |
макинтош | Открытый терминал | машина: ~ Джозеф $ Java-версия |
Давайте проверим вывод для всех операционных систем —
Операционные системы | Выход |
---|---|
Windows |
Java-версия «1.7.0_60» Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.60-b09, смешанный режим) |
Linux |
Java-версия «1.7.0_60» Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.60-b09, смешанный режим) |
макинтош |
Java-версия «1.7.0_60» Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.60-b09, смешанный режим) |
Java-версия «1.7.0_60»
Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19)
Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.60-b09, смешанный режим)
Java-версия «1.7.0_60»
Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19)
Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.60-b09, смешанный режим)
Java-версия «1.7.0_60»
Java (TM) SE Runtime Environment (сборка 1.7.0_60-b19)
Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 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 Environment
Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена Java на вашем компьютере. Например —
Операционные системы | Выход |
---|---|
Windows | Установите переменную среды JAVA_HOME в C: \ Program Files \ Java \ jdk1.7.0_60 |
Linux | экспорт JAVA_HOME = / usr / local / java-current |
макинтош | export JAVA_HOME = / Библиотека / Java / Главная |
Добавьте расположение компилятора Java в системный путь.
Операционные системы | Выход |
---|---|
Windows | Добавьте строку «; C: \ Program Files \ Java \ jdk1.7.0.60 \ bin» в конец системной переменной Path. |
Linux | экспорт PATH = $ PATH: $ JAVA_HOME / bin / |
макинтош | не требуется |
Проверьте установку Java с помощью команды java -version, как описано выше.
Шаг 3 — Скачать архив Maven
Загрузите Maven 2.2.1 с сайта https://maven.apache.org/download.cgi .
Операционные системы | Название архива |
---|---|
Windows | apache-maven-3.3.1-bin.zip |
Linux | апач-Maven-3.3.1-bin.tar.gz |
макинтош | апач-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 |
макинтош | / 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 |
Откройте командный терминал и установите переменные среды. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 export M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m |
макинтош |
Откройте командный терминал и установите переменные среды. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 экспорт M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m |
Установите переменные среды, используя системные свойства.
M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.1 M2 =% M2_HOME% \ bin MAVEN_OPTS = -Xms256m -Xmx512m
Откройте командный терминал и установите переменные среды.
export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 export M2 = $ M2_HOME / bin
экспорт MAVEN_OPTS = -Xms256m -Xmx512m
Откройте командный терминал и установите переменные среды.
export 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: $ PATH |
макинтош | экспорт PATH = $ M2: $ PATH |
Шаг 7 — Проверьте установку Maven
Теперь откройте консоль и выполните следующую команду mvn .
Операционные системы | задача | команда |
---|---|---|
Windows | Открытая командная консоль | c: \> mvn —version |
Linux | Открытый командный терминал | $ mvn —version |
макинтош | Открытый терминал | машина: ~ Джозеф $ 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 |
макинтош |
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 |
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
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
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
Maven — POM
POM расшифровывается как объектная модель проекта. Это основная единица работы в Maven. Это файл XML, который находится в базовом каталоге проекта как pom.xml.
POM содержит информацию о проекте и различные детали конфигурации, используемые Maven для создания проекта (ов).
POM также содержит цели и плагины. При выполнении задачи или цели Maven ищет POM в текущем каталоге. Он читает POM, получает необходимую информацию о конфигурации, а затем выполняет цель. Некоторые конфигурации, которые могут быть указаны в POM, следующие:
- зависимости проекта
- плагины
- цели
- строить профили
- версия проекта
- Разработчики
- список рассылки
Перед созданием POM мы должны сначала определить группу проекта (groupId), ее имя (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 требуется элемент проекта и три обязательных поля: groupId, artifactId, version .
-
Обозначение проектов в репозитории: groupId: artifactId: версия .
-
Минимальные требования для POM —
Для всех файлов POM требуется элемент проекта и три обязательных поля: groupId, artifactId, version .
Обозначение проектов в репозитории: groupId: artifactId: версия .
Минимальные требования для POM —
Sr.No. | Узел и описание |
---|---|
1 |
Корень проекта Это корневой тег проекта. Вам необходимо указать основные настройки схемы, такие как схема apache и спецификация w3.org. |
2 |
Версия модели Версия модели должна быть 4.0.0. |
3 |
идентификатор_группы Это идентификатор группы проекта. Это обычно уникально среди организации или проекта. Например, у банковской группы com.company.bank есть все связанные с банком проекты. |
4 |
артефакта Это идентификатор проекта. Это вообще название проекта. Например, потребительский банкинг. Наряду с groupId, artifactId определяет местоположение артефакта в хранилище. |
5 |
версия Это версия проекта. Наряду с groupId, он используется в хранилище артефакта для отделения версий друг от друга. Например — com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Корень проекта
Это корневой тег проекта. Вам необходимо указать основные настройки схемы, такие как схема apache и спецификация w3.org.
Версия модели
Версия модели должна быть 4.0.0.
идентификатор_группы
Это идентификатор группы проекта. Это обычно уникально среди организации или проекта. Например, у банковской группы com.company.bank есть все связанные с банком проекты.
артефакта
Это идентификатор проекта. Это вообще название проекта. Например, потребительский банкинг. Наряду с groupId, artifactId определяет местоположение артефакта в хранилище.
версия
Это версия проекта. Наряду с groupId, он используется в хранилище артефакта для отделения версий друг от друга. Например —
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.
Супер ПОМ
Super POM является POM по умолчанию Maven. Все POM наследуются от родителя или по умолчанию (несмотря на явное определение или нет). Этот базовый POM известен как Super POM и содержит значения, унаследованные по умолчанию.
Maven использует эффективную POM (конфигурация из супер-помпа плюс конфигурация проекта) для выполнения соответствующей цели. Это помогает разработчикам указать минимальные детали конфигурации в его / ее pom.xml. Хотя конфигурации могут быть легко переопределены.
Простой способ взглянуть на конфигурации по умолчанию для Super POM — выполнить следующую команду: mvn help :ffective-pom
Создайте pom.xml в любом каталоге на вашем компьютере. Используйте содержимое вышеупомянутого примера pom.
В приведенном ниже примере мы создали файл pom.xml в папке C: \ MVN \ project.
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующую команду mvn .
C:\MVN\project>mvn help:effective-pom
Maven начнет обработку и отобразит эффективную помпу.
[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 — построить жизненный цикл
Что такое жизненный цикл сборки?
Жизненный цикл сборки — это четко определенная последовательность фаз, которые определяют порядок, в котором должны выполняться цели. Здесь фаза представляет собой этап в жизненном цикле. Например, типичный жизненный цикл сборки Maven состоит из следующей последовательности этапов.
фаза | рукоятки | Описание |
---|---|---|
Prepare-ресурсы | копирование ресурсов | Копирование ресурсов может быть настроено на этом этапе. |
утверждать | Проверка информации | Проверяет правильность проекта и наличие всей необходимой информации. |
компилировать | сборник | Компиляция исходного кода выполняется на этом этапе. |
Тестовое задание | тестирование | Тестирует скомпилированный исходный код, подходящий для тестирования фреймворка. |
пакет | упаковка | На этом этапе создается пакет JAR / WAR, как указано в пакете в POM.xml. |
устанавливать | монтаж | На этом этапе пакет устанавливается в локальный / удаленный репозиторий maven. |
развертывание | Развертывание | Копирует окончательный пакет в удаленный репозиторий. |
Для регистрации целей всегда есть этапы до и после , которые должны выполняться до или после определенного этапа.
Когда Maven начинает создавать проект, он проходит определенную последовательность этапов и выполняет задачи, которые регистрируются на каждом этапе.
Maven имеет следующие три стандартных жизненных цикла —
- чистый
- по умолчанию (или сборка)
- сайт
Цель представляет собой конкретную задачу, которая способствует созданию и управлению проектом. Он может быть привязан к нулю или большему количеству фаз сборки. Цель, не связанная с какой-либо фазой сборки, может быть выполнена вне жизненного цикла сборки путем прямого вызова.
Порядок выполнения зависит от порядка, в котором вызываются цели и этапы сборки. Например, рассмотрим команду ниже. Аргументы clean и package являются фазами сборки, в то время как зависимость: копия-зависимость является целью.
mvn clean dependency:copy-dependencies package
Здесь сначала выполняется чистая фаза, за которой следует цель зависимости: копия-зависимости , и, наконец , фаза пакета .
Чистый жизненный цикл
Когда мы выполняем команду mvn post-clean , Maven запускает чистый жизненный цикл, состоящий из следующих этапов.
- Предварительная очистка
- чистый
- после чистой
Цель Maven clean (clean: clean) связана с чистой фазой в чистом жизненном цикле. Его чисто: cleangoal удаляет выходные данные сборки, удаляя каталог сборки. Таким образом, при выполнении команды mvn clean Maven удаляет каталог сборки.
Мы можем настроить это поведение, указав цели на любом из вышеуказанных этапов чистого жизненного цикла.
В следующем примере мы прикрепим 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.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 , которая покажет предварительную очистку и очистку. Ничто не будет выполнено для фазы после очистки .
Жизненный цикл по умолчанию (или сборка)
Это основной жизненный цикл Maven, который используется для создания приложения. Он имеет следующие 21 фазы.
Sr.No. | Фаза жизненного цикла и описание |
---|---|
1 |
утверждать Проверяет правильность проекта и наличие всей необходимой информации для завершения процесса сборки. |
2 |
инициализировать Инициализирует состояние сборки, например, устанавливает свойства. |
3 |
генерировать-источники Создайте любой исходный код для включения в фазу компиляции. |
4 |
Процесс-источники Обработайте исходный код, например, отфильтруйте любое значение. |
5 |
генерировать-ресурсы Генерация ресурсов для включения в пакет. |
6 |
Процесс-ресурсы Скопируйте и обработайте ресурсы в каталог назначения, готовый к этапу упаковки. |
7 |
компилировать Скомпилируйте исходный код проекта. |
8 |
Процесс-классы Постобработка сгенерированных файлов из компиляции, например, для улучшения / оптимизации байт-кода в классах Java. |
9 |
генерировать-тест-источников Создайте любой тестовый исходный код для включения в фазу компиляции. |
10 |
Процесс-тест-источники Обработайте исходный код теста, например, отфильтруйте любые значения. |
11 |
тест-компиляция Скомпилируйте исходный код теста в каталог назначения теста. |
12 |
Процесс-тест-классы Обработать сгенерированные файлы из файла с тестовым кодом. |
13 |
тестовое задание Запустите тесты, используя подходящую среду модульного тестирования (Junit — один). |
14 |
подготовить-пакет Выполните все операции, необходимые для подготовки пакета до фактической упаковки. |
15 |
пакет Возьмите скомпилированный код и упакуйте его в распространяемый формат, такой как файл JAR, WAR или EAR. |
16 |
Предварительная интеграция-тест Выполните действия, необходимые перед выполнением интеграционных тестов. Например, настройка необходимой среды. |
17 |
Интеграция испытаний При необходимости обработайте и разверните пакет в среде, где можно запускать интеграционные тесты. |
18 |
после интеграции тест Выполните действия, необходимые после выполнения интеграционных тестов. Например, очистка окружающей среды. |
19 |
проверить Выполните любые проверки, чтобы убедиться, что пакет действителен и соответствует критериям качества. |
20 |
устанавливать Установите пакет в локальный репозиторий, который можно использовать в качестве зависимости в других проектах локально. |
21 |
развертывание Копирует окончательный пакет в удаленный репозиторий для совместного использования с другими разработчиками и проектами. |
утверждать
Проверяет правильность проекта и наличие всей необходимой информации для завершения процесса сборки.
инициализировать
Инициализирует состояние сборки, например, устанавливает свойства.
генерировать-источники
Создайте любой исходный код для включения в фазу компиляции.
Процесс-источники
Обработайте исходный код, например, отфильтруйте любое значение.
генерировать-ресурсы
Генерация ресурсов для включения в пакет.
Процесс-ресурсы
Скопируйте и обработайте ресурсы в каталог назначения, готовый к этапу упаковки.
компилировать
Скомпилируйте исходный код проекта.
Процесс-классы
Постобработка сгенерированных файлов из компиляции, например, для улучшения / оптимизации байт-кода в классах Java.
генерировать-тест-источников
Создайте любой тестовый исходный код для включения в фазу компиляции.
Процесс-тест-источники
Обработайте исходный код теста, например, отфильтруйте любые значения.
тест-компиляция
Скомпилируйте исходный код теста в каталог назначения теста.
Процесс-тест-классы
Обработать сгенерированные файлы из файла с тестовым кодом.
тестовое задание
Запустите тесты, используя подходящую среду модульного тестирования (Junit — один).
подготовить-пакет
Выполните все операции, необходимые для подготовки пакета до фактической упаковки.
пакет
Возьмите скомпилированный код и упакуйте его в распространяемый формат, такой как файл JAR, WAR или EAR.
Предварительная интеграция-тест
Выполните действия, необходимые перед выполнением интеграционных тестов. Например, настройка необходимой среды.
Интеграция испытаний
При необходимости обработайте и разверните пакет в среде, где можно запускать интеграционные тесты.
после интеграции тест
Выполните действия, необходимые после выполнения интеграционных тестов. Например, очистка окружающей среды.
проверить
Выполните любые проверки, чтобы убедиться, что пакет действителен и соответствует критериям качества.
устанавливать
Установите пакет в локальный репозиторий, который можно использовать в качестве зависимости в других проектах локально.
развертывание
Копирует окончательный пакет в удаленный репозиторий для совместного использования с другими разработчиками и проектами.
Есть несколько важных концепций, связанных с жизненными циклами Maven, о которых стоит упомянуть —
-
Когда фаза вызывается с помощью команды Maven, например, mvn compile , будут выполняться только фазы до этой фазы включительно.
-
Различные цели maven будут привязаны к различным этапам жизненного цикла Maven в зависимости от типа упаковки (JAR / WAR / EAR).
Когда фаза вызывается с помощью команды 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 обычно используется для создания свежей документации, создания отчетов, развертывания сайта и т. Д. Он имеет следующие фазы:
- предварительно сайт
- сайт
- пост-сайт
- Сайт-развернуть
В следующем примере мы прикрепим 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.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 — Создание профилей
Что такое профиль сборки?
Профиль сборки — это набор значений конфигурации, которые можно использовать для установки или переопределения значений по умолчанию сборки Maven. Используя профиль сборки, вы можете настроить сборку для различных сред, таких как производственная среда v / s.
Профили указываются в файле pom.xml с использованием его элементов activeProfiles / profile и запускаются различными способами. Профили изменяют 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. |
env.properties
используется конфигурация по умолчанию, если профиль не указан.
env.test.properties
тестовая конфигурация при использовании тестового профиля.
env.prod.properties
производственная конфигурация при использовании профиля prod.
Явная активация профиля
В следующем примере мы добавим maven-antrun-plugin: запустите цель, чтобы проверить фазу. Это позволит нам отображать текстовые сообщения для разных профилей. Мы будем использовать 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.
-
Это все. Теперь у вас есть три готовых профиля сборки (обычный / test / prod).
Добавьте еще один элемент профиля к элементу профиля в pom.xml (скопируйте существующий элемент профиля и вставьте его там, где заканчиваются элементы профиля).
Обновить идентификатор этого элемента профиля с тестового до нормального.
Обновите раздел задачи, чтобы отобразить env.properties и скопируйте env.properties в целевой каталог.
Повторите описанные выше три шага, обновите id до prod и раздел задачи для env.prod.properties.
Это все. Теперь у вас есть три готовых профиля сборки (обычный / 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.
<Профиль> <Идентификатор> тест </ ID> <Активация> <Ос> <имя> Windows XP </ name> <Семья> Окна </ семья> <Арка> x86 </ арка> <Версия> 5.1.2600 </ версия> </ OS> </ Активации> </ Профиль>
Теперь откройте командную консоль, перейдите в папку, содержащую pom.xml, и выполните следующие команды mvn . Не передавайте имя профиля, используя опцию -P. Maven отобразит результат теста, являющийся активным профилем.
C:\MVN\project>mvn test
Активация профиля с помощью текущего / отсутствующего файла
Теперь активируйте элемент, чтобы включить детали ОС, как показано ниже. Тестовый профиль сработает, если отсутствует целевой / создан-источники / 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?
В терминологии Maven репозиторий — это каталог, в котором хранятся все файлы проекта, библиотеки, плагины или любые другие специфичные для проекта артефакты, которые Maven может легко использовать.
Репозиторий Maven бывает трех типов. Следующая иллюстрация даст представление об этих трех типах.
- местный
- центральный
- дистанционный пульт
Локальный репозиторий
Локальный репозиторий 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 предлагает концепцию удаленного репозитория , который является собственным настраиваемым репозиторием разработчика, содержащим необходимые библиотеки или другие файлы проекта.
Например, используя нижеупомянутый 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 начинает поиск библиотек зависимостей в следующей последовательности:
-
Шаг 1 — Поиск зависимости в локальном репозитории, если не найден, перейти к шагу 2, иначе выполнить дальнейшую обработку.
-
Шаг 2 — Поиск зависимости в центральном репозитории, если не найдено и упоминается / упоминается удаленный репозиторий / репозитории, затем перейдите к шагу 4. В противном случае он загружается в локальный репозиторий для дальнейшего использования.
-
Шаг 3 — Если удаленный репозиторий не был упомянут, Maven просто останавливает обработку и выдает ошибку (Невозможно найти зависимость).
-
Шаг 4 — Поиск зависимости в удаленном репозитории или репозиториях, если он найден, он загружается в локальный репозиторий для дальнейшего использования. В противном случае Maven останавливает обработку и выдает ошибку (Невозможно найти зависимость).
Шаг 1 — Поиск зависимости в локальном репозитории, если не найден, перейти к шагу 2, иначе выполнить дальнейшую обработку.
Шаг 2 — Поиск зависимости в центральном репозитории, если не найдено и упоминается / упоминается удаленный репозиторий / репозитории, затем перейдите к шагу 4. В противном случае он загружается в локальный репозиторий для дальнейшего использования.
Шаг 3 — Если удаленный репозиторий не был упомянут, Maven просто останавливает обработку и выдает ошибку (Невозможно найти зависимость).
Шаг 4 — Поиск зависимости в удаленном репозитории или репозиториях, если он найден, он загружается в локальный репозиторий для дальнейшего использования. В противном случае Maven останавливает обработку и выдает ошибку (Невозможно найти зависимость).
Maven — Плагины
Какие плагины Maven?
Maven на самом деле является структурой исполнения плагинов, где каждая задача фактически выполняется с помощью плагинов. Плагины Maven обычно используются для:
- создать файл jar
- создать файл войны
- компилировать файлы кода
- модульное тестирование кода
- создать проектную документацию
- создавать отчеты проекта
Плагин, как правило, предоставляет набор целей, которые могут быть выполнены с использованием следующего синтаксиса —
mvn [plugin-name]:[goal-name]
Например, проект Java может быть скомпилирован с целью компиляции maven-compiler-plugin путем выполнения следующей команды.
mvn compiler:compile
Типы плагинов
Maven предоставил следующие два типа плагинов —
Sr.No. | Тип и описание |
---|---|
1 |
Сборка плагинов Они выполняются во время процесса сборки и должны быть настроены в элементе <build /> файла pom.xml. |
2 |
Плагины отчетности Они выполняются во время процесса создания сайта и должны быть настроены в элементе <reports /> файла pom.xml. |
Сборка плагинов
Они выполняются во время процесса сборки и должны быть настроены в элементе <build /> файла pom.xml.
Плагины отчетности
Они выполняются во время процесса создания сайта и должны быть настроены в элементе <reports /> файла pom.xml.
Ниже приведен список нескольких распространенных плагинов —
Sr.No. | Плагин и описание |
---|---|
1 |
чистый Очищает цель после сборки. Удаляет целевой каталог. |
2 |
компилятор Компилирует исходные файлы Java. |
3 |
безошибочный Запускает юнит-тесты JUnit. Создает протоколы испытаний. |
4 |
яс Создает файл JAR из текущего проекта. |
5 |
война Создает файл WAR из текущего проекта. |
6 |
Javadoc Создает Javadoc для проекта. |
7 |
antrun Запускает набор задач ant на любом этапе, упомянутом в сборке. |
чистый
Очищает цель после сборки. Удаляет целевой каталог.
компилятор
Компилирует исходные файлы Java.
безошибочный
Запускает юнит-тесты JUnit. Создает протоколы испытаний.
яс
Создает файл JAR из текущего проекта.
война
Создает файл WAR из текущего проекта.
Javadoc
Создает Javadoc для проекта.
antrun
Запускает набор задач ant на любом этапе, упомянутом в сборке.
пример
В наших примерах мы широко использовали 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.
-
Каждый плагин может иметь несколько целей.
-
Вы можете определить фазу, с которой плагин должен начать свою обработку, используя его фазовый элемент. Мы использовали чистую фазу.
-
Вы можете настроить задачи, которые будут выполняться, привязав их к целям плагина. Мы связали задачу эха с целью запуска maven-antrun-plugin .
-
Maven загрузит плагин, если он недоступен в локальном хранилище, и начнет его обработку.
Плагины указываются в pom.xml с использованием элемента plugins.
Каждый плагин может иметь несколько целей.
Вы можете определить фазу, с которой плагин должен начать свою обработку, используя его фазовый элемент. Мы использовали чистую фазу.
Вы можете настроить задачи, которые будут выполняться, привязав их к целям плагина. Мы связали задачу эха с целью запуска maven-antrun-plugin .
Maven загрузит плагин, если он недоступен в локальном хранилище, и начнет его обработку.
Maven — Создание проекта
Maven использует плагины архетипов для создания проектов. Для создания простого 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-приложения с именем Banking для потребителя (как указано в artifactId). Maven использует стандартную структуру каталогов, как показано ниже —
Используя приведенный выше пример, мы можем понять следующие ключевые понятия —
Sr.No. | Структура папки и описание |
---|---|
1 |
consumerBanking содержит папку src и pom.xml |
2 |
SRC / Основной / Java содержит файлы кода Java в структуре пакета (com / companyName / bank). |
3 |
SRC / Основной / испытание содержит тестовые файлы кода Java в структуре пакета (com / companyName / bank). |
4 |
SRC / основные / ресурсы он содержит файлы изображений / свойств (в приведенном выше примере нам нужно создать эту структуру вручную). |
consumerBanking
содержит папку src и pom.xml
SRC / Основной / Java
содержит файлы кода Java в структуре пакета (com / companyName / bank).
SRC / Основной / испытание
содержит тестовые файлы кода Java в структуре пакета (com / companyName / bank).
SRC / основные / ресурсы
он содержит файлы изображений / свойств (в приведенном выше примере нам нужно создать эту структуру вручную).
Если вы заметите, вы обнаружите, что 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.
Maven — проект сборки и тестирования
В главе «Создание проекта» мы узнали, как создать приложение Java с помощью Maven. Теперь посмотрим, как собрать и протестировать приложение.
Перейдите в каталог C: / MVN, где вы создали свое Java-приложение. Откройте папку customerBanking. Вы увидите файл 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 две цели: сначала очистить целевой каталог (clean), а затем упаковать выходные данные сборки проекта как jar (package).
-
Упакованный jar-файл доступен в папке consumerBanking \ target как consumerBanking-1.0-SNAPSHOT.jar.
-
Отчеты о тестировании доступны в папке consumerBanking \ target \ surefire-reports.
-
Maven компилирует файл (ы) исходного кода и затем проверяет файл (ы) исходного кода.
-
Затем Maven запускает тестовые случаи.
-
Наконец, Maven создает пакет.
Мы поставили maven две цели: сначала очистить целевой каталог (clean), а затем упаковать выходные данные сборки проекта как jar (package).
Упакованный 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 осуществляет управление зависимостями, используя концепцию репозиториев. Но что произойдет, если зависимость не доступна ни в одном из удаленных репозиториев и центрального репозитория? Maven дает ответ для такого сценария, используя концепцию внешней зависимости .
Например, давайте внесем следующие изменения в проект, созданный в главе «Создание проекта Java».
-
Добавьте папку lib в папку src.
-
Скопируйте любую банку в папку lib. Мы использовали ldapjdk.jar , который является вспомогательной библиотекой для операций LDAP.
Добавьте папку 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>
Посмотрите на второй элемент зависимости под зависимостями в вышеприведенном примере, который проясняет следующие ключевые понятия о внешней зависимости .
-
Внешние зависимости (расположение jar библиотеки) можно настроить в pom.xml так же, как и другие зависимости.
-
Укажите groupId так же, как имя библиотеки.
-
Укажите artifactId так же, как имя библиотеки.
-
Укажите область действия как систему.
-
Укажите системный путь относительно местоположения проекта.
Внешние зависимости (расположение jar библиотеки) можно настроить в pom.xml так же, как и другие зависимости.
Укажите groupId так же, как имя библиотеки.
Укажите artifactId так же, как имя библиотеки.
Укажите область действия как систему.
Укажите системный путь относительно местоположения проекта.
Надеюсь, теперь вы понимаете внешние зависимости и сможете указать внешние зависимости в своем проекте Maven.
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 | |
FML | Используется для документов FAQ |
https://jakarta.apache.org/site
Maven — Шаблоны проектов
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 запросит подробное подтверждение проекта. Нажмите ввод или нажмите 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> здоровье> src> main> java> com> название компании> страхование> 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> здоровье> src> test> java> com> название компании> страхование> 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. | Archetype ArtifactIds & Description |
---|---|
1 |
Maven-архетип-архетип Архетип, который содержит образец архетипа. |
2 |
Maven-архетип-j2ee-простой Архетип, который содержит упрощенный пример приложения J2EE. |
3 |
Maven-архетип-мохо Архетип, который содержит образец образца плагина Maven. |
4 |
Maven-архетип-плагин Архетип, который содержит образец плагина Maven. |
5 |
Maven-архетип-плагин-сайт Архетип, содержащий образец сайта плагина Maven. |
6 |
Maven-архетип-портлет Архетип, содержащий образец портлета JSR-268. |
7 |
Maven-архетип-Quickstart Архетип, который содержит пример проекта Maven. |
8 |
Maven-архетип-простой Архетип, который содержит простой проект Maven. |
9 |
Maven-архетип-сайт Архетип, который содержит образец сайта Maven для демонстрации некоторых поддерживаемых типов документов, таких как APT, XDoc и FML, и демонстрирует, как включить ваш сайт. |
10 |
Maven-архетип-сайт-простой Архетип, который содержит образец сайта Maven. |
11 |
Maven-архетип-WebApp Архетип, который содержит пример проекта Maven Webapp. |
Maven-архетип-архетип
Архетип, который содержит образец архетипа.
Maven-архетип-j2ee-простой
Архетип, который содержит упрощенный пример приложения J2EE.
Maven-архетип-мохо
Архетип, который содержит образец образца плагина Maven.
Maven-архетип-плагин
Архетип, который содержит образец плагина Maven.
Maven-архетип-плагин-сайт
Архетип, содержащий образец сайта плагина Maven.
Maven-архетип-портлет
Архетип, содержащий образец портлета JSR-268.
Maven-архетип-Quickstart
Архетип, который содержит пример проекта Maven.
Maven-архетип-простой
Архетип, который содержит простой проект Maven.
Maven-архетип-сайт
Архетип, который содержит образец сайта Maven для демонстрации некоторых поддерживаемых типов документов, таких как APT, XDoc и FML, и демонстрирует, как включить ваш сайт.
Maven-архетип-сайт-простой
Архетип, который содержит образец сайта Maven.
Maven-архетип-WebApp
Архетип, который содержит пример проекта Maven Webapp.
Maven — Снимки
Большое программное приложение обычно состоит из нескольких модулей, и это обычный сценарий, когда несколько команд работают над разными модулями одного и того же приложения. Например, рассмотрим команду, работающую над внешним интерфейсом приложения как проект app-ui (app-ui.jar: 1.0), и они используют проект службы данных (data-service.jar: 1.0).
Теперь может случиться так, что команда, работающая над сервисом данных, быстро исправляет ошибки или совершенствуется, и они выпускают библиотеку в удаленное хранилище почти каждый день.
Теперь, если команда службы обработки данных загружает новую версию через день, возникают следующие проблемы:
-
Команда службы данных должна сообщать команде app-ui каждый раз, когда они выпускают обновленный код.
-
Команда app-ui должна регулярно обновлять свой pom.xml, чтобы получить обновленную версию.
Команда службы данных должна сообщать команде 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 службы данных.
<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 data-service.
[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]------------------------------------------------------------------------
Maven — Автоматизация сборки
Автоматизация сборки определяет сценарий, в котором процесс сборки зависимого проекта (-ов) запускается после успешного завершения сборки проекта, чтобы обеспечить стабильность / стабильность зависимого (-ых) проекта (-ов).
пример
Предположим, что команда разрабатывает проект 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, но для удовлетворения вышеуказанного требования нам нужно сделать что-то дополнительное.
Мы можем действовать следующими двумя способами:
-
Добавьте цель пост-сборки в bus-core-api pom для запуска сборок app-web-ui и app-desktop-ui .
-
Используйте сервер непрерывной интеграции (CI), такой как Hudson, для автоматического управления сборкой.
Добавьте цель пост-сборки в 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 Server более предпочтительно для разработчиков. Не требуется обновлять проект bus-core-api каждый раз, когда добавляется новый проект (например, app-mobile-ui), как зависимый проект от проекта bus-core-api . Hudsion — это инструмент непрерывной интеграции, написанный на Java, который находится в контейнере сервлетов, таких как Apache tomcat и сервер приложений Glassfish. Hudson автоматически управляет автоматизацией сборки с помощью управления зависимостями Maven. Следующий снимок определит роль инструмента Hudson.
Хадсон рассматривает каждый проект как работу. После того, как код проекта зарегистрирован в SVN (или в любом инструменте управления исходными кодами, сопоставленном с Hudson), Hudson начинает свою работу по сборке, и, как только эта работа завершается, он автоматически запускает другие зависимые задания (другие зависимые проекты).
В приведенном выше примере, когда исходный код bus-core-ui обновляется в SVN, Hudson начинает его сборку. После успешного завершения сборки Hudson автоматически ищет зависимые проекты и начинает создавать проекты app-web-ui и app-desktop-ui .
Maven — Управление зависимостями
Одной из основных функций Maven является управление зависимостями. Управление зависимостями является сложной задачей, когда мы имеем дело с многомодульными проектами (состоящими из сотен модулей / подпроектов). Maven обеспечивает высокий уровень контроля для управления такими сценариями.
Открытие транзитивных зависимостей
Довольно часто случается, что библиотека, скажем, A, зависит от другой библиотеки, скажем, B. Если другой проект C хочет использовать A, то этот проект также требует использования библиотеки B.
Maven помогает избежать таких требований, чтобы обнаружить все необходимые библиотеки. Maven делает это, читая файлы проекта (pom.xml) зависимостей, выясняя их зависимости и так далее.
Нам нужно только определить прямую зависимость в каждом проекте. Maven обрабатывает все остальное автоматически.
Благодаря транзитивным зависимостям граф включаемых библиотек может быстро расти в значительной степени. Случаи могут возникнуть при наличии дублирующих библиотек. Maven предоставляет несколько функций для контроля степени переходных зависимостей.
Sr.No. | Характеристика и описание |
---|---|
1 |
Зависимость посредничество Определяет, какую версию зависимости следует использовать при обнаружении нескольких версий артефакта. Если две версии зависимостей находятся на одной и той же глубине в дереве зависимостей, будет использоваться первая объявленная зависимость. |
2 |
Управление зависимостями Непосредственно укажите версии артефактов, которые будут использоваться, когда они встречаются в переходных зависимостях. Например, проект C может включать B в качестве зависимости в своем разделе «Управление зависимостями» и напрямую контролировать, какую версию B следует использовать, когда на нее когда-либо ссылаются. |
3 |
Сфера зависимости Включает зависимости в соответствии с текущим этапом сборки. |
4 |
Исключенные зависимости Любая транзитивная зависимость может быть исключена с помощью элемента «exclusion». Например, A зависит от B, а B зависит от C, тогда A может пометить C как исключенное. |
5 |
Необязательные зависимости Любая транзитивная зависимость может быть помечена как необязательная с использованием «необязательного» элемента. Например, A зависит от B, а B зависит от C. Теперь B пометил C как необязательный. Тогда A не будет использовать C. |
Зависимость посредничество
Определяет, какую версию зависимости следует использовать при обнаружении нескольких версий артефакта. Если две версии зависимостей находятся на одной и той же глубине в дереве зависимостей, будет использоваться первая объявленная зависимость.
Управление зависимостями
Непосредственно укажите версии артефактов, которые будут использоваться, когда они встречаются в переходных зависимостях. Например, проект C может включать B в качестве зависимости в своем разделе «Управление зависимостями» и напрямую контролировать, какую версию B следует использовать, когда на нее когда-либо ссылаются.
Сфера зависимости
Включает зависимости в соответствии с текущим этапом сборки.
Исключенные зависимости
Любая транзитивная зависимость может быть исключена с помощью элемента «exclusion». Например, A зависит от B, а B зависит от C, тогда A может пометить C как исключенное.
Необязательные зависимости
Любая транзитивная зависимость может быть помечена как необязательная с использованием «необязательного» элемента. Например, A зависит от B, а B зависит от C. Теперь B пометил C как необязательный. Тогда A не будет использовать C.
Область зависимостей
Транзитивные зависимости Обнаружение может быть ограничено с использованием различных областей зависимости, как указано ниже.
Sr.No. | Область применения и описание |
---|---|
1 |
компилировать Эта область указывает, что зависимость доступна в classpath проекта. Это область действия по умолчанию. |
2 |
предоставлена Эта область указывает, что зависимость должна предоставляться JDK или веб-сервером / контейнером во время выполнения. |
3 |
время выполнения Эта область указывает, что зависимость не требуется для компиляции, но требуется во время выполнения. |
4 |
тестовое задание Эта область указывает, что зависимость доступна только для фаз компиляции и выполнения теста. |
5 |
система Эта область означает, что вы должны указать системный путь. |
6 |
Импортировать Эта область используется только в том случае, если зависимость имеет тип pom. Эта область указывает, что указанное POM должно быть заменено зависимостями в разделе <dependencyManagement> этого POM. |
компилировать
Эта область указывает, что зависимость доступна в classpath проекта. Это область действия по умолчанию.
предоставлена
Эта область указывает, что зависимость должна предоставляться JDK или веб-сервером / контейнером во время выполнения.
время выполнения
Эта область указывает, что зависимость не требуется для компиляции, но требуется во время выполнения.
тестовое задание
Эта область указывает, что зависимость доступна только для фаз компиляции и выполнения теста.
система
Эта область означает, что вы должны указать системный путь.
Импортировать
Эта область используется только в том случае, если зависимость имеет тип pom. Эта область указывает, что указанное POM должно быть заменено зависимостями в разделе <dependencyManagement> этого POM.
Управление зависимостями
Обычно у нас есть набор проектов в рамках общего проекта. В таком случае мы можем создать общий pom, имеющий все общие зависимости, а затем сделать этот pom родителем poms подпроекта. Следующий пример поможет вам понять эту концепцию.
Ниже приведены подробности приведенного выше графика зависимости.
- App-UI-WAR зависит от App-Core-lib и App-Data-lib.
- Root является родителем App-Core-lib и App-Data-lib.
- Root определяет Lib1, lib2, Lib3 как зависимости в своем разделе зависимостей.
Приложение-интерфейс-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>
Приложение-Core Пб
<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-данных Пб
<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>
корень
<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 (см. Тип упаковки Root. Это POM).
-
Нет необходимости указывать Lib1, lib2, Lib3 в качестве зависимости в App-UI-WAR. Maven использует механизм транзитивной зависимости для управления такими деталями.
Общие зависимости могут быть размещены в одном месте с использованием концепции родительского pom. Зависимости проекта App-Data-lib и App-Core-lib перечислены в проекте Root (см. Тип упаковки Root. Это POM).
Нет необходимости указывать Lib1, lib2, Lib3 в качестве зависимости в App-UI-WAR. Maven использует механизм транзитивной зависимости для управления такими деталями.
Maven — Автоматизация развертывания
При разработке проекта обычно процесс развертывания состоит из следующих этапов:
-
Верните код из всего проекта в SVN (систему контроля версий) или в хранилище исходного кода и пометьте его.
-
Загрузите полный исходный код из SVN.
-
Создайте приложение.
-
Сохраните выходные данные сборки либо файл WAR, либо файл EAR в общем сетевом расположении.
-
Получите файл из сети и разверните файл на производственном сайте.
-
Обновлена документация с указанием даты и обновленного номера версии приложения.
Верните код из всего проекта в 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 |
СКМ Настраивает расположение SVN, откуда Maven будет проверять исходный код. |
2 |
Хранилища Место, где будет построен WAR / EAR / JAR или любой другой артефакт после успешной сборки кода. |
3 |
Plugin maven-release-plugin настроен для автоматизации процесса развертывания. |
СКМ
Настраивает расположение SVN, откуда Maven будет проверять исходный код.
Хранилища
Место, где будет построен WAR / EAR / JAR или любой другой артефакт после успешной сборки кода.
Plugin
maven-release-plugin настроен для автоматизации процесса развертывания.
Плагин Maven Release
Maven выполняет следующие полезные задачи, используя maven-release-plugin .
mvn release:clean
Он очищает рабочее пространство в случае, если последний процесс выпуска не был успешным.
mvn release:rollback
Откатите изменения, внесенные в код и конфигурацию рабочей области, если последний процесс выпуска не был успешным.
mvn release:prepare
Выполняет несколько операций, например:
-
Проверяет, есть ли какие-либо незафиксированные локальные изменения или нет.
-
Гарантирует, что нет никаких SNAPSHOT-зависимостей.
-
Изменяет версию приложения и удаляет SNAPSHOT из версии, чтобы сделать релиз.
-
Обновите pom-файлы до SVN.
-
Запустите тестовые случаи.
-
Зафиксируйте измененные файлы POM.
-
Пометьте код в Subversion
-
Увеличьте номер версии и добавьте SNAPSHOT для будущего выпуска.
-
Зафиксируйте измененные файлы POM в SVN.
Проверяет, есть ли какие-либо незафиксированные локальные изменения или нет.
Гарантирует, что нет никаких 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 — веб-приложение
В этой главе рассказывается, как управлять веб-проектом с помощью 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-приложения с именами грузовиков (как указано в artifactId), как указано в следующем снимке. Следующая структура каталогов обычно используется для веб-приложений:
Maven использует стандартную структуру каталогов. Используя приведенный выше пример, мы можем понять следующие ключевые понятия —
Sr.No. | Структура папки и описание |
---|---|
1 |
грузовые автомобили содержит папку src и pom.xml. |
2 |
SRC / Основной / WebApp содержит index.jsp и папку WEB-INF. |
3 |
SRC / Главный / WebApp / WEB-INF содержит web.xml |
4 |
SRC / основные / ресурсы он содержит файлы изображений / свойств. |
грузовые автомобили
содержит папку src и pom.xml.
SRC / Основной / WebApp
содержит index.jsp и папку WEB-INF.
SRC / Главный / WebApp / WEB-INF
содержит web.xml
SRC / основные / ресурсы
он содержит файлы изображений / свойств.
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>, в каталог веб-приложения веб-сервера и перезапустите веб-сервер.
Тестовое веб-приложение
Запустите веб-приложение, используя URL-адрес: http: // <имя сервера>: <номер порта> /trucks/index.jsp .
Проверьте вывод.
Maven — Eclipse IDE
Eclipse предоставляет отличный плагин m2eclipse, который плавно интегрирует Maven и Eclipse вместе.
Некоторые из особенностей m2eclipse перечислены ниже —
-
Вы можете запустить цели Maven из Eclipse.
-
Вы можете просмотреть вывод команд Maven внутри Eclipse, используя его собственную консоль.
-
Вы можете обновить зависимости maven с помощью IDE.
-
Вы можете запускать сборки Maven из Eclipse.
-
Он управляет зависимостями для пути сборки Eclipse на основе pom.xml Maven.
-
Он разрешает зависимости Maven из рабочей области Eclipse без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
-
Он автоматически загружает необходимые зависимости и источники из удаленных репозиториев Maven.
-
Он предоставляет мастера для создания новых проектов Maven, pom.xml и включения поддержки Maven в существующих проектах.
-
Он обеспечивает быстрый поиск зависимостей в удаленных репозиториях Maven.
Вы можете запустить цели Maven из Eclipse.
Вы можете просмотреть вывод команд Maven внутри Eclipse, используя его собственную консоль.
Вы можете обновить зависимости maven с помощью IDE.
Вы можете запускать сборки Maven из Eclipse.
Он управляет зависимостями для пути сборки Eclipse на основе pom.xml Maven.
Он разрешает зависимости Maven из рабочей области Eclipse без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
Он автоматически загружает необходимые зависимости и источники из удаленных репозиториев Maven.
Он предоставляет мастера для создания новых проектов Maven, pom.xml и включения поддержки Maven в существующих проектах.
Он обеспечивает быстрый поиск зависимостей в удаленных репозиториях Maven.
Установка плагина m2eclipse
Используйте одну из следующих ссылок для установки m2eclipse —
Затмение | URL |
---|---|
Затмение 3.5 (Галлилео) | |
Затмение 3.6 (Гелиос) |
Установка m2eclipse в Eclipse 3.5 (Gallileo)
Установка m2eclipse в Eclipse 3.6 (Helios)
Следующий пример поможет вам использовать преимущества интеграции Eclipse и Maven.
Импортировать проект maven в Eclipse
-
Откройте Затмение.
-
Выберите File> Import> option.
-
Выберите Maven Projects Option. Нажмите на кнопку «Далее».
Откройте Затмение.
Выберите File> Import> option.
Выберите Maven Projects Option. Нажмите на кнопку «Далее».
-
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительское банковское дело проекта Java в предыдущих главах. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
-
Нажмите кнопку Готово.
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительское банковское дело проекта Java в предыдущих главах. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Нажмите кнопку Готово.
Теперь вы можете увидеть проект Maven в затмении.
Теперь посмотрим на свойства потребительского банковского проекта. Вы можете видеть, что Eclipse добавил зависимости Maven к пути сборки Java.
Теперь пришло время построить этот проект, используя maven с возможностью затмения.
- Щелкните правой кнопкой мыши на проекте consumerBanking, чтобы открыть контекстное меню.
- Выберите «Запуск от имени».
- Тогда Maven пакет вариант.
Maven начнет строить проект. Вы можете увидеть вывод в Eclipse Console следующим образом:
[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. Выберите опцию « Запуск от имени» . Затем выберите Приложение Java .
Вы увидите результат следующим образом —
Hello World!
Maven — NetBeans
NetBeans 6.7 и новее имеет встроенную поддержку Maven. В случае предыдущей версии плагин Maven доступен в диспетчере плагинов. В этом примере мы используем NetBeans 6.9.
Некоторые функции NetBeans перечислены ниже.
-
Вы можете запускать цели Maven из NetBeans.
-
Вы можете просмотреть вывод команд Maven внутри NetBeans, используя его собственную консоль.
-
Вы можете обновить зависимости maven с помощью IDE.
-
Вы можете запускать сборки Maven из NetBeans.
-
NetBeans выполняет управление зависимостями автоматически на основе pom.xml Maven.
-
NetBeans разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
-
NetBeans автоматически загружает требуемые зависимости и источники из удаленных репозиториев Maven.
-
NetBeans предоставляет мастера для создания новых проектов Maven, pom.xml.
-
NetBeans предоставляет браузер Maven Repository, который позволяет вам просматривать ваш локальный репозиторий и зарегистрированные внешние репозитории Maven.
Вы можете запускать цели Maven из NetBeans.
Вы можете просмотреть вывод команд Maven внутри NetBeans, используя его собственную консоль.
Вы можете обновить зависимости maven с помощью IDE.
Вы можете запускать сборки Maven из NetBeans.
NetBeans выполняет управление зависимостями автоматически на основе pom.xml Maven.
NetBeans разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
NetBeans автоматически загружает требуемые зависимости и источники из удаленных репозиториев Maven.
NetBeans предоставляет мастера для создания новых проектов Maven, pom.xml.
NetBeans предоставляет браузер Maven Repository, который позволяет вам просматривать ваш локальный репозиторий и зарегистрированные внешние репозитории Maven.
Следующий пример поможет вам использовать преимущества интеграции NetBeans и Maven.
Откройте проект Maven в NetBeans
-
Откройте NetBeans.
-
Выберите меню «Файл»> «Открыть проект» .
-
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительский банк проекта Java. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Откройте NetBeans.
Выберите меню «Файл»> «Открыть проект» .
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительский банк проекта Java. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Теперь вы можете увидеть проект Maven в NetBeans. Взгляните на проект библиотеки и тестовые библиотеки. Вы можете видеть, что NetBeans добавил зависимости Maven к своему пути сборки.
Создайте Maven-проект в NetBeans
Теперь пришло время построить этот проект, используя возможности NetBeans maven.
- Щелкните правой кнопкой мыши на проекте 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 as option. Вы увидите результат в консоли 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 ------------------------------------------------------------------------
Maven — IntelliJ IDEA IDE Интеграция
IntelliJ IDEA имеет встроенную поддержку Maven. В этом примере мы используем IntelliJ IDEA Community Edition 11.1.
Некоторые функции IntelliJ IDEA перечислены ниже —
-
Вы можете запустить цели Maven от IntelliJ IDEA.
-
Вы можете просмотреть вывод команд Maven внутри IntelliJ IDEA, используя его собственную консоль.
-
Вы можете обновить зависимости maven в IDE.
-
Вы можете запускать сборки Maven из IntelliJ IDEA.
-
IntelliJ IDEA выполняет управление зависимостями автоматически на основе pom.xml Maven.
-
IntelliJ IDEA разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
-
IntelliJ IDEA автоматически загружает необходимые зависимости и источники из удаленных репозиториев Maven.
-
IntelliJ IDEA предоставляет мастера для создания новых проектов Maven, pom.xml.
Вы можете запустить цели Maven от IntelliJ IDEA.
Вы можете просмотреть вывод команд Maven внутри IntelliJ IDEA, используя его собственную консоль.
Вы можете обновить зависимости maven в IDE.
Вы можете запускать сборки Maven из IntelliJ IDEA.
IntelliJ IDEA выполняет управление зависимостями автоматически на основе pom.xml Maven.
IntelliJ IDEA разрешает зависимости Maven из своей рабочей области без установки в локальный репозиторий Maven (требуется, чтобы проект зависимостей находился в той же рабочей области).
IntelliJ IDEA автоматически загружает необходимые зависимости и источники из удаленных репозиториев Maven.
IntelliJ IDEA предоставляет мастера для создания новых проектов Maven, pom.xml.
Следующий пример поможет вам использовать преимущества интеграции IntelliJ IDEA и Maven.
Создать новый проект в IntelliJ IDEA
Мы импортируем проект Maven с помощью мастера новых проектов.
-
Откройте IntelliJ IDEA.
-
Выберите меню «Файл»> «Новый проект» .
-
Выберите проект импорта из существующей модели.
Откройте IntelliJ IDEA.
Выберите меню «Файл»> «Новый проект» .
Выберите проект импорта из существующей модели.
- Выберите опцию Maven
-
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительский банк Java Project. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
Выберите местоположение проекта, где проект был создан с использованием Maven. Мы создали потребительский банк Java Project. Перейдите к главе «Создание проекта Java», чтобы узнать, как создать проект с помощью Maven.
- Выберите проект Maven для импорта.
- Введите название проекта и нажмите «Готово».
-
Теперь вы можете увидеть проект Maven в IntelliJ IDEA. Взгляните на внешние библиотеки проекта consumerBanking. Вы можете видеть, что IntelliJ IDEA добавил зависимости Maven к своему пути сборки в разделе Maven.
Теперь вы можете увидеть проект Maven в IntelliJ IDEA. Взгляните на внешние библиотеки проекта consumerBanking. Вы можете видеть, что IntelliJ IDEA добавил зависимости Maven к своему пути сборки в разделе Maven.
Создайте Maven проект в IntelliJ IDEA
Теперь пришло время построить этот проект, используя возможности IntelliJ IDEA.
-
Выберите проект customerBanking.
-
Выберите меню «Buid»> «Перестроить проект»
Выберите проект customerBanking.
Выберите меню «Buid»> «Перестроить проект»
Вы можете увидеть результат в IntelliJ IDEA Console
4:01:56 PM Compilation completed successfully
Запустить приложение в IntelliJ IDEA
-
Выберите проект customerBanking.
-
Щелкните правой кнопкой мыши на App.java, чтобы открыть контекстное меню.
-
выберите Запустить App.main ()
Выберите проект customerBanking.
Щелкните правой кнопкой мыши на App.java, чтобы открыть контекстное меню.
выберите Запустить App.main ()
Вы увидите результат в IntelliJ IDEA Console.