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

POM de Maven

Herramientas en línea

El POM (Project Object Model, Modelo de Objetos de Proyecto) es la unidad de trabajo básica del proyecto Maven, es un archivo XML que contiene la información básica del proyecto, se utiliza para describir cómo construir el proyecto, declarar dependencias del proyecto, etc.

Al ejecutar una tarea o objetivo, Maven buscará el POM en el directorio actual. Lee el POM, obtiene la información de configuración necesaria y luego ejecuta el objetivo.

  • Las dependencias del proyecto pueden especificarse en el POM:

  • Plugin

  • Objetivo de ejecución

  • Profile de construcción del proyecto

  • Versión del proyecto

  • lista de desarrolladores del proyecto

  • Información de lista de correo relacionada

Antes de crear el POM, primero necesitamos describir el grupo de proyecto (groupId), el ID único del proyecto.

<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">
 
    <!-- versión del modelo -->
    <modelVersion>4.0.0</modelVersion>
    <!-- indicador único de la empresa u organización, y la ruta generada durante la configuración también se genera a partir de este, por ejemplo, com.companyname.project-group, Maven colocará el paquete jar del proyecto en la ruta local:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- ID único del proyecto, debajo de un groupId puede haber varios proyectos, se distinguen por artifactId -->
    <artifactId>project</artifactId>
 
    <!-- número de versión -->
    <version>1.0</version>
</project>

Todos los archivos POM necesitan el elemento project y tres campos obligatorios: groupId, artifactId y version.

nododescripción
projectetiqueta raíz del proyecto.
modelVersionLa versión del modelo debe establecerse en 4.0。
groupIdEste es el identificador del grupo del proyecto. En una organización o proyecto, es generalmente único. Por ejemplo, una organización bancaria com.companyname.project-group posee todos los proyectos relacionados con el banco.
artifactIdEste es el identificador del proyecto. Generalmente es el nombre del proyecto. Por ejemplo, banco de consumo. groupId y artifactId juntos definen la ubicación del artifact en el repositorio.
versión

Esta es la versión del proyecto. En el repositorio del artifact, se utiliza para distinguir diferentes versiones. Por ejemplo:

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

POM Padre (Super)POM

El (Super)POM padre es el POM predeterminado de Maven. Todos los POM heredan de un POM padre (independientemente de si se definió explícitamente este POM padre). El POM padre contiene algunas configuraciones predeterminadas que pueden ser heredadas. Por lo tanto, cuando Maven detecta que necesita descargar dependencias del POM, busca en el repositorio predeterminado configurado en Super POM http://repo1.maven.org/maven2 descargar.

Maven utiliza el pom efectivo (Super pom más la configuración del proyecto propio) para ejecutar los objetivos relacionados, lo que ayuda a los desarrolladores a hacer la menor configuración posible en pom.xml, aunque estas configuraciones pueden ser sobrescritas.

usar el siguiente comando para ver la configuración predeterminada de Super POM:

mvn ayuda:efectiva-pom

a continuación, creamos el directorio MVN/project, crear pom.xml en este directorio, el contenido es el siguiente:

<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">
 
    <!-- versión del modelo -->
    <modelVersion>4.0.0</modelVersion>
    <!-- indicador único de la empresa u organización, y la ruta generada durante la configuración también se genera a partir de este, por ejemplo, com.companyname.project-group, Maven colocará el paquete jar del proyecto en la ruta local:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- ID único del proyecto, debajo de un groupId puede haber varios proyectos, se distinguen por artifactId -->
    <artifactId>project</artifactId>
 
    <!-- número de versión -->
    <version>1.0</version>
</project>

En la consola de comandos, ingresar a MVN/directorio del proyecto, ejecutar el siguiente comando:

C:\MVN\project>mvn ayuda:efectiva-pom

Maven comenzará a procesar y mostrar efectivo-pom。

[INFO] Escaneando por proyectos...
Descargando: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD Éxito
[INFO] ------------------------------------------------------------------------
[INFO] Tiempo total: 01:36 min
[INFO] Finalizado a: 2018-09-05T11:31:28+08:00
[INFO] Memoria final: 15M/149M
[INFO] ------------------------------------------------------------------------

El resultado de Effective POM es como se muestra en la consola, después de la herencia e interpolación, haciendo que la configuración sea efectiva.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Generado por el Plugin de Ayuda de Maven el 2012-07-05T11:41:51             -->
<!-- Ver: http://maven.apache.org/plugins/maven-help-plugin/           -->
<!--                                                                   -->
<!-- ================================================================= -->
 
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Efectivo POM para proyecto                                         -->
<!-- '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
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>Tablero de Cambio de Repositorios de Maven</nombre>
      <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>Repositorio de Plugins de Maven</nombre>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target/sitio</outputDirectory>
  </reporting>
</project>

En el archivo pom.xml anterior, puedes ver la estructura de directorio de código fuente predeterminado del proyecto que necesita Maven para ejecutar el objetivo, el directorio de salida, los plugins necesarios, los repositorios y el directorio de informes.

El archivo pom.xml de Maven también no requiere ser escrito a mano.

Maven proporciona una gran cantidad de plugins de prototipo para crear proyectos, incluyendo la estructura del proyecto y el archivo pom.xml.

Completo detallado de la etiqueta 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">
    <!--Las coordenadas del proyecto padre. Si no se especifica un valor para algún elemento del proyecto, el valor correspondiente del proyecto padre se considera el valor predeterminado del proyecto. Las coordenadas incluyen el ID del grupo, el ID del artefacto y 
        versión。 -->
    <parent>
        <!--Identificador del artefacto del proyecto padre heredado -->
        <artifactId />
        <!--Identificador global único del proyecto padre heredado -->
        <groupId />
        <!--Versión del proyecto padre heredado -->
        <version />
        <!-- Ruta relativa del archivo pom.xml del proyecto padre heredado. La ruta relativa permite que seleccione una ruta diferente. El valor predeterminado es ../pom.xml. Maven primero busca el pom del proyecto padre en el lugar donde se construye el proyecto actual 
            Pom objetivo, luego en esta ubicación del sistema de archivos (ubicación de relativePath), luego en el repositorio local, finalmente en el repositorio remoto para buscar el pom del proyecto padre. -->
        <relativePath />
    </parent>
    <!--Declarar qué versión del modelo POM sigue el descriptor de proyecto. La versión del modelo en sí rara vez cambia, aunque así sea, sigue siendo esencial, esto es para garantizar la estabilidad cuando Maven introduce nuevas características u otros cambios en el modelo. -->
    <modelVersion>4.0.0</modelVersion>
    <!--Identificador global único del proyecto, generalmente se utiliza el nombre del paquete completamente calificado para distinguir este proyecto de otros proyectos. Y la ruta generada durante la construcción también se genera a partir de esto, por ejemplo, la ruta relativa generada para com.mycompany.app es:/com/mycompany/app -->
    <groupId>asia.banseon</groupId>
    <!-- Identificador del artefacto, que, junto con el group ID, identifica de manera única un artefacto. En otras palabras, no puede haber dos proyectos diferentes con el mismo artifact ID y group ID; en algún 
        El artifact ID también debe ser único bajo un grupo ID específico. Los artefactos son algo producido o utilizado por el proyecto, los artefactos generados por Maven para el proyecto incluyen: JARs, código fuente, publicaciones binarias y WARs, etc. -->
    <artifactId>banseon-maven2</artifactId>
    <!--Tipo de artefacto generado por el proyecto, por ejemplo, jar, war, ear, pom. Los plugins pueden crear sus propios tipos de artefactos, por lo que la lista anterior no es completa -->
    <packaging>jar</packaging>
    <!--Versión actual del proyecto, con formato: versión principal.versión secundaria.versión incremental-Versión limitada -->
    <version>1.0-SNAPSHOT</version>
    <!--Nombre del proyecto, utilizado por el documento generado por Maven -->
    <name>banseon-maven</nombre>
    <!--URL de la página principal del proyecto, utilizado por el documento generado por Maven -->
    <url>http://www.baidu.com/banseon</url>
    <!-- Descripción detallada del proyecto, documento generado por Maven. Cuando este elemento se puede describir en formato HTML (por ejemplo, el texto dentro de CDATA se ignora por el analizador, se puede incluir HTML) 
        Los signos), no se recomienda el uso de descripciones de texto puro. Si necesita modificar la página de índice del sitio web generado, debe modificar su propio archivo de página de índice, en lugar de ajustar este documento. -->
    <description>Un proyecto maven para estudiar maven.</description>
    <!--Descripción de las condiciones previas necesarias para el entorno de construcción de este proyecto. -->
    <prerequisites
        <!--La versión mínima de Maven necesaria para construir este proyecto o usar este plugin -->
        <maven />
    </prerequisites>
    <!--El nombre y la URL del sistema de gestión de problemas del proyecto (Bugzilla, Jira, Scarab, o cualquier sistema de gestión de problemas que prefieras), en este ejemplo es jira -->
    <issueManagement
        <!--El nombre del sistema de gestión de problemas (por ejemplo, jira), -->
        <system>jira</system>
        <!--La URL del sistema de gestión de problemas utilizado por este proyecto -->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!--Información de integración continua del proyecto -->
    <ciManagement
        <!--El nombre del sistema de integración continua, por ejemplo, continuum -->
        <system />
        <!--La URL del sistema de integración continua utilizado por este proyecto (si el sistema de integración continua tiene una interfaz web). -->
        <url />
        <!--Desarrolladores que necesitan ser notificados cuando se completa la construcción/Opciones de configuración del usuario. Incluye información del destinatario y condiciones de notificación (error, failure, success, warning) -->
        <notifiers
            <!--Configurar un método para notificar al usuario cuando se interrumpe la construcción/Desarrollador -->
            <notifier
                <!--Medio de transmisión de notificaciones -->
                <type />
                <!--¿Notificar cuando se produce un error? -->
                <sendOnError />
                <!--¿Notificar cuando la construcción fails? -->
                <sendOnFailure />
                <!--¿Notificar cuando se completa con éxito la construcción? -->
                <sendOnSuccess />
                <!--¿Notificar cuando se produce una advertencia? -->
                <sendOnWarning />
                <!--No se recomienda su uso. A dónde se enviarán las notificaciones -->
                <address />
                <!--Opción de configuración extendida -->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <!--Año de creación del proyecto,4Un número entero. Se necesita usar este valor cuando se genera información de copyright. -->
    <inceptionYear />
    <!--Información de las listas de correo relacionadas con el proyecto -->
    <mailingLists>
        <!--Este elemento describe todas las listas de correo relacionadas con el proyecto. Los sitios web generados automáticamente utilizan esta información. -->
        <mailingList>
            <!--El nombre del correo -->
            <name>Demo</nombre>
            <!--La dirección o enlace del correo electrónico para enviar correos, si es una dirección de correo electrónico, se creará automáticamente el enlace mailto: al crear el documento -->
            <post>[email protected]</post>
            <!--La dirección o enlace del correo electrónico de suscripción, si es una dirección de correo electrónico, se creará automáticamente el enlace mailto: al crear el documento -->
            <subscribe>[email protected]</subscribe>
            <!--dirección de correo electrónico o enlace para cancelar la suscripción, si es una dirección de correo electrónico, se creará automáticamente un enlace mailto: al crear el documento -->
            <unsubscribe>[email protected]</unsubscribe>
            <!--URL para explorar información de correo electrónico -->
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!--lista de desarrolladores del proyecto -->
    <developers
        <!--información de algún desarrollador del proyecto -->
        <developer
            <!--identificador único del desarrollador del proyecto en el SCM -->
            <id>HELLO WORLD</id>
            <!--nombre completo del desarrollador del proyecto -->
            <name>banseon</nombre>
            <!--correo electrónico del desarrollador del proyecto -->
            <email>[email protected]</email>
            <!--URL de la página principal del desarrollador del proyecto -->
            <url />
            <!--roles del desarrollador del proyecto en el proyecto, el elemento de rol describe varios roles -->
            <roles
                <role>Gerente de Proyecto</role>
                <role>Arquitecto</role>
            </roles>
            <!--organización a la que pertenece el desarrollador del proyecto -->
            <organization>demo</organization>
            <!--URL de la organización a la que pertenece el desarrollador del proyecto -->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!--propiedades del desarrollador del proyecto, como cómo se manejan los mensajes instantáneos, etc. -->
            <properties
                <dept>No</dept>
            </properties>
            <!--la zona horaria del desarrollador del proyecto, -11hasta12enteros en el rango. -->
            <timezone-5</timezone>
        </developer>
    </developers>
    <!--lista de otros contribuyentes del proyecto -->
    <contributors
        <!--otros contribuyentes del proyecto. Ver desarrolladores/elemento developer -->
        <contributor
            <name />
            <email />
            <url />
            <organization />
            <organizationUrl />
            <roles />
            <timezone />
            <properties />
        </contributor>
    </contributors>
    <!--Este elemento describe la lista de licencias de todos los proyectos. Solamente debe listarse la lista de licencias del proyecto, no la lista de licencias de proyectos dependientes. Si se listan múltiples licencias, el usuario puede elegir una de ellas en lugar de aceptar todas las licencias. -->
    <licenses>
        <!--Descripción de la licencia del proyecto, utilizada para generar la página de licencia del sitio web del proyecto, y otros informes y validaciones también usarán este elemento. -->
        <license>
            <!--Nombre legal de la licencia -->
            <name>Apache 2</nombre>
            <!--URL de la página de texto oficial de la licencia -->
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
            <!--La principal forma de distribución del proyecto: repo, se puede descargar desde el repositorio de Maven; manual, el usuario debe descargar e instalar manualmente las dependencias -->
            <distribution>repo</distribution>
            <!--Información adicional sobre la licencia -->
            <comments>Información adicional-licencia OSS amigable/comments>
        </license>
    </licenses>
    <!--La etiqueta SCM (Source Control Management) permite configurar su biblioteca de código, para que Maven y otros complementos puedan usarla. -->
    <scm>
        <!--La URL del SCM, esta URL describe el repositorio de versiones y cómo conectarse al repositorio. Para obtener más detalles, consulte los formatos y listas de URL proporcionados por SCMs. Esta conexión es de solo lectura. -->
        <connection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
        </connection>
        <!--Para el uso de los desarrolladores, similar al elemento connection. Es decir, esta conexión no es solo de solo lectura -->
        <developerConnection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
        </developerConnection>
        <!--Etiqueta del código actual, por defecto HEAD en la fase de desarrollo -->
        <tag />
        <!--URL que apunta a la biblioteca SCM del proyecto (por ejemplo, ViewVC o Fisheye). -->
        <url>http://svn.baidu.com/banseon</url>
    </scm>
    <!--Describir las diversas propiedades de la organización a la que pertenece el proyecto. Los documentos generados por Maven utilizan -->
    <organization>
        <!--Nombre completo de la organización -->
        <name>demo</nombre>
        <!--URL de la página principal de la organización -->
        <url>http://www.baidu.com/banseon</url>
    </organization>
    <!--Información necesaria para construir el proyecto -->
    <build
        <!--Este elemento establece el directorio de código fuente del proyecto, cuando se construye el proyecto, el sistema de construcción compilará el código fuente en el directorio. Esta ruta es una ruta relativa a pom.xml. -->
        <sourceDirectory />
        <!--Este elemento establece el directorio de código fuente del proyecto de scripts, que es diferente del directorio de código fuente: en la mayoría de los casos, el contenido del directorio será copiado al directorio de salida (porque los scripts se interpretan, no se compilan). -->
        <scriptSourceDirectory />
        <!--Este elemento configura el directorio de código fuente utilizado por la prueba unitaria del proyecto. Cuando se prueba el proyecto, el sistema de construcción compilará el código fuente en el directorio. Esta ruta es una ruta relativa a pom.xml. -->
        <testSourceDirectory />
        <!--El directorio donde se almacenan los archivos de clase compilados de la aplicación. -->
        <outputDirectory />
        <!--El directorio donde se almacenan los archivos de clase compilados de prueba. -->
        <testOutputDirectory />
        <!--Usar una serie de extensiones de construcción del proyecto -->
        <extensions>
            <!--Descripción de la extensión de construcción utilizada -->
            <extension>
                <!--groupId de la extensión de construcción -->
                <groupId />
                <!--artifactId de la extensión de construcción -->
                <artifactId />
                <!--versión de la extensión de construcción -->
                <version />
            </extension>
        </extensions>
        <!--cuando el proyecto no especifica el objetivo (Maven2 el valor predeterminado cuando se llama al nombre del período (Maven) -->
        <defaultGoal />
        <!--Este elemento describe la lista de rutas de recursos relacionados con el proyecto, por ejemplo, archivos de propiedades relacionados con el proyecto, estos recursos se incluyen en el archivo de paquete final. -->
        <resources
            <!--Este elemento describe todas las rutas de recursos relacionadas con el proyecto o la prueba -->
            <resource
                <!-- Descripción de la ruta de destino de los recursos. La ruta es relativa a target/directorio classes (por ejemplo ${project.build.outputDirectory}). Ejemplo 
                    Sub, si desea que los recursos estén en un paquete específico (org.apache.maven.messages), debe configurar este elemento como org/apache/maven /messages. Sin embargo, si solo desea poner los recursos en la estructura de directorios del código fuente, no es necesario esta configuración. -->
                <targetPath />
                <!--¿Usar valores de parámetros en lugar de nombres de parámetros? Los valores de parámetros se toman de los elementos properties o las propiedades configuradas en el archivo, el archivo se lista en los elementos filters. -->
                <filtering />
                <!--Descripción del directorio donde se almacenan los recursos, la ruta es relativa a la ruta del POM -->
                <directory />
                <!--Lista de patrones incluidos, por ejemplo**/*.xml. -->
                <includes />
                <!--Lista de patrones excluidos, por ejemplo**/*.xml -->
                <excludes />
            </resource>
        </resources>
        <!--Este elemento describe todas las rutas de recursos relacionados con la prueba unitaria, por ejemplo, archivos de propiedades relacionados con la prueba unitaria. -->
        <testResources
            <!--Este elemento describe todas las rutas de recursos relacionados con la prueba, consulte build/resources/Descripción del elemento resource -->
            <testResource
                <targetPath />
                <filtering />
                <directory />
                <includes />
                <excludes />
            </testResource>
        </testResources>
        <!--El directorio donde se almacenan todos los archivos generados por la construcción -->
        <directory />
        <!--El nombre del archivo del componente generado, el valor predeterminado es ${artifactId}-${version}. -->
        <finalName />
        <!--Lista de archivos de propiedades de filtro utilizados cuando se abre el interruptor de filtrado -->
        <filters />
        <!--La información de complemento predeterminado que puede ser referenciado por el subproyecto. Esta opción de configuración de complemento se analizará o se bindirá al ciclo de vida hasta que se refiera. Cualquier configuración local del complemento dado cubrirá aquí la configuración -->
        <pluginManagement
            <!--Lista de complementos utilizados. -->
            <plugins>
                <!--El elemento plugin contiene la información necesaria para el complemento. -->
                <plugin>
                    <!--El ID de grupo en el repositorio del complemento -->
                    <groupId />
                    <!--ID del artifact en el repositorio del plugin -->
                    <artifactId />
                    <!--Versión del plugin utilizado (o rango de versiones) -->
                    <version />
                    <!--Si se descarga la extensión de Maven del plugin utilizado (por ejemplo, empaquetado y procesadores de tipo), debido a razones de rendimiento, este elemento solo se configura como habilitado cuando es necesario. -->
                    <extensions />
                    <!--Configuración para ejecutar un grupo de objetivos en el ciclo de vida de construcción. Cada objetivo puede tener una configuración diferente. -->
                    <executions
                        <!--El elemento execution contiene la información necesaria para la ejecución del plugin -->
                        <execution
                            <!--Identificador del objetivo de ejecución, utilizado para identificar el objetivo en el proceso de construcción o para coincidir con el objetivo de ejecución que se debe combinar en el proceso de herencia -->
                            <id />
                            <!--Se une al ciclo de vida de construcción del objetivo, si se omite, el objetivo se une al ciclo de vida predeterminado configurado en los datos de origen, si se omite, se une al ciclo de vida predeterminado configurado en los datos de origen -->
                            <phase />
                            <!--Objetivo de ejecución de la configuración -->
                            <goals />
                            <!--Si la configuración se propaga a los sub-POM -->
                            <inherited />
                            <!--Configuración como objeto DOM -->
                            <configuration />
                        </execution>
                    </executions>
                    <!--Dependencias adicionales necesarias para la introducción de plugins del proyecto -->
                    <dependencies>
                        <!--ver dependencies/elemento dependency -->
                        <dependency>
                            ......
                        </<dependency>
                    </<dependencies>
                    <!--si cualquier configuración se propaga a los proyectos secundarios -->
                    <inherited />
                    <!--Configuración como objeto DOM -->
                    <configuration />
                </plugin>
            </plugins>
        </pluginManagement>
        <!--Lista de plugins utilizados -->
        <plugins>
            <!--Ver build/pluginManagement/plugins/elemento plugin -->
            <plugin>
                <groupId />
                <artifactId />
                <version />
                <extensions />
                <executions
                    <execution
                        <id />
                        <phase />
                        <goals />
                        <inherited />
                        <configuration />
                    </execution>
                </executions>
                <dependencies>
                    <!--ver dependencies/elemento dependency -->
                    <dependency>
                        ......
                    </<dependency>
                </<dependencies>
                <goals />
                <inherited />
                <configuration />
            </plugin>
        </plugins>
    </build>
    <!--Perfiles de construcción enumerados en el proyecto, si se activan, modificarán el procesamiento de construcción -->
    <profiles>
        <!--Activar una construcción de procesamiento específica según los parámetros de entorno o los parámetros de línea de comandos -->
        <profile>
            <!--Identificador único de la configuración de construcción. Se utiliza tanto para activar desde la línea de comandos como para combinar perfiles con el mismo identificador en la herencia. -->
            <id />
            <!--Lógica de condiciones que activa automáticamente el perfil. Activation es la llave de activación del perfil. La fuerza del perfil radica en que puede usar valores específicos en ciertos entornos específicos de manera automática; estos entornos se especifican mediante el elemento activation. El elemento activation no es la única manera de activar el perfil. -->
            <activation>
                <!--Indicador de si el perfil se activa por defecto -->
                <activeByDefault />
                <!--Cuando se detecta el JDK coincidente, se activa el perfil. Por ejemplo,1.4Activar JDK1.4,1.4.0_2, sino!1.4Activar todas las versiones que no terminan con1.4JDK a partir de -->
                <jdk />
                <!--Cuando se detecta la propiedad de sistema operativo coincidente, se activa el perfil. El elemento os puede definir algunas propiedades relacionadas con el sistema operativo. -->
                <os>
                    <!--Nombre del sistema operativo para activar el perfil -->
                    <name>Windows XP</nombre>
                    <!--Familia a la que pertenece el sistema operativo para activar el perfil (por ejemplo, 'windows') -->
                    <family>Windows</family>
                    <!--Arquitectura del sistema operativo para activar el perfil -->
                    <arch>x86</arch>
                    <!--Versión del sistema operativo para activar el perfil -->
                    <version>5.1.2600</version>
                </os>
                <!--Si Maven detecta una propiedad específica (su valor se puede referenciar en el POM mediante ${nombre}), tiene el nombre y el valor correspondientes, el perfil se activará. Si el campo de valor está vacío, se activará el perfil si existe el campo de nombre de propiedad, de lo contrario, se realiza una coincidencia de valores de campo de propiedad en modo sensible a mayúsculas y minúsculas -->
                <property>
                    <!--Nombre de la propiedad que activa el perfil -->
                    <name>mavenVersion</nombre>
                    <!--Valor de la propiedad que activa el perfil -->
                    <value2.0.3</value>
                </property>
                <!--Proporcionar un nombre de archivo, activar el perfil mediante la detección de la existencia o no del archivo. La comprobación missing verifica si el archivo existe, y si no existe, activa el perfil. Por otro lado, exists verificará si el archivo existe, y si existe, activará el perfil. -->
                <file
                    <!--Si el archivo especificado existe, se activa el perfil. -->
                    <exists/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                    </exists>
                    <!--Si el archivo especificado no existe, se activa el perfil. -->
                    <missing/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                    </missing>
                </file>
            </activation>
            <!--Información necesaria para construir el proyecto. Ver elemento 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>
                        <!--Ver build/pluginManagement/plugins/elemento plugin -->
                        <plugin>
                            <groupId />
                            <artifactId />
                            <version />
                            <extensions />
                            <executions
                                <execution
                                    <id />
                                    <phase />
                                    <goals />
                                    <inherited />
                                    <configuration />
                                </execution>
                            </executions>
                            <dependencies>
                                <!--ver dependencies/elemento dependency -->
                                <dependency>
                                    ......
                                </<dependency>
                            </<dependencies>
                            <goals />
                            <inherited />
                            <configuration />
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <!--Ver build/pluginManagement/plugins/elemento plugin -->
                    <plugin>
                        <groupId />
                        <artifactId />
                        <version />
                        <extensions />
                        <executions
                            <execution
                                <id />
                                <phase />
                                <goals />
                                <inherited />
                                <configuration />
                            </execution>
                        </executions>
                        <dependencies>
                            <!--ver dependencies/elemento dependency -->
                            <dependency>
                                ......
                            </<dependency>
                        </<dependencies>
                        <goals />
                        <inherited />
                        <configuration />
                    </plugin>
                </plugins>
            </build>
            <!--Módulos (a veces llamados subproyectos) se construyen como parte del proyecto. Cada elemento de módulo es una ruta relativa al directorio del módulo -->
            <modules />
            <!--Lista de repositorios remotos descubiertos para dependencias y extensiones. -->
            <repositories>
                <!--Ver repositories/elemento repository -->
                <repository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </repository>
            </repositories>
            <!--Lista de repositorios remotos de plugins descubiertos, que se utilizan para construir y generar informes -->
            <pluginRepositories>
                <!--Contiene la información necesaria para conectarse a los repositorios de plugins remotos. Ver repositories/elemento repository -->
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>
            <!--Este elemento describe todas las dependencias relacionadas con el proyecto. Estas dependencias forman parte de los diferentes pasos del proceso de construcción del proyecto. Se descargan automáticamente desde el repositorio definido en el proyecto. Para obtener más información, consulte el mecanismo de dependencia del proyecto. -->
            <dependencies>
                <!--ver dependencies/elemento dependency -->
                <dependency>
                    ......
                </<dependency>
            </<dependencies>
            <!--No se recomienda su uso. Ahora Maven ignora este elemento. -->
            <reports />
            <!--Este elemento incluye las especificaciones para la generación de informes mediante complementos de informe. Cuando el usuario ejecuta "mvn site", estos informes se ejecutarán. En la barra de navegación de la página se pueden ver los enlaces a todos los informes. Ver elemento reporting -->
            <reporting>
                ......
            </reporting>
            <!--Ver dependencyManagement elemento -->
            <dependencyManagement>
                <dependencies>
                    <!--ver dependencies/elemento dependency -->
                    <dependency>
                        ......
                    </<dependency>
                </<dependencies>
            </<dependencyManagement>
            <!--Ver distributionManagement elemento -->
            <distributionManagement>
                ......
            </distributionManagement>
            <!--Ver elemento properties -->
            <properties />
        </profile>
    </profiles>
    <!--Módulos (a veces llamados subproyectos) se construyen como parte del proyecto. Cada elemento de módulo es una ruta relativa al directorio del módulo -->
    <modules />
    <!--Lista de repositorios remotos descubiertos para dependencias y extensiones. -->
    <repositories>
        <!--Contiene la información necesaria para conectarse a los repositorios remotos -->
        <repository>
            <!--cómo manejar la descarga de versiones de lanzamiento en los repositorios remotos -->
            <releases>
                <!--true o false indica si el repositorio está configurado para descargar un tipo de componente (versión de lanzamiento, versión de snapshot) -->
                <enabled />
                <!--Este elemento especifica la frecuencia con la que ocurre la actualización. Maven comparará la hora del POM local y la del POM remoto. Las opciones son: always (siempre), daily (por defecto, diario), interval: X (donde X es el intervalo en minutos) o never (nunca). -->
                <updatePolicy />
                <!--qué hacer cuando Maven falla en la verificación del archivo de verificación de componentes: ignore (ignorar), fail (fallar) o warn (advertir). -->
                <checksumPolicy />
            </releases>
            <!-- cómo manejar la descarga de versiones de snapshot en los repositorios remotos. Con la configuración de releases y snapshots, el POM puede adoptar diferentes 
                política. Por ejemplo, alguien podría decidir habilitar solo la descarga de versiones de snapshot para fines de desarrollo. Ver repositories/repository/elemento releases -->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <!--Identificador único del repositorio remoto. Puede usarse para coincidir con el repositorio remoto configurado en el archivo settings.xml -->
            <id>banseon-repository-proxy</id>
            <!--Nombre del repositorio remoto -->
            <name>banseon-repository-proxy</nombre>
            <!--URL del repositorio remoto, según el protocolo://nombre del host/ruta de acceso -->
            <url>http://192.168.1.169:9999/repository/</url>
            <!-- es el tipo de diseño de repositorio utilizado para localizar y ordenar componentes-puede ser default (por defecto) o legacy (heredado). Maven 2ofrece un diseño predeterminado para sus repositorios; sin embargo 
                Mientras tanto, Maven 1.x tiene un diseño diferente. Podemos usar este elemento para especificar si el diseño es default (por defecto) o legacy (heredado). -->
            <layout>default</layout>
        </repository>
    </repositories>
    <!--Lista de repositorios remotos de plugins descubiertos, que se utilizan para construir y generar informes -->
    <pluginRepositories>
        <!--Contiene la información necesaria para conectarse a los repositorios de plugins remotos. Ver repositories/elemento repository -->
        <pluginRepository>
            ......
        </pluginRepository>
    </pluginRepositories>
 
 
    <!--Este elemento describe todas las dependencias relacionadas con el proyecto. Estas dependencias forman parte de los diferentes pasos del proceso de construcción del proyecto. Se descargan automáticamente desde el repositorio definido en el proyecto. Para obtener más información, consulte el mecanismo de dependencia del proyecto. -->
    <dependencies>
        <dependency>
            <!--ID de grupo de la dependencia -->
            <groupId>org.apache.maven</groupId>
            <!--ID de artifact de la dependencia -->
            <artifactId>maven-artifact</artifactId>
            <!--Número de versión de la dependencia. En Maven 2, también se puede configurar como un rango de número de versión. -->
            <version>3.8.1</version>
            <!-- Tipo de dependencia, el tipo predeterminado es jar. Generalmente representa la extensión del archivo de dependencia, aunque hay excepciones. Un tipo puede mapearse a otra extensión o clasificador. El tipo a menudo se corresponde con el método de empaquetado utilizado 
                A pesar de que también hay excepciones. Algunos ejemplos de instancias de tipo: jar, war, ejb-client y test-jar. Si se establece extensions a true, se puede definir un nuevo tipo en el plugin. Por lo tanto, la instancia del tipo anterior no está completa. -->
            <type>jar</type>
            <!-- Clasificador de dependencia. El clasificador puede distinguir entre componentes que pertenecen al mismo POM pero tienen diferentes métodos de construcción. El nombre del clasificador se adjunta al número de versión del nombre de archivo. Por ejemplo, si desea construir dos componentes separados en 
                JAR, uno utiliza Java 1.4El compilador, el otro utiliza Java 6El compilador, puede usar el clasificador para generar dos componentes JAR separados. -->
            <classifier></classifier>
            <!--Rango de dependencia. Durante el proceso de publicación del proyecto, ayuda a determinar qué componentes se incluyen. Para obtener más detalles, consulte el mecanismo de dependencia. - compile: Rango predeterminado, utilizado para la compilación - provided: Similar a la compilación, pero admite lo que espera JDK o contenedor proporcionar, similar a classpath 
                - runtime: Se necesita usar en la ejecución - test: Se utiliza cuando se realiza la tarea de test - system: Se requiere proporcionar el elemento externamente. Se puede obtener a través de systemPath 
                - systemPath: Únicamente para el rango system. Proporciona la ruta correspondiente - opcional: Cuando el proyecto en sí mismo se depende, indica si la dependencia se transmite. Se utiliza para dependencias continuas. -->
            <scope>test</scope>
            <!--Únicamente para el rango system. Tenga en cuenta que no se recomienda el uso de este elemento y puede que sea reemplazado en nuevas versiones. Este elemento especifica una ruta en el sistema de archivos. Se requiere una ruta absoluta en lugar de una relativa. Se recomienda usar coincidencia de atributo para rutas absolutas, por ejemplo ${java.home}. -->
            <systemPath></systemPath>
            <!--Al calcular las dependencias transitivas, enumera los conjuntos de componentes de dependencias excluidos de la lista de componentes de dependencias. Es decir, informa a Maven de que solo dependes de los proyectos especificados, no de las dependencias de los proyectos. Este elemento se utiliza principalmente para resolver problemas de conflicto de versiones -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            <!--Dependencias opcionales, si declaras una dependencia C como opcional en el proyecto B, necesitas referenciar explícitamente la dependencia de C en el proyecto que depende de B (por ejemplo, el proyecto A). Las dependencias opcionales bloquean la transitividad de las dependencias. -->
            <optional>true</optional>
        </<dependency>
    </<dependencies>
    <!--No se recomienda su uso. Ahora Maven ignora este elemento. -->
    <reports></reports>
    <!--Este elemento describe la especificación para generar informes utilizando plugins de informes. Cuando el usuario ejecuta "mvn site", estos informes se ejecutarán. En la barra de navegación del sitio se pueden ver los enlaces a todos los informes. -->
    <reporting>
        <!--true, por lo tanto, el sitio web no incluye informes predeterminados. Esto incluye informes en el menú "información del proyecto". -->
        <excludeDefaults />
        <!--Dónde se almacenan todos los informes generados. El valor predeterminado es ${project.build.directory}/site。 -->
        <outputDirectory />
        <!--los plugins de informes utilizados y su configuración. -->
        <plugins>
            <!--el elemento plugin contiene la información necesaria para describir el plugin de informes -->
            <plugin>
                <!--ID de grupo del plugin de informes en el repositorio -->
                <groupId />
                <!--ID de artefacto del plugin de informes en el repositorio -->
                <artifactId />
                <!--la versión del plugin de informes utilizado (o rango de versiones) -->
                <version />
                <!--si cualquier configuración se propaga a los proyectos secundarios -->
                <inherited />
                <!--configuración del plugin de informes -->
                <configuration />
                <!--Múltiples especificaciones de un conjunto de informes, cada especificación puede tener diferentes configuraciones. Una especificación (colección de informes) corresponde a un objetivo de ejecución. Por ejemplo, hay1,2,3,4,5,6,7,8,9informes.1,2,5constituye el conjunto A de informes, que corresponde a un objetivo de ejecución.2,5,8constituye el conjunto B de informes, que corresponde a otro objetivo de ejecución -->
                <reportSets>
                    <!--representa una colección de informes y la configuración que genera esta colección -->
                    <reportSet>
                        <!--el identificador único de la colección de informes, utilizado al heredar POM -->
                        <id />
                        <!--la configuración de los informes utilizados al generar la colección de informes -->
                        <configuration />
                        <!--la configuración se hereda a los subPOMs -->
                        <inherited />
                        <!--esta colección utiliza qué informes -->
                        <reports />
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
    <!-- información de dependencia por defecto para todos los subproyectos heredados de este proyecto. Esta información de dependencia no se解析 inmediatamente, sino que se cuando el subproyecto declara una dependencia (debe describir group ID y artifact ID) 
        información de ID (grupos de ID y ID de artefacto), si hay información adicional fuera de group ID y artifact ID, se coincide con la dependencia aquí mediante group ID y artifact ID y se utiliza la información de la dependencia aquí. -->
    <dependencyManagement>
        <dependencies>
            <!--ver dependencies/elemento dependency -->
            <dependency>
                ......
            </<dependency>
        </<dependencies>
    </<dependencyManagement>
    <!--información de distribución del proyecto, que indica la ubicación de publicación después de ejecutar mvn deploy. Con esta información, se puede desplegar el sitio web en un servidor remoto o desplegar los componentes en un repositorio remoto. -->
    <distributionManagement>
        <!--la información necesaria para desplegar los componentes generados por el proyecto en un repositorio remoto -->
        <repository>
            <!--¿Es asignar a la instantánea una versión única (generada por el timestamp y el número de compilación) o usar siempre la misma versión? Consulte repositories/elemento repository -->
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>banseon maven2</nombre>
            <url>file://${basedir}/target/deploy</url>
            <layout />
        </repository>
        <!--¿Dónde se despliega la instantánea del componente? Si no se configura este elemento, se despliega por defecto en el repositorio configurado en el elemento repository, consulte distributionManagement/elemento repository -->
        <snapshotRepository>
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>Banseon-maven2 Repository de Snapshots</nombre>
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
            <layout />
        </snapshotRepository>
        <!--la información necesaria para el sitio del proyecto de despliegue -->
        <sitio>
            <!--el identificador único de la ubicación de despliegue, utilizado para coincidir con el sitio y el archivo de configuración settings.xml -->
            <id>banseon-sitio</id>
            <!--nombre de la ubicación de despliegue -->
            <nombre>website de api de negocio </nombre>
            <!--URL de la ubicación de despliegue, según el protocolo://nombre del host/ruta de acceso -->
            <url>
                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
            </url>
        </site>
        <!--URL de la página de descarga del proyecto。Si no hay este elemento, el usuario debe referirse a la página principal。El motivo de usar este elemento es: ayudar a localizar componentes que no están en el repositorio (debido a restricciones de licencia)。 -->
        <downloadUrl />
        <!--Si el componente tiene un nuevo group ID y artifact ID (el componente se ha movido a una nueva ubicación), aquí se listan los detalles de relocalización del componente。 -->
        <relocation>
            <!--Nuevo group ID del componente -->
            <groupId />
            <!--Nuevo artifact ID del componente -->
            <artifactId />
            <!--Versión nueva del componente -->
            <version />
            <!--Mostrar información adicional al usuario sobre el movimiento, por ejemplo, el motivo。 -->
            <message />
        </relocation>
        <!-- proporciona el estado del componente en el repositorio remoto. No se debe establecer este elemento en el proyecto local, ya que es actualizado automáticamente por las herramientas. Los valores válidos son: none (por defecto),converted(el administrador del repositorio) 
            Maven 1 convertido desde el POM),socio(directamente desde el socio Maven) 2sincronizado desde el repositorio),desplegado(desde Maven) 2Ejemplo de despliegue),verificado(correcto y final)。 -->
        <status />
    </distributionManagement>
    <!--Reemplace el nombre con un valor, las Properties se pueden usar en todo el POM y también como condiciones de activación (ver la descripción del elemento activation en el archivo de configuración settings.xml). El formato es <name>value</name>。 -->
    <properties />
</project>