English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

POM Maven

POM (Project Object Model, модель объекта проекта) является базовой рабочей единицей Maven проекта, это XML-файл, который содержит основную информацию о проекте, используется для описания того, как проектировать проект, декларировать зависимости проекта и т.д.

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

В POM можно指定 следующие настройки:

  • Зависимости проекта

  • Модули

  • Цель выполнения

  • Профили сборки проекта

  • Версия проекта

  • Список разработчиков проекта

  • Информация о списке почтовых рассылок

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

<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">
 
    <!-- Model version -->
    <modelVersion>4.0.0</modelVersion>
    <!-- The unique identifier of a company or organization, and the path generated when configured is also generated therefrom, such as com.companyname.project-group, maven will put the project jar package in the local path: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- The unique ID of the project, multiple projects may exist under a groupId, which is distinguished by artifactId -->
    <artifactId>project</artifactId>
 
    <!-- Version number -->
    <version>1.0</version>
</project>

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

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

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

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

Родительский (Super) POM

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

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">
 
    <!-- Model version -->
    <modelVersion>4.0.0</modelVersion>
    <!-- The unique identifier of a company or organization, and the path generated when configured is also generated therefrom, such as com.companyname.project-group, maven will put the project jar package in the local path: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- The unique ID of the project, multiple projects may exist under a groupId, which is distinguished by artifactId -->
    <artifactId>project</artifactId>
 
    <!-- Version number -->
    <version>1.0</version>
</project>

In the command console, navigate to the MVN/project directory and execute the following command:

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

Maven will start processing and display 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 resembles what is displayed in the console, after inheritance and interpolation, making the configuration effective.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================== -->
<!--                                                     -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11: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 h
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 при выполнении целей.

Файл pom.xml Maven также не требует ручного написания.

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

Полное описание тегов 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.0http://maven.apache.org/maven-v4_0_0.xsd">
    Координаты родительского проекта. Если значение某个 элемента не указано в проекте, то значение из родительского проекта является значением по умолчанию. Координаты включают group ID, artifact ID и 
        version.
    <parent>
        Идентификатор компонента родительского проекта, унаследованного.
        <artifactId />
        Уникальный идентификатор родительского проекта в глобальном масштабе.
        <groupId />
        Версия родительского проекта, унаследованного.
        <version />
        Относительный путь pom файла родительского проекта. Относительный путь позволяет выбрать другой путь. Значение по умолчанию: ../pom.xml. Maven сначала ищет родительский проект в месте компиляции текущего проекта. 
            Цель pom, в первую очередь в этом месте файловой системы (положение relativePath), затем в локальном хранилище и最后 в удаленном хранилище для поиска pom файла родительского проекта.
        <relativePath />
    </parent>
    Объявление того,哪一个POM модель используется для описателя проекта. Версия модели本身的 очень редко изменяется, хотя она все же необходима, чтобы обеспечить стабильность, когда Maven вводит новые функции или изменения в модели.
    <modelVersion>4.0.0</modelVersion>
    Уникальный идентификатор проекта в глобальном масштабе, обычно используемый для отличения этого проекта от других проектов. Кроме того, путь, созданный при компиляции, также генерируется на основе этого, например, относительный путь для com.mycompany.app: /com/mycompany/app
    <groupId>asia.banseon</groupId>
    Идентификатор компонента, который вместе с ID группы уникально идентифицирует компонент. Иначе говоря, у вас не может быть двух разных проектов с одним и тем же ID компонента и groupID; в 
        Уникальный artifact ID также должен быть в определенном group 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 будет ignorироваться парсером), можно включать 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 systemu ciągłego integrowania używanego przez projekt (jeśli system ma interfejs web). -->
        <url />
        <-- Konfiguracje użytkowników deweloperów lub użytkowników do powiadamiania po zakończeniu budowy. Obejmuje informacje o odbiorcach i warunkach powiadamiania (błąd, niepowodzenie, sukces, ostrzeżenie) -->
        <notifiers>
            <-- Konfiguracja metody powiadamiania użytkowników deweloperów w przypadku przerwania budowy -->
            <notifier>
                <-- Sposób przekazywania powiadomień -->
                <type />
                <-- Czy powiadamiać przy wystąpieniu błędu -->
                <sendOnError />
                <-- Czy powiadamiać przy nieudanym zbudowaniu -->
                <sendOnFailure />
                <-- Czy powiadamiać przy udanym zbudowaniu -->
                <sendOnSuccess />
                <-- Czy powiadamiać przy wystąpieniu ostrzeżenia -->
                <sendOnWarning />
                <-- Niezalecane do użycia. Gdzie wysyłać powiadomienia -->
                <address />
                <-- Rozszerzone ustawienia konfiguracyjne -->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <-- Rok założenia projektu, 4 cyfry. Wymagany do generowania informacji o prawach autorskich. -->
    <inceptionYear />
    <-- Informacje o listach e-mail związanych z projektem -->
    <mailingLists>
        <-- Ten element opisuje wszystkie listy e-mail związane z projektem. Automatycznie generowane strony odnoszą się do tych informacji. -->
        <mailingList>
            <-- Nazwa e-mail -->
            <name>Demo</name>
            <-- Adres lub link do wysyłania e-maili. Jeśli jest to adres e-mail, podczas tworzenia dokumentu automatycznie zostanie utworzony link mailto: -->
            <post>[email protected]</post>
            <-- Adres lub link do subskrypcji e-mail. Jeśli jest to adres e-mail, podczas tworzenia dokumentu automatycznie zostanie utworzony link mailto: -->
            <subscribe>[email protected]</subscribe>
            <-- Adres lub link do anulowania subskrypcji e-mail. Jeśli jest to adres e-mail, podczas tworzenia dokumentu automatycznie zostanie utworzony link mailto: -->
            <unsubscribe>[email protected]</unsubscribe>
            <-- Możesz przeglądać URL informacji e-mail -->
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!--Список разработчиков проекта -->
    <developers>
        <!--Информация о разработчике проекта -->
        <developer>
            <!--Уникальный идентификатор разработчика проекта в SCM -->
            <id>HELLO WORLD</id>
            <!--Полное имя разработчика проекта -->
            <name>banseon</name>
            <!--Email разработчика проекта -->
            <email>[email protected]</email>
            <!--URL домашней страницы разработчика проекта -->
            <url />
            <!--Роли разработчиков в проекте, роль элемента описывает различные роли -->
            <roles>
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
            <!--Организация разработчика проекта -->
            <organization>demo</organization>
            <!--URL организации разработчика проекта -->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!--Атрибуты разработчиков проекта, такие как обработка мгновенных сообщений и т.д. -->
            <properties>
                <dept>No</dept>
            </properties>
            <!--Часовой пояс разработчиков проекта, целое число в диапазоне от -11 до 12. -->
            <timezone>-5</timezone>
        </developer>
    </developers>
    <!--Список других.contributors проекта -->
    <contributors>
        <!--Другие.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. Это соединение только для чтения-->
        <connection>
            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>
        Дефолтное значение при отсутствии указанного целевого значения (Maven2 называется фазой)
        <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 />
        <!--当filtering开关打开时,使用到的过滤器属性文件列表 -->
        <filters />
        <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 -->
        <pluginManagement>
            <!--使用的插件列表 。 -->
            <plugins>
                <!--plugin元素包含描述插件所需的信息。 -->
                <plugin>
                    <!--插件在仓库里的group ID -->
                    <groupId />
                    <!--插件在仓库里的artifact ID -->
                    <artifactId />
                    <!--使用的插件的版本(或版本范围) -->
                    <version />
                    <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成启用。 -->
                    <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>
    <!--在列的项目构建profile,如果被激活,会修改构建处理 -->
    <profiles>
        <!--根据环境参数或命令行参数激活某个构建处理 -->
        <profile>
            <!--构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。 -->
            <id />
            <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。profile的力量来自于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。 -->
            <activation>
                <!--profile默认是否激活的标志 -->
                <activeByDefault />
                <!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。 -->
                <jdk />
                <!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。 -->
                <os>
                    <!--激活profile的操作系统的名字 -->
                    <name>Windows XP</name>
                    <!--激活profile的操作系统所属家族(如 'windows') -->
                    <family>Windows</family>
                    <!--激活profile的操作系统体系结构 -->
                    <arch>x86</arch>
                    <!--激活profile的操作系统版本 -->
                    <version>5.1.2600</version>
                </os>
                <!--如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值 字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段 -->
                <property>
                    <!--激活profile的属性的名称 -->
                    <name>mavenVersion</name>
                    <--Значение свойства для активации profile -->
                    <value>2.0.3</value>
                </property>
                <--Предоставьте имя файла, чтобы активировать profile через проверку его наличия или отсутствия. Missing проверяет наличие файла, и если он отсутствует, активируется profile. С другой стороны, exists проверяет наличие файла, и если он существует, активируется profile. -->
                <file>
                    <--Если указанный файл существует, активируется profile. -->
                    <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                    </exists>
                    <--Если указанный файл отсутствует, активируется profile. -->
                    <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>
            <!--Модули (иногда называемые подпроектами) становятся частью проекта при компиляции. Каждый элемент модуля указывает на относительный путь к директории модуля -->
            <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>
    <!--Модули (иногда называемые подпроектами) становятся частью проекта при компиляции. Каждый элемент модуля указывает на относительный путь к директории модуля -->
    <modules />
    <!--Список удаленных репозиториев для поиска зависимостей и расширений -->
    <repositories>
        <!--Содержит информацию, необходимую для подключения к удаленному репозиторию -->
        <repository>
            <!--Как обрабатывать загрузку версий выпуска в удаленном репозитории -->
            <releases>
                <!--true или false показывает, включен ли этот репозиторий для загрузки определенного типа artifact (выпускной, снапшот). -->
                <enabled />
                <!--Этот элемент определяет частоту обновлений. Maven сравнивает timestamps локального POM и удаленного POM. Доступные опции: always (всегда), daily (по умолчанию, каждый день), interval: X (где X - это интервал в минутах), или never (никогда). -->
                <updatePolicy />
                <!--Что делать, когда Maven не может проверить файл проверки artifact: ignore (пропустить), fail (неудача) или warn (предупреждение). -->
                <checksumPolicy />
            </releases>
            <!--Как обрабатывать загрузку версий снапшотов в удаленном репозитории. С помощью параметров releases и snapshots POM может принимать разные меры для каждого типа artifact в отдельном репозитории--> 
                Стратегия. Например, возможно, кто-то решит включить поддержку загрузки версий снапшотов только для целей разработки. См. элемент 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>
            Классификатор group ID зависимости. -->
            <groupId>org.apache.maven</groupId>
            Классификатор artifact ID зависимости. -->
            <artifactId>maven-artifact</artifactId>
            Классификатор версии зависимости. В Maven 2 можно также настроить диапазон версий. -->
            <version>3.8.1</version>
            Классификатор зависимости, по умолчанию это jar. Обычно это означает расширение файла зависимости, но есть и исключения. Один тип может быть привязан к другому расширению или классификатору. Типы часто соответствуют используемому способу упаковки, 
                Хотя есть и исключения. Некоторые примеры типов: jar, war, ejb-client и test-jar. Если установить extensions в значение true, можно определить новые типы в plugin. Поэтому примеры предыдущих типов неполные. -->
            <type>jar</type>
            Классификатор, зависящий от категории. Классификатор может отличать компоненты, принадлежащие к одному POM, но различающиеся по способам сборки. Название классификатора добавляется после версии файла. Например, если вы хотите собрать два отдельных компонента в 
                JAR, один скомпилирован с компилятором Java 1.4, другой с компилятором Java 6. Вы можете использовать классификатор для создания двух отдельных JAR-компонентов.
            <classifier></classifier>
            Область зависимости. В процессе публикации проекта помогает определить, какие компоненты включаются. Подробности см. в разделе о механизме зависимостей.
- compile: По умолчанию, используется для компиляции
- provided: Логически подобен компиляции, но поддерживает ожидание JDK или контейнера, подобно classpath 
                - runtime: Требуется при выполнении
- test: Используется для задач тестирования
- system: Требуется предоставление соответствующего элемента. Получается через systemPath 
                - systemPath: Используется только для системы. Предоставляет соответствующий путь
- optional: Когда проект сам зависит от другого, указывает, передается ли зависимость. Используется для последовательных зависимостей.
            <scope>test</scope>
            Только для системы. Обратите внимание, что не рекомендуется использовать этот элемент, и в новых версиях он может быть заменен. Этот элемент указывает на путь в файловой системе для зависимости. Требуется абсолютный путь, а не относительный. Рекомендуется использовать свойства для соответствия абсолютному пути, например ${java.home}.
            <systemPath></systemPath>
            При расчете транзитивных зависимостей из списка зависимых компонентов указывается набор исключенных зависимых компонентов. Это означает, что Maven зависит только от указанных проектов, а не от зависимостей проектов. Этот элемент主要用于 решения проблем с конфликтом версий.
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            Опциональные зависимости. Если вы в проекте B объявляете зависимость C как опциональную, вам нужно явно ссылаться на зависимость C в проекте, который зависит от B (например, проект A). Опциональные зависимости прерывают транзитивность зависимостей.
            <optional>true</optional>
        </dependency>
    </dependencies>
    Не рекомендуется использовать. В настоящее время Maven игнорирует этот элемент.
    <reports></reports>
    Элемент описывает стандарт создания отчетов с помощью плагина отчетов. При выполнении "mvn site" эти отчеты будут запущены. В панели навигации страницы можно увидеть все ссылки на отчеты.
    <reporting>
        <!--true,则,网站不包括默认的报表。这包括"项目信息"菜单中的报表。 -->
        <excludeDefaults />
        <!--所有产生的报表存放到哪里。默认值是${project.build.directory}/site。 -->
        <outputDirectory />
        <!--使用的报表插件和他们的配置。 -->
        <plugins>
            <!--plugin元素包含描述报表插件需要的信息 -->
            <plugin>
                <!--报表插件在仓库里的group ID -->
                <groupId />
                <!--报表插件在仓库里的artifact ID -->
                <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 />
                        <!--配置是否被继承到子POMs -->
                        <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>
            <!--是分配给快照一个唯一的版本号(由时间戳和构建流水号)?还是每次都使用相同的版本号?参见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 Snapshot Repository</name>
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
            <layout />
        </snapshotRepository>
        <!--部署项目的网站需要的信息 -->
        <site>
            <!--部署位置的唯一标识符,用来匹配站点和settings.xml文件里的配置 -->
            <id>banseon-site</id>
            <!--部署位置的名称 -->
            <name>business api website</name>
            <!--部署位置的URL,按protocol://hostname/path形式 -->
            <url>
                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
            </url>
        </site>
        <!--URL страницы загрузки проекта. Если элемент отсутствует, пользователь должен обращаться к主页е. Использование этого элемента необходимо для: помощи в определении компонентов, которые не находятся в хранилище (из-за ограничений лицензии). -->
        <downloadUrl />
        <!--Если компонент получил новый group ID и artifact ID (компонент переместился в новое место), здесь перечисляются informacje о relocation компонента. -->
        <relocation>
            <!--Новый group ID компонента -->
            <groupId />
            <!--Новый artifact ID компонента -->
            <artifactId />
            <!--Новый номер версии компонента -->
            <version />
            <!--Дополнительная информация для пользователя о перемещении, например причина. -->
            <message />
        </relocation>
        <!--Указание состояния компонента в удаленном хранилище. Элемент не должен устанавливаться в локальном проекте, так как это обновляется инструментом автоматически. Допустимые значения: none (по умолчанию), converted (администратор хранилища из 
            Maven 1 POM преобразован, partner (прямо из хранилища партнеров Maven 2), deployed (из примера депloiement Maven 2), verified (подтвержден как правильный и конечный). -->
        <status />
    </distributionManagement>
    <!--Замените имя значением, Properties могут использоваться в всего POM, а также в качестве триггеров (см. описание элемента activation в файле конфигурации settings.xml). Формат: <name>value</name>. -->
    </properties />
</project>