Maven POM

POM (Project Object Model) — основной конфигурационный файл Maven в формате XML, имя по умолчанию —pom.xml。

POM — базовая единица работы в проекте Maven. Это XML-файл, который содержит основную информацию о проекте, используется для описания того, как проект собирается, объявления зависимостей проекта и так далее.

При выполнении задачи или цели Maven ищет POM в текущем каталоге, получает необходимую информацию о конфигурации, а затем выполняет цель.

В POM можно указать следующие конфигурации:

  • Зависимости проекта
  • Плагины
  • Цели выполнения
  • Профили сборки проекта
  • Версия проекта
  • Список разработчиков проекта
  • Информация о связанных списках рассылки

Перед созданием POM нам сначала нужно описать группу проекта (groupId), уникальный идентификатор проекта.

<project> <!--Версия модели--> <modelVersion>4.0.0</modelVersion> <!--Уникальный идентификатор компании или организации, и путь, создаваемый при конфигурации, также происходит от него. Например, com.companyname.project-group, Maven поместит jar-пакет, собранный из этого проекта, в локальный путь: /com/companyname/project-group--> <groupId>com.companyname.project-group</groupId> <!--Уникальный идентификатор проекта. У groupId может быть несколько проектов, и они различаются по artifactId.--> <artifactId>project</artifactId> <!--Version--> <version>1.0</version> </project>

Все файлы POM требуют элемент project и три обязательных поля: groupId, artifactId и version.

Узел Описание
project Корневой тег проекта.
modelVersion Версию модели необходимо установить в 4.0.
groupId Это идентификатор группы проектов. Обычно он уникален в пределах организации или проекта. Например, банковская организация com.companyname.project-group владеет всеми проектами, связанными с банковским делом.
artifactId Это идентификатор проекта. Обычно это имя проекта. Например, Consumer Banking. groupId и artifactId вместе определяют расположение артефакта в репозитории.
version

Это номер версии проекта. В репозитории артефактов он используется для различения разных версий. Например:

com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1

Базовая структура POM-файла:

Пример

<project>
    <!-- 1. Основная информация-->
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <!-- 2. Метаинформация-->
    <name>Моё приложение</name>
    <description>Демонстрационный проект</description>
    <url>https://example.com</url>

    <!-- 3. Управление зависимостями-->
    <dependencies>...</dependencies>

    <!-- 4. Конфигурация сборки-->
    <build>...</build>

    <!-- 5. Конфигурация окружения-->
    <properties>...</properties>
    <repositories>...</repositories>
</project>

Координаты проекта (обязательно):

ЭлементОписаниеПример
modelVersionВерсия модели POM (фиксированная4.0.0)<modelVersion>4.0.0</modelVersion>
groupIdИдентификатор организации/компании (обратное доменное имя)<groupId>com.example</groupId>
artifactIdИмя проекта<artifactId>my-app</artifactId>
versionВерсия проекта<version>1.0.0</version>
packagingТип упаковки (jar/war/pom)<packaging>jar</packaging>

Метаинформация (необязательно):

ЭлементОписание
nameНазвание проекта (для отображения)
descriptionОписание проекта
urlДомашняя страница проекта
licensesИнформация о лицензии
organizationИнформация об организации

Пример

<name>Моё классное приложение</name>
<description>Демонстрационный проект для изучения Maven</description>
<url>https://github.com/example/my-app</url>

Управление зависимостями

Зависимости проекта можно определить в POM-файле:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
ЭлементОписание
groupIdИдентификатор организации зависимости
artifactIdНазвание проекта зависимости
versionВерсия зависимости
scopeОбласть действия зависимости (compile/test/provided/runtime)
optionalЯвляется ли зависимость необязательной (по умолчаниюfalse)

Управление плагинами

Плагины, используемые в процессе сборки, также можно определить в файле POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Часто используемые плагины:

  • maven-compiler-plugin: Указать версию Java

  • maven-surefire-plugin: Управлять выполнением тестов

  • maven-jar-plugin: Настроить JAR-пакет

Другие общие элементы

properties: Определить некоторые переменные свойств в проекте.

Используется для определения переменных и предотвращения дублирования:

<properties>
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Ссылка в зависимостях:

<version>${java.version}</version>

repositories: Конфигурация репозитория.

Указать удалённый репозиторий:

<repositories>
    <repository>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

dependencyManagement: Используется для управления версиями зависимостей, особенно в многомодульных проектах.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.9</version>
        </dependency>
    </dependencies>
</dependencyManagement>

profiles: Используется для определения различных конфигураций сборки, позволяя выполнять сборки в соответствии с разными окружениями.

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <environment>dev</environment>
        </properties>
    </profile>
    <profile>
        <id>production</id>
        <properties>
            <environment>prod</environment>
        </properties>
    </profile>
</profiles>

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

Наследование:Через элемент parent POM-файл может наследовать конфигурацию другого POM-файла:

<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

Агрегация:Через элемент modules POM-файл может управлять несколькими подмодулями:

<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

Полный пример

Простой пример полного POM:

Пример

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>Моё приложение</name>
    <description>Демонстрационный проект</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Родительский (супер) POM

Родительский (супер) POM — это POM по умолчанию в Maven. Все POM наследуются от родительского POM (независимо от того, явно ли определён этот родительский POM). Родительский POM содержит настройки по умолчанию, которые можно наследовать. Поэтому, когда Maven обнаруживает, что ему нужно загрузить зависимость, указанную в POM, он загружает её из репозитория по умолчанию http://repo1.maven.org/maven2, настроенного в супер-POM.

Maven использует эффективный POM (Super POM плюс собственную конфигурацию проекта) для выполнения связанных целей. Это помогает разработчикам делать как можно меньше конфигураций в pom.xml, но, конечно, эти конфигурации можно переопределить.

Используйте следующую команду для просмотра конфигурации Super POM по умолчанию:

mvn help:effective-pom

Затем мы создаём каталог MVN/project и создаём 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> <!--Уникальный идентификатор компании или организации, и путь, генерируемый при конфигурации, также происходит из него. Например, com.companyname.project-group, Maven поместит jar-пакет, собранный из этого проекта, в локальный путь: /com/companyname/project-group--> <groupId>com.companyname.project-group</groupId> <!--Уникальный идентификатор проекта. У groupId может быть несколько проектов, и они различаются по artifactId.--> <artifactId>project</artifactId> <!--Version--> <version>1.0</version> </project>

В командной консоли перейдите в каталог MVN/project и выполните следующую команду:

C:\MVN\project>mvn help:effective-pom

Maven начнёт обработку и отобразит effective-pom.

[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:36 min
[INFO] Finished at: 2018-09-05T11:31:28+08:00
[INFO] Final Memory: 15M/149M
[INFO] ------------------------------------------------------------------------

Полученный Effective POM отображается в консоли; после наследования и интерполяции конфигурация вступает в силу.

<?xml version="1.0" encoding="UTF-8"?> <!-- ================================================================= --> <!-- --> <!-- Сгенерировано Maven Help Plugin 2012-07-05T11:41:51 --> <!-- См.: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ================================================================= --> <!-- ================================================================= --> <!-- --> <!-- Effective POM для проекта --> <!-- 'com.companyname.project-group:project-name:jar:1.0' --> <!-- --> <!-- ================================================================= --> <проект 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 h ttp://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</name> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories> <reporting> <outputDirectory>C:\MVN\project\target/site</outputDirectory> </reporting> </project>

В приведённом выше pom.xml вы можете увидеть структуру каталогов исходного кода проекта по умолчанию, выходной каталог, необходимые плагины, репозитории и каталоги отчётов, которые нужны Maven при выполнении целей.

Файл pom.xml Maven не нужно писать вручную.

Maven предоставляет большое количество плагинов архетипов для создания проектов, включая структуру проекта и pom.xml.


Подробное объяснение тегов POM

Ниже приведено объяснение по категориям всех важных тегов в pom.xml, охватывающее основное содержимое, такое как информация о проекте, управление зависимостями, конфигурация сборки и настройки окружения.

Теги, которые должны содержать все POM-файлы:modelVersion, groupId, artifactId и version。

Тег Категория Описание Пример/Необязательные значения Обязательно ли
Основная информация
<modelVersion> Структура проекта Версия модели POM 4.0.0 Да
<groupId> Координаты Идентификатор организации (обратное доменное имя) com.example Да
<artifactId> Координаты Имя проекта my-project Да
<version> Координаты Версия проекта 1.0.0-SNAPSHOT Да
<packaging> Тип проекта Формат упаковки jar/war/pom Нет (по умолчанию jar)
<name> Метаинформация Отображаемое имя проекта My Application нет
<description> Метаинформация Описание проекта A demo project нет
<url> Метаинформация URL домашней страницы проекта https://example.com нет
Управление зависимостями
<dependencies> Зависимость Контейнер списка зависимостей Содержит несколько<dependency> нет
<dependency> Зависимость Определение одной зависимости СодержитgroupIdи другие подтеги Optional
<scope> Зависимость Область действия зависимости compile/test/provided/runtime Нет (по умолчанию compile)
<optional> Зависимость Является ли зависимость опциональной true/false Нет (по умолчанию false)
<exclusions> Зависимость Исключить транзитивные зависимости Содержит<exclusion>Список нет
Конфигурация сборки
<build> Сборка Контейнер конфигурации сборки Содержит конфигурации плагинов/ресурсов и т. д. нет
<plugins> Сборка Контейнер списка плагинов Содержит несколько<plugin> нет
<plugin> Сборка Определение одного плагина Необходимо указатьgroupIdиartifactId Optional
<resources> Сборка Конфигурация файла ресурсов Определение<resource>Путь нет
<testResources> Сборка Конфигурация файла тестовых ресурсов Аналогично<resources> нет
<finalName> Сборка Имя итогового файла пакета my-app нет
Конфигурация окружения
<properties> Конфигурация Контейнер пользовательских переменных Определяет пары ключ-значение нет
<java.version> Свойства Переменная версии Java 11/17ожидание нет
<repositories> Репозитории Пользовательский список удалённых репозиториев Содержит<repository> нет
<pluginRepositories> Репозиторий Пользовательский репозиторий плагинов Аналогично<repositories> нет
Многомодульное управление
<modules> Модули Список подмодулей Содержит несколько<module> Требуется для агрегаторных проектов
<parent> Наследовать Ссылка на родительский POM Необходимо указать координаты родительского проекта Требуется для наследуемых проектов
<dependencyManagement> Зависимости Централизованное управление версиями зависимостей Определяет версии, но не вводит нет
<profiles> Конфигурация Контейнер профиля окружения Определяет различные конфигурации окружения нет
Другая информация
<licenses> Юридическая информация Информация о лицензии Содержит<license> нет
<developers> Люди Список разработчиков Содержит<developer> нет
<contributors> Люди Список участников Аналогично<developers> нет
<issueManagement> Управление Система отслеживания ошибок Определяет URL системы отслеживания ошибок нет
<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.0http://maven.apache.org/maven-v4_0_0.xsd"> <!--Координаты родительского проекта. Если значение для элемента не указано в проекте, соответствующее значение из родительского проекта используется по умолчанию. Координаты включают group ID, artifact ID и version.--> <parent> <!--Идентификатор артефакта наследуемого родительского проекта--> <artifactId /> <!--Глобально уникальный идентификатор наследуемого родительского проекта--> <groupId /> <!--Версия наследуемого родительского проекта--> <version /> <!--Относительный путь к файлу pom.xml родительского проекта. Относительный путь позволяет выбрать другой путь. Значение по умолчанию — ../pom.xml. Maven сначала ищет родительский pom в месте сборки текущего проекта, затем в этом расположении в файловой системе (расположение relativePath), затем в локальном репозитории и, наконец, в удалённом репозитории.--> <relativePath /> </parent> <!--Объявляет, какой версии модели POM следует дескриптор проекта. Сама версия модели меняется очень редко, но она всё же необходима для обеспечения стабильности, когда Maven вводит новые возможности или другие изменения модели.--> <modelVersion>4.0.0</modelVersion> <!--Глобально уникальный идентификатор проекта, обычно использующий полностью уточнённое имя пакета, чтобы отличать этот проект от других. Путь, создаваемый во время сборки, также выводится из него; например, com.mycompany.app создаёт относительный путь: /com/mycompany/app--> <groupId>asia.banseon</groupId> <!--Идентификатор артефакта, который вместе с group ID однозначно идентифицирует артефакт. Иными словами, у вас не может быть двух разных проектов с одинаковыми artifact ID и group ID; в пределах определённого group ID artifact ID также должен быть уникальным. Артефакт — это то, что создаётся или используется проектом. Артефакты, создаваемые Maven для проекта, включают JARs, исходный код, бинарные выпуски, WARs и т. д.--> <artifactId>banseon-maven2</artifactId> <!--Тип артефакта, создаваемого проектом, например, jar, war, ear, pom. Плагины могут создавать свои собственные типы артефактов, поэтому перечисленные выше не являются всеми типами артефактов.--> <packaging>jar</packaging> <!--Текущая версия проекта в формате: основная версия.дополнительная версия.инкрементальная версия-квалификатор номер версии--> <version>1.0-SNAPSHOT</version> <!--Название проекта, используемое в документации, создаваемой Maven--> <name>banseon-maven</name> <!--URL домашней страницы проекта, используемый в документации, создаваемой Maven--> <url>http://www.baidu.com/banseon</url> <!--Подробное описание проекта, используемое в документации, создаваемой Maven. Когда этот элемент можно описать в формате HTML (например, текст в CDATA игнорируется парсером, поэтому HTML-теги можно включать), описания в виде простого текста не рекомендуются. Если вам нужно изменить индексную страницу создаваемого веб-сайта, следует изменить собственный файл индексной страницы, а не изменять этот документ.--> <description>Maven-проект для изучения Maven.</description> <!--Описывает предварительные требования в среде сборки этого проекта.--> <prerequisites> <!--Минимальная версия Maven, необходимая для сборки этого проекта или использования этого плагина--> <maven /> </prerequisites> <!--Название и URL системы управления задачами проекта (Bugzilla, Jira, Scarab или любой другой системы управления задачами по вашему выбору). В этом примере это jira.--> <issueManagement> <!--Название системы управления задачами (например, jira),--> <system>jira</system> <!--URL системы управления задачами, используемой этим проектом--> <url>http://jira.baidu.com/banseon</url> </issueManagement> <!--Информация о непрерывной интеграции проекта--> <ciManagement> <!--Название системы непрерывной интеграции, например, continuum--> <system /> <!--URL-адрес системы непрерывной интеграции, используемой этим проектом (если у системы непрерывной интеграции есть веб-интерфейс).--> <url /> <!--Элементы конфигурации для уведомления разработчиков/пользователей при завершении сборки. Включает информацию о получателе уведомления и условия уведомления (ошибка, сбой, успех, предупреждение).--> <notifiers> <!--Настраивает способ, с помощью которого пользователи/разработчики уведомляются, когда сборка прерывается--> <notifier> <!--Канал, через который отправляются уведомления--> <type /> <!--Уведомлять ли при возникновении ошибки--> <sendOnError /> <!--Уведомлять ли при сбое сборки--> <sendOnFailure /> <!--Уведомлять ли при успешном завершении сборки--> <sendOnSuccess /> <!--Уведомлять ли при возникновении предупреждения--> <sendOnWarning /> <!--Устарело. Куда отправляются уведомления--> <address /> <!--Элемент конфигурации расширения--> <configuration /> </notifier> </notifiers> </ciManagement> <!--Год создания проекта, 4-значное число. Это значение необходимо при создании информации об авторских правах.--> <inceptionYear /> <!--Информация о списках рассылки, связанных с проектом--> <mailingLists> <!--Этот элемент описывает все списки рассылки, связанные с проектом. Автоматически создаваемый веб-сайт ссылается на эту информацию.--> <mailingList> <!--Имя списка рассылки--> <name>Demo</name> <!--Адрес или ссылка для отправки почты. Если это адрес электронной почты, при создании документации автоматически будет создана ссылка mailto:.--> <post>[email protected]</post> <!--Адрес или ссылка для подписки на список рассылки. Если это адрес электронной почты, при создании документации автоматически будет создана ссылка mailto:.--> <subscribe>[email protected]</subscribe> <!--Адрес или ссылка для отписки от списка рассылки. Если это адрес электронной почты, при создании документации автоматически будет создана ссылка mailto:.--> <unsubscribe>[email protected]</unsubscribe> <!--URL-адрес, по которому можно просматривать сообщения списка рассылки--> <archive>http:/hi.baidu.com/banseon/demo/dev/</archive> </mailingList> </mailingLists> <!--Список разработчиков проекта--> <developers> <!--Информация о разработчике проекта--> <developer> <!--Уникальный идентификатор разработчика проекта в SCM--> <id>HELLO WORLD</id> <!--Полное имя разработчика проекта--> <name>banseon</name> <!--Электронная почта разработчика проекта--> <email>[email protected]</email> <!--URL-адрес домашней страницы разработчика проекта--> <url /> <!--Роли, которые разработчик проекта играет в проекте. Элемент role описывает различные роли.--> <roles> <role>Руководитель проекта</role> <role>Архитектор</role> </roles> <!--Организация, к которой принадлежит разработчик проекта--> <organization>демо</organization> <!--URL организации, к которой принадлежит разработчик проекта--> <organizationUrl>http://hi.baidu.com/banseon</organizationUrl> <!--Свойства разработчика проекта, например, как обрабатывается обмен мгновенными сообщениями, и т. д.--> <properties> <dept>Нет</dept> </properties> <!--Часовой пояс разработчика проекта, целое число в диапазоне от -11 до 12.--> <timezone>-5</timezone> </developer> </developers> <!--Список других участников проекта--> <contributors> <!--Другие участники проекта. См. элемент developers/developer--> <contributor> <name /> <email /> <url /> <organization /> <organizationUrl /> <roles /> <timezone /> <properties /> </contributor> </contributors> <!--Этот элемент описывает список всех лицензий проекта. Следует перечислять только список лицензий проекта, а не список лицензий зависимых проектов. Если указано несколько лицензий, пользователи могут выбрать одну из них, а не принимать все лицензии.--> <licenses> <!--Описывает лицензию проекта. Используется для создания страницы лицензии веб-сайта проекта. Некоторые другие отчёты и проверки также используют этот элемент.--> <license> <!--Юридическое название, используемое для лицензии--> <name>Apache 2</name> <!--URL-адрес страницы с официальным текстом лицензии--> <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url> <!--Основной метод распространения проекта: repo — можно загрузить из репозитория Maven; manual — пользователь должен вручную загрузить и установить зависимости--> <distribution>repo</distribution> <!--Дополнительная информация о лицензии--> <comments>Дружественная к бизнесу лицензия OSS</comments> </license> </licenses> <!--Тег SCM (Source Control Management) позволяет настроить ваш репозиторий кода для использования веб-сайтом Maven и другими плагинами.--> <scm> <!--URL-адрес SCM, который описывает репозиторий и способ подключения к нему. Подробности см. в форматах URL и списке, предоставленных SCM. Это подключение доступно только для чтения.--> <соединение> scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) </connection> <!--Используется разработчиками, аналогично элементу connection. То есть это подключение не только для чтения.--> <developerConnection> scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk </developerConnection> <!--Тег текущего кода, по умолчанию HEAD на этапе разработки--> <tag /> <!--URL-адрес, указывающий на просматриваемый репозиторий SCM проекта (например, ViewVC или Fisheye).--> <url>http://svn.baidu.com/banseon</url> </scm> <!--Описывает различные атрибуты организации, которой принадлежит проект. Используется в документации, создаваемой Maven.--> <organization> <!--Полное название организации--> <name>demo</name> <!--URL домашней страницы организации--> <url>http://www.baidu.com/banseon</url> </organization> <!--Информация, необходимая для сборки проекта--> <build> <!--Этот элемент задаёт каталог исходного кода проекта. При сборке проекта система сборки компилирует исходный код в этом каталоге. Этот путь указан относительно pom.xml.--> <sourceDirectory /> <!--Этот элемент задаёт каталог исходных скриптов проекта. Этот каталог отличается от каталога исходного кода: в большинстве случаев содержимое этого каталога копируется в выходной каталог (поскольку скрипты интерпретируются, а не компилируются).--> <scriptSourceDirectory /> <!--Этот элемент задаёт каталог исходного кода, используемый для модульных тестов проекта. При тестировании проекта система сборки компилирует исходный код в этом каталоге. Этот путь указан относительно pom.xml.--> <testSourceDirectory /> <!--Каталог, в котором хранятся скомпилированные файлы классов приложения.--> <outputDirectory /> <!--Каталог, в котором хранятся скомпилированные файлы классов тестов.--> <testOutputDirectory /> <!--Использует набор расширений сборки из этого проекта.--> <extensions> <!--Описывает используемые расширения сборки.--> <extension> <!--groupId расширения сборки.--> <groupId /> <!--artifactId расширения сборки.--> <artifactId /> <!--Версия расширения сборки.--> <version /> </extension> </extensions> <!--Значение по умолчанию, когда проект не указывает цель (в Maven 2 называемую фазой).--> <defaultGoal /> <!--Этот элемент описывает список всех путей к ресурсам, связанным с проектом, таких как файлы свойств, относящиеся к проекту. Эти ресурсы включаются в окончательный упакованный файл.--> <resources> <!--Этот элемент описывает все пути к ресурсам, связанным с проектом или с тестами.--> <resource> <!--Описывает целевой путь для ресурса. Этот путь указывается относительно каталога target/classes (например, ${project.build.outputDirectory}). Например, если вы хотите, чтобы ресурс находился в определённом пакете (org.apache.maven.messages), необходимо задать этот элемент как org/apache/maven/messages. Однако, если вы просто хотите разместить ресурс в структуре исходных каталогов, эта конфигурация не требуется.--> <targetPath /> <!--Использовать ли значения параметров вместо имён параметров. Значения параметров берутся из элемента properties или из свойств, настроенных в файлах, которые перечислены в элементе filters.--> <filtering /> <!--Описывает каталог, в котором хранятся ресурсы. Этот путь указывается относительно пути POM.--> <directory /> <!--Список шаблонов включения, например, **/*.xml.--> <includes /> <!--Список шаблонов исключения, например, **/*.xml.--> <excludes /> </resource> </resources> <!--Этот элемент описывает все пути к ресурсам, связанным с модульными тестами, такие как файлы свойств, относящиеся к модульным тестам.--> <testResources> <!--Этот элемент описывает все пути к ресурсам, связанным с тестами. См. описание элемента build/resources/resource.--> <testResource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </testResource> </testResources> <!--Каталог, в котором хранятся все файлы, созданные при сборке.--> <directory /> <!--Имя файла создаваемого артефакта. Значение по умолчанию — ${artifactId}-${version}.--> <finalName /> <!--Список файлов свойств фильтра, используемых при включённой фильтрации.--> <filters /> <!--Информация о плагине по умолчанию, на которую могут ссылаться подпроекты. Эта конфигурация плагина не разрешается и не привязывается к жизненному циклу, пока на неё не ссылаются. Любая локальная конфигурация для данного плагина переопределяет конфигурацию, указанную здесь.--> <pluginManagement> <!--Список используемых плагинов.--> <plugins> <!--Элемент plugin содержит информацию, необходимую для описания плагина.--> <plugin> <!--groupId плагина в репозитории.--> <groupId /> <!--artifactId плагина в репозитории.--> <artifactId /> <!--Версия (или диапазон версий) используемого плагина.--> <version /> <!--Следует ли загружать расширения Maven (такие как обработчики упаковки и типов) из этого плагина. По соображениям производительности этот элемент устанавливается в enabled только тогда, когда загрузка действительно необходима.--> <extensions /> <!--Конфигурация для выполнения набора целей в жизненном цикле сборки. Каждая цель может иметь разную конфигурацию.--> <executions> <!--Элемент execution содержит информацию, необходимую для выполнения плагина.--> <execution> <!--Идентификатор цели выполнения, используемый для идентификации цели в процессе сборки или для сопоставления целей выполнения, которые должны быть объединены при наследовании.--> <id /> <!--Фаза жизненного цикла сборки, к которой привязана цель. Если пропущено, цель привязывается к фазе по умолчанию, настроенной в исходных данных.--> <phase /> <!--Цель, настроенная для выполнения.--> <goals /> <!--Передаётся ли конфигурация дочерним POM.--> <inherited /> <!--Конфигурация как объект DOM.--> <configuration /> </execution> </executions> <!--Дополнительные зависимости, необходимые проекту для подключения плагина.--> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> <!--Передаётся ли какая-либо конфигурация в подпроекты.--> <inherited /> <!--Конфигурация как объект DOM.--> <configuration /> </plugin> </plugins> </pluginManagement> <!--Список используемых плагинов.--> <plugins> <!--См. элемент build/pluginManagement/plugins/plugin.--> <plugin> <groupId /> <artifactId /> <version /> <extensions /> <executions> <execution> <id /> <phase /> <goals /> <inherited /> <configuration /> </execution> </executions> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> <goals /> <inherited /> <configuration /> </plugin> </plugins> </build> <!--Перечисленные профили сборки проекта, которые изменяют процесс сборки при активации.--> <profiles> <!--Активирует профиль сборки на основе параметров окружения или параметров командной строки.--> <profile> <!--Уникальный идентификатор профиля сборки. Используется для активации из командной строки, а также для объединения профилей с одинаковым идентификатором при наследовании.--> <id /> <!--Условная логика, которая автоматически запускает профиль. Активация — это ключ к включению профиля. Сила профиля заключается в его способности автоматически использовать определенные конкретные значения в определенных средах; эти среды задаются через элемент activation. Элемент activation — не единственный способ активировать профиль.--> <activation> <!--Флаг, указывающий, активен ли профиль по умолчанию.--> <activeByDefault /> <!--Профиль активируется, когда обнаружен подходящий JDK. Например, 1.4 активирует JDK 1.4, 1.4.0_2, а !1.4 активирует все JDK, версия которых не начинается с 1.4.--> <jdk /> <!--Профиль активируется, когда обнаружены соответствующие свойства операционной системы. Элемент os может определять некоторые свойства, связанные с операционной системой.--> <os> <!--Имя операционной системы, которая активирует профиль.--> <name>Windows XP</name> <!--Семейство, к которому принадлежит операционная система, активирующая профиль (например, 'windows').--> <family>Windows</family> <!--Архитектура операционной системы, активирующей профиль.--> <arch>x86</arch> <!--Версия операционной системы, активирующей профиль.--> <version>5.1.2600</version> </os> <!--Если Maven обнаруживает свойство (значение которого можно использовать в POM через ${name}), имеющее соответствующее имя и значение, профиль будет активирован. Если поле value пусто, то уже само наличие поля name свойства активирует профиль; в противном случае поле value свойства сопоставляется с учётом регистра.--> <property> <!--Имя свойства, которое активирует профиль.--> <name>mavenVersion</name> <!--Значение свойства, которое активирует профиль.--> <value>2.0.3</value> </property> <!--Задаёт имя файла и активирует профиль, проверяя, существует файл или нет. missing проверяет, существует ли файл; если он не существует, профиль активируется. С другой стороны, exists проверяет, существует ли файл; если он существует, профиль активируется.--> <file> <!--Если указанный файл существует, профиль активируется.--> <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ </exists> <!--Если указанный файл не существует, профиль активируется.--> <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ </missing> </file> </activation> <!--Информация, необходимая для сборки проекта. См. элемент build.--> <build> <defaultGoal /> <resources> <resource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </resource> </resources> <testResources> <testResource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </testResource> </testResources> <directory /> <finalName /> <filters /> <pluginManagement> <plugins> <!--См. элемент build/pluginManagement/plugins/plugin.--> <plugin> <groupId /> <artifactId /> <version /> <extensions /> <executions> <execution> <id /> <phase /> <goals /> <inherited /> <configuration /> </execution> </executions> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> <goals /> <inherited /> <configuration /> </plugin> </plugins> </pluginManagement> <plugins> <!--См. элемент build/pluginManagement/plugins/plugin.--> <plugin> <groupId /> <artifactId /> <version /> <extensions /> <executions> <execution> <id /> <phase /> <goals /> <inherited /> <configuration /> </execution> </executions> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> <goals /> <inherited /> <configuration /> </plugin> </plugins> </build> <!--Модули (иногда называемые подпроектами) собираются как часть проекта. Каждый перечисленный элемент module — относительный путь к каталогу этого модуля.--> <modules /> <!--Список удалённых репозиториев для обнаружения зависимостей и расширений.--> <repositories> <!--См. элемент repositories/repository.--> <repository> <releases> <enabled /> <updatePolicy /> <checksumPolicy /> </releases> <snapshots> <enabled /> <updatePolicy /> <checksumPolicy /> </snapshots> <id /> <name /> <url /> <layout /> </repository> </repositories> <!--Список удалённых репозиториев для обнаружения плагинов, которые используются для сборок и отчётности.--> <pluginRepositories> <!--Содержит информацию, необходимую для подключения к удалённым репозиториям плагинов. См. элемент repositories/repository.--> <pluginRepository> <releases> <enabled /> <updatePolicy /> <checksumPolicy /> </releases> <snapshots> <enabled /> <updatePolicy /> <checksumPolicy /> </snapshots> <id /> <name /> <url /> <layout /> </pluginRepository> </pluginRepositories> <!--Этот элемент описывает все зависимости, относящиеся к проекту. Эти зависимости образуют отдельные звенья в процессе сборки проекта. Они автоматически загружаются из репозиториев, определённых проектом. Для получения дополнительной информации см. механизм зависимостей проекта.--> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> <!--Устарело. Maven теперь игнорирует этот элемент.--> <reports /> <!--Этот элемент включает спецификации для генерации отчётов с использованием плагинов отчётности. Когда пользователь выполняет "mvn site", эти отчёты будут запущены. Ссылки на все отчёты можно увидеть в панели навигации страницы. См. элемент reporting.--> <reporting> ...... </reporting> <!--См. элемент dependencyManagement.--> <dependencyManagement> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> </dependencyManagement> <!--См. элемент distributionManagement.--> <distributionManagement> ...... </distributionManagement> <!--См. элемент properties.--> <properties /> </profile> </profiles> <!--Модули (иногда называемые подпроектами) собираются как часть проекта. Каждый перечисленный элемент module — это относительный путь к каталогу этого модуля.--> <modules /> <!--Список удалённых репозиториев для обнаружения зависимостей и расширений.--> <repositories> <!--Содержит информацию, необходимую для подключения к удалённым репозиториям.--> <repository> <!--Как обрабатывать загрузку версий типа release из удалённого репозитория.--> <releases> <!--true или false указывает, включён ли репозиторий для загрузки определённого типа артефакта (release, snapshot).--> <enabled /> <!--Этот элемент указывает, как часто происходят обновления. Maven сравнивает временные метки локального POM и удалённого POM. Возможные варианты: always, daily (по умолчанию), interval: X (где X — интервал времени в минутах), или never.--> <updatePolicy /> <!--Что делать, когда Maven не может проверить файл контрольной суммы артефакта: ignore, fail или warn.--> <checksumPolicy /> </releases> <!--Как обрабатывать загрузку snapshot-версий из удалённого репозитория. С двумя группами конфигурации, releases и snapshots, POM может применять разные стратегии для каждого типа артефакта в каждом отдельном репозитории. Например, кто-то может решить включить поддержку загрузки snapshot-версий только для целей разработки. См. элемент repositories/repository/releases.--> <snapshots> <enabled /> <updatePolicy /> <checksumPolicy /> </snapshots> <!--Уникальный идентификатор удалённого репозитория. Он может использоваться для сопоставления удалённых репозиториев, настроенных в файле settings.xml.--> <id>banseon-repository-proxy</id> <!--Имя удаленного репозитория--> <name>banseon-repository-proxy</name> <!--URL удаленного репозитория в формате protocol://hostname/path--> <url>http://192.168.1.169:9999/repository/</url> <!--Тип макета репозитория, используемый для размещения и сортировки артефактов, — может быть default (по умолчанию) или legacy (устаревший). Maven 2 предоставляет макет по умолчанию для своих репозиториев; однако Maven 1.x имеет другой макет. Мы можем использовать этот элемент, чтобы указать, является ли макет default (по умолчанию) или legacy (устаревший).--> <layout>default</layout> </repository> </repositories> <!--Список удаленных репозиториев, используемых для обнаружения плагинов, которые используются для сборок и отчетов--> <pluginRepositories> <!--Содержит информацию, необходимую для подключения к удаленным репозиториям плагинов. См. элемент repositories/repository.--> <pluginRepository> ...... </pluginRepository> </pluginRepositories> <!--Этот элемент описывает все зависимости, относящиеся к проекту. Эти зависимости образуют отдельные шаги в процессе сборки проекта. Они автоматически загружаются из репозиториев, определенных в проекте. Для получения дополнительной информации см. механизм зависимостей проекта.--> <dependencies> <dependency> <!--Идентификатор группы зависимости--> <groupId>org.apache.maven</groupId> <!--Идентификатор артефакта зависимости--> <artifactId>maven-artifact</artifactId> <!--Номер версии зависимости. В Maven 2 его также можно настроить как диапазон версий.--> <version>3.8.1</version> <!--Тип зависимости, тип по умолчанию — jar. Обычно он указывает расширение файла зависимости, но бывают исключения. Тип может быть сопоставлен другому расширению или классификатору. Типы часто соответствуют используемому способу упаковки, хотя бывают исключения. Некоторые примеры типов: jar, war, ejb-client и test-jar. Если для extensions установлено значение true, в плагине можно определить новые типы. Таким образом, приведенные выше примеры типов не являются полными.--> <type>jar</type> <!--Классификатор зависимости. Классификатор различает артефакты, которые принадлежат одному и тому же POM, но собираются разными способами. Имя классификатора добавляется к номеру версии в имени файла. Например, если вы хотите собрать два отдельных JAR-артефакта, один с использованием компилятора Java 1.4, а другой — компилятора Java 6, можно использовать классификаторы для создания двух отдельных JAR-артефактов.--> <classifier></classifier> <!--Область действия зависимости. Помогает определить, какие артефакты включаются во время процесса выпуска проекта. Подробности см. в механизме зависимостей. - compile: область по умолчанию, используется для компиляции - provided: похожа на compile, но указывает, что вы ожидаете, что JDK или контейнер предоставят её, аналогично classpath - runtime: необходима для выполнения - test: используется для тестовых задач - system: требует, чтобы соответствующие элементы были предоставлены извне. Получается через systemPath - systemPath: используется только когда область действия — system. Предоставляет соответствующий путь - optional: когда сам проект является зависимым, отмечает, является ли зависимость транзитивной. Используется для транзитивных зависимостей.--> <scope>test</scope> <!--Только для использования с областью действия system. Обратите внимание, что использование этого элемента не рекомендуется, и элемент может быть переопределён в новых версиях. Этот элемент задаёт путь в файловой системе для зависимости. Требуется абсолютный путь, а не относительный. Рекомендуется использовать свойства для сопоставления абсолютных путей, например ${java.home}.--> <systemPath></systemPath> <!--При вычислении транзитивных зависимостей перечисляет набор исключаемых артефактов зависимостей из списка артефактов зависимостей. То есть сообщает Maven, что вы зависите только от указанного проекта, а не от зависимостей этого проекта. Этот элемент в основном используется для разрешения конфликтов версий.--> <exclusions> <exclusion> <artifactId>spring-core</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> <!--Необязательная зависимость. Если вы объявляете C как необязательную зависимость в проекте B, то проекты, которые зависят от B (например, проект A), должны явно ссылаться на зависимость от C. Необязательные зависимости блокируют транзитивность зависимостей.--> <optional>true</optional> </dependency> </dependencies> <!--Устарело. Maven в настоящее время игнорирует этот элемент.--> <reports></reports> <!--Этот элемент описывает спецификации для генерации отчетов с помощью плагинов отчетов. Эти отчеты запускаются, когда пользователь выполняет "mvn site". Ссылки на все отчеты можно увидеть на панели навигации страницы.--> <reporting> <!--Если true, сайт не включает отчеты по умолчанию. Сюда входят отчеты в меню "Project Information".--> <excludeDefaults /> <!--Куда помещаются все сгенерированные отчеты. Значение по умолчанию — ${project.build.directory}/site.--> <outputDirectory /> <!--Используемые плагины отчетов и их конфигурация.--> <plugins> <!--Элемент plugin содержит информацию, необходимую для описания плагина отчетов.--> <plugin> <!--Идентификатор группы плагина отчетов в репозитории.--> <groupId /> <!--Идентификатор артефакта плагина отчетов в репозитории.--> <artifactId /> <!--Версия (или диапазон версий) используемого плагина отчетов.--> <version /> <!--Передается ли какая-либо конфигурация дочерним проектам.--> <inherited /> <!--Конфигурация плагина отчетов.--> <configuration /> <!--Несколько спецификаций набора отчетов, каждая спецификация может иметь различную конфигурацию. Спецификация (набор отчетов) соответствует цели выполнения. Например, есть отчеты 1, 2, 3, 4, 5, 6, 7, 8 и 9. Отчеты 1, 2 и 5 образуют набор отчетов A, соответствующий одной цели выполнения. Отчеты 2, 5 и 8 образуют набор отчетов B, соответствующий другой цели выполнения.--> <reportSets> <!--Представляет набор отчетов вместе с конфигурацией, которая создает этот набор.--> <reportSet> <!--Уникальный идентификатор набора отчётов, используемый при наследовании POM.--> <id /> <!--Конфигурация отчётов, используемых при генерации набора отчётов.--> <configuration /> <!--Наследуется ли конфигурация дочерними POM.--> <inherited /> <!--Какие отчёты используются в этом наборе.--> <reports /> </reportSet> </reportSets> </plugin> </plugins> </reporting> <!--Информация о зависимостях по умолчанию, наследуемая всеми дочерними проектами от этого проекта. Эта часть информации о зависимостях не разрешается сразу, но когда дочерний проект объявляет зависимость (в которой должны быть указаны group ID и artifact ID), если не указана некоторая информация, отличная от group ID и artifact ID, зависимость здесь сопоставляется по group ID и artifact ID, и используется информация о зависимости отсюда.--> <dependencyManagement> <dependencies> <!--См. элемент dependencies/dependency.--> <dependency> ...... </dependency> </dependencies> </dependencyManagement> <!--Информация о распространении проекта, указывающая место для публикации после выполнения mvn deploy. С этой информацией веб-сайт можно развернуть на удалённом сервере или артефакты можно развернуть в удалённом репозитории.--> <distributionManagement> <!--Информация, необходимая для развёртывания артефактов, созданных проектом, в удалённом репозитории.--> <repository> <!--Должен ли snapshot получать уникальный номер версии (состоящий из отметки времени и порядкового номера сборки), или каждый раз следует использовать один и тот же номер версии? См. элемент repositories/repository.--> <uniqueVersion /> <id>banseon-maven2</id> <name>banseon maven2</name> <url>file://${basedir}/target/deploy</url> <layout /> </repository> <!--Куда следует развертывать снимок артефакта? Если этот элемент не настроен, по умолчанию он развертывается в репозиторий, настроенный в элементе repository. См. элемент distributionManagement/repository.--> <snapshotRepository> <uniqueVersion /> <id>banseon-maven2</id> <name>Репозиторий снимков Banseon-maven2</name> <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url> <layout /> </snapshotRepository> <!--Информация, необходимая для развертывания веб-сайта проекта.--> <site> <!--Уникальный идентификатор места развертывания, используемый для сопоставления с конфигурацией в файлах site и settings.xml.--> <id>banseon-site</id> <!--Название места развертывания.--> <name>веб-сайт business api</name> <!--URL-адрес места развертывания в формате protocol://hostname/path.--> <url> scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web </url> </site> <!--URL-адрес страницы загрузки проекта. Если этот элемент отсутствует, пользователям следует обратиться к домашней странице. Причина использования этого элемента — помочь найти артефакты, которых нет в репозитории (из-за ограничений лицензии).--> <downloadUrl /> <!--Если артефакт имеет новый идентификатор группы и идентификатор артефакта (артефакт был перемещен в новое место), здесь перечисляется информация о перемещении артефакта.--> <relocation> <!--Новый идентификатор группы артефакта.--> <groupId /> <!--Новый идентификатор артефакта.--> <artifactId /> <!--Новый номер версии артефакта.--> <version /> <!--Дополнительная информация, отображаемая пользователю о перемещении, например, причина.--> <message /> </relocation> <!--Указывает статус артефакта в удаленном репозитории. Этот элемент не должен задаваться в локальном проекте, поскольку он автоматически обновляется инструментами. Допустимые значения: none (по умолчанию), converted (преобразован из POM Maven 1 администратором репозитория), partner (синхронизирован напрямую из партнерского репозитория Maven 2), deployed (развернут из экземпляра Maven 2), verified (проверен как правильный и окончательный).--> <status /> </distributionManagement> <!--Подставляет значение вместо имени. Свойства можно использовать во всем POM, а также они могут служить условиями активации (см. описание элемента activation в файле конфигурации settings.xml). Формат: <name>value</name>.--> <properties /> </project>
Другие расширения