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

POM Maven

POM (Project Object Model, Modello Oggetto Progetto) è l'unità di lavoro base di un progetto Maven, è un file XML che contiene le informazioni di base del progetto, utilizzato per descrivere come costruire il progetto, dichiarare le dipendenze del progetto, ecc.

Quando si esegue un'operazione o un obiettivo, Maven cerca il POM nella directory corrente. Legge il POM, ottiene le informazioni di configurazione necessarie e poi esegue l'obiettivo.

Nel POM è possibile specificare la seguente configurazione:

  • Dipendenze del progetto

  • Plugin

  • Obiettivo di esecuzione

  • Profile di costruzione del progetto

  • Versione del progetto

  • Elenco dei sviluppatori del progetto

  • Informazioni sulla lista di posta elettronica

Prima di creare il POM, dobbiamo descrivere il gruppo di progetto (groupId), l'ID unico del progetto.

<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">
 
    <!-- Versione del modello -->
    <modelVersion>4.0.0</modelVersion>
    <!-- Il marchio unico dell'azienda o dell'organizzazione, e il percorso configurato viene generato da esso, ad esempio com.companyname.project-group, Maven metterà il progetto in un jar nel percorso locale: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- L'ID unico del progetto, sotto un groupId possono esserci più progetti, e l'artifactId viene utilizzato per distinguerli -->
    <artifactId>project</artifactId>
 
    <!-- Versione -->
    <version>1.0</version>
</project>

Tutti i file POM devono avere l'elemento project e tre campi necessari: groupId, artifactId, version.

nododescrizione
projectIl tag radice del progetto.
modelVersionLa versione del modello deve essere impostata su 4.0.
groupIdQuesto è l'identificatore del gruppo del progetto. In un'organizzazione o progetto è solitamente unico. Ad esempio, un'organizzazione bancaria com.companyname.project-group possiede tutti i progetti relativi alla banca.
artifactIdQuesto è l'identificatore del progetto. Di solito è il nome del progetto. Ad esempio, banca dei consumatori. groupId e artifactId insieme definiscono la posizione dell'artifact nel deposito.
version

Questo è il numero di versione del progetto. Nel deposito dell'artifact, viene utilizzato per distinguere le diverse versioni. Ad esempio:

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

POM (Super) padre

Il POM (Super) padre è il POM predefinito di Maven. Tutti i POM derivano da un POM padre (indipendentemente dal fatto che sia definito esplicitamente o meno). Il POM padre contiene alcune impostazioni predefinite che possono essere ereditate. Pertanto, quando Maven rileva che è necessario scaricare le dipendenze dal POM, va al deposito predefinito configurato nel Super POM http://repo1.maven.org/maven2 per scaricare.

Maven utilizza effective pom (Super pom più la configurazione del progetto) per eseguire gli obiettivi correlati, aiuta i developer a fare la configurazione il meno possibile nel file pom.xml, naturalmente queste configurazioni possono essere sovrascritte.

Usa il seguente comando per visualizzare la configurazione predefinita di Super POM:

mvn help:effective-pom

Quindi creiamo la directory MVN/project e nella directory creiamo pom.xml, il contenuto è il seguente:

<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">
 
    <!-- Versione del modello -->
    <modelVersion>4.0.0</modelVersion>
    <!-- Il marchio unico dell'azienda o dell'organizzazione, e il percorso configurato viene generato da esso, ad esempio com.companyname.project-group, Maven metterà il progetto in un jar nel percorso locale: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- L'ID unico del progetto, sotto un groupId possono esserci più progetti, e l'artifactId viene utilizzato per distinguerli -->
    <artifactId>project</artifactId>
 
    <!-- Versione -->
    <version>1.0</version>
</project>

Nel terminale di comando, entra nella directory MVN/project e esegui il seguente comando:

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

Maven inizierà a elaborare e visualizzare effective-pom.

[INFO] Ricerca di progetti...
Download: 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] Tempo totale: 01:36 min
[INFO] Finito alle: 2018-09-05T11:31:28+08:00
[INFO] Memoria finale: 15M/149M
[INFO] ------------------------------------------------------------------------

Il risultato di un POM efficace è come viene visualizzato nella console di comando, dopo l'ereditarietà e l'interpolazione, rendendo la configurazione efficace.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================== -->
<!--                                                         -->
<!-- Generato da Maven Help Plugin il 05/07/2012 alle 11:41:51 -->
<!-- Vedi: 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>Switchboard del Repository Maven</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>mai</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Repository dei Plugin Maven</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target\site</outputDirectory>
  </reporting>
</project>

Nel file pom.xml sopra, puoi vedere la struttura di default del directory delle sorgenti del progetto utilizzata da Maven durante l'esecuzione degli obiettivi, il directory di output, i plugin necessari, i repository e il directory delle report.

Il file pom.xml di Maven non richiede la scrittura manuale.

Maven fornisce una vasta gamma di plugin di prototipi per creare progetti, inclusi la struttura del progetto e pom.xml.

Elenco completo e dettagliato dei tag 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">
    Le coordinate del progetto padre. Se non è stato specificato il valore di un elemento nel progetto, il valore corrispondente nel progetto padre è il valore predefinito del progetto. Le coordinate includono group ID, artifact ID e --> 
        versione. -->
    <parent>
        L'identificatore del componente del progetto padre ereditato -->
        <artifactId />
        L'identificatore globale del progetto padre ereditato -->
        <groupId />
        La versione del progetto padre ereditato -->
        <version />
        Il percorso relativo del file POM del progetto padre. Il percorso relativo ti permette di scegliere un percorso diverso. Il valore predefinito è ../pom.xml. Maven cerca prima il percorso del progetto corrente per il progetto padre. --> 
            Il POM di destinazione, poi nella posizione di questo percorso del file system (relativePath), quindi nel repository locale, infine nel repository remoto per cercare il POM del progetto padre. -->
        <relativePath />
    </parent>
    Il modello di dichiarazione del descrrittore del progetto segue quale versione del modello POM. La versione del modello in sé cambia raramente, tuttavia, è essenziale per garantire la stabilità, poiché quando Maven introduce nuove funzionalità o altre modifiche al modello, assicura la stabilità. -->
    <modelVersion>4.0.0</modelVersion>
    L'identificatore globale del progetto, solitamente utilizzato il nome del pacchetto completo per distinguere questo progetto da altri progetti. E anche il percorso generato durante la costruzione è generato da qui, ad esempio, il percorso relativo generato per com.mycompany.app è: /com/mycompany/app -->
    <groupId>asia.banseon</groupId>
    L'identificatore dell'componente, che insieme all'ID del gruppo univocamente identifica un componente. In altre parole, non puoi avere due progetti diversi con lo stesso ID dell'artifact e groupID; in un certo 
        The artifact ID must also be unique under a specific group ID. An artifact is something produced or used by a project, Maven artifacts produced for the project include: JARs, source code, binary releases and WARs, etc. -->
    <artifactId>banseon-maven2</artifactId>
    <!--Type of artifact generated by the project, such as jar, war, ear, pom. Plugins can create their own artifact types, so the list above is not all artifact types-->
    <packaging>jar</packaging>
    <!--Current version of the project, formatted as: major version.minor version.incremental version-restriction version number-->
    <version>1.0-SNAPSHOT</version>
    <!--Name of the project, used by Maven generated documents-->
    <name>banseon-maven</name>
    <!--URL of the project homepage, used by Maven generated documents-->
    <url>http://www.baidu.com/banseon</url>
    <!--Detailed description of the project, used by Maven generated documents. When this element can be described in HTML format (for example, the text in CDATA is ignored by the parser, it can include HTML tags--> 
        (签名),Not encouraged to use plain text description. If you need to modify the index page of the generated web site, you should modify your own index page file instead of adjusting the document here. -->
    <description>A Maven project to study Maven.</description>
    <!--Description of the prerequisites in the project build environment-->
    <prerequisites>
        <!--Minimum version of Maven required to build this project or use this plugin-->
        <maven />
    </prerequisites>
    <!--Name and URL of the issue management system (Bugzilla, Jira, Scarab, or any issue management system you like) for the project, this example is jira-->
    <issueManagement>
        <!--Name of the issue management system (e.g., jira)-->
        <system>jira</system>
        <!--URL of the issue management system used for this project-->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!--Continuous integration information for the project-->
    <ciManagement>
        <!--Continuous integration system name, for example, continuum-->
        <system />
        <!--URL del sistema di integrazione continua utilizzato da questo progetto (se il sistema di integrazione continua ha un'interfaccia web).-->
        <url />
        <!--Opzioni di configurazione per gli sviluppatori / utenti da notificare quando il build è completato. Include informazioni sul destinatario e le condizioni di notifica (errore, fallimento, successo, avviso)-->
        <notifiers>
            <!--Configura un modo per notificare l'utente / lo sviluppatore quando il build viene interrotto-->
            <notifier>
                <!--Modalità di trasmissione delle notifiche-->
                <type />
                <!--Notificare quando si verifica un errore-->
                <sendOnError />
                <!--Notificare quando il build fallisce-->
                <sendOnFailure />
                <!--Notificare quando il build ha successo-->
                <sendOnSuccess />
                <!--Notificare quando si verifica un avviso-->
                <sendOnWarning />
                <!--Non raccomandato. Dove inviare le notifiche-->
                <address />
                <!--Opzioni di configurazione estese-->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <!--Anno di creazione del progetto, in 4 cifre. Questo valore deve essere utilizzato quando si generano informazioni sul copyright.-->
    <inceptionYear />
    <!--Informazioni sulle liste di email correlate al progetto-->
    <mailingLists>
        <!--Questo elemento descrive tutte le liste di email correlate al progetto. Il sito generato automaticamente utilizza queste informazioni.-->
        <mailingList>
            <!--Nome dell'email-->
            <name>Demo</name>
            <!--Indirizzo o link per inviare email; se è un indirizzo email, viene creato automaticamente un link mailto: durante la creazione del documento-->
            <post>[email protected]</post>
            <!--Indirizzo o link di sottoscrizione delle email; se è un indirizzo email, viene creato automaticamente un link mailto: durante la creazione del documento-->
            <subscribe>[email protected]</subscribe>
            <!--Indirizzo o link di annullamento della sottoscrizione delle email; se è un indirizzo email, viene creato automaticamente un link mailto: durante la creazione del documento-->
            
            <!--Puoi esplorare l'URL delle informazioni delle email-->',
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!--Elenco dei sviluppatori del progetto-->
    <developers>
        <!--Informazioni su un sviluppatore di progetto-->
        <developer>
            <!--Identificatore univoco del sviluppatore del progetto nel SCM-->
            <id>HELLO WORLD</id>
            <!--Nome completo del sviluppatore del progetto-->
            <name>banseon</name>
            <!--Email del sviluppatore del progetto-->
            <email>[email protected]</email>
            <!--URL della pagina personale del sviluppatore del progetto-->
            <url />
            <!--Ruoli che il sviluppatore del progetto assume nel progetto, l'elemento ruolo descrive vari ruoli-->
            <roles>
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
            <!--Organizzazione a cui appartiene lo sviluppatore del progetto-->
            <organization>demo</organization>
            <!--URL dell'organizzazione a cui appartiene lo sviluppatore del progetto-->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!--Proprietà dei sviluppatori del progetto, come ad esempio come gestire i messaggi istantanei.-->
            <properties>
                <dept>No</dept>
            </properties>
            <!--L'ora di fuso in cui si trovano i sviluppatori del progetto, intero tra -11 e 12.-->
            <timezone>-5</timezone>
        </developer>
    </developers>
    <!--Elenco degli altri contribuenti del progetto-->
    <contributors>
        <!--Altri contribuenti del progetto. Vedi developers/developer elemento-->
        <contributor>
            <name />
            <email />
            <url />
            <organization />
            <organizationUrl />
            <roles />
            <timezone />
            </properties />
        </contributor>
    </contributors>
    <!--L'elemento descrive l'elenco di licenze di un progetto. Dovrebbe essere elencato solo l'elenco di licenze del progetto, non l'elenco di licenze dei progetti dipendenti. Se vengono elencate più licenze, l'utente può scegliere una di esse invece di accettare tutte le licenze.-->
    <licenses>
        <!--Descrive la licenza del progetto, utilizzata per generare la pagina della licenza del sito web del progetto, nonché altri report e validation.-->
        <license>
            <!--Nome legale della licenza-->
            <name>Apache 2</name>
            <!--URL della pagina del testo ufficiale della licenza-->
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
            <!--Il modo principale di distribuzione del progetto: repo, può essere scaricato dalla repository Maven; manual, l'utente deve scaricare e installare manualmente le dipendenze-->
            <distribution>repo</distribution>
            <!--Informazioni aggiuntive sulla licenza-->
            <comments>Una licenza OSS amica delle aziende</comments>
        </license>
    </licenses>
    <!--L'etichetta SCM (Source Control Management) ti permette di configurare il tuo repository di codice, per essere utilizzato dal sito web Maven e altri plugin.-->
    <scm>
        <!--URL dello SCM, che descrive il repository di versione e come connettersi al repository. Per ulteriori dettagli, vedere la formato e la lista di URL forniti dagli SCM. Questa connessione è in sola lettura.-->
        <connection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
        </connection>
        <!--Utilizzato dai sviluppatori, simile all'elemento connection. Questo collegamento non è solo in sola lettura-->
        <developerConnection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
        </developerConnection>
        <!--Etichetta corrente del codice, di default HEAD durante lo sviluppo-->
        <tag />
        <!--Indirizzo URL del repository SCM (ad esempio ViewVC o Fisheye)-->
        <url>http://svn.baidu.com/banseon</url>
    </scm>
    <!--Descrive le varie proprietà dell'organizzazione a cui il progetto appartiene. I documenti generati da Maven utilizzano-->
    <organization>
        <!--Nome completo dell'organizzazione-->
        <name>demo</name>
        <!--URL della pagina principale dell'organizzazione-->
        <url>http://www.baidu.com/banseon</url>
    </organization>
    <!--Informazioni necessarie per costruire il progetto-->
    <build>
        <!--L'elemento imposta la directory del codice sorgente del progetto. Quando si costruisce il progetto, il sistema di costruzione compila il codice sorgente nella directory. Questo percorso è una relativa rispetto a pom.xml.-->
        <sourceDirectory />
        <!--L'elemento imposta la directory del codice sorgente degli script del progetto. Questa directory è diversa dalla directory del codice sorgente: nella maggior parte dei casi, i contenuti di questa directory vengono copiati nella directory di output (poiché gli script vengono interpretati, non compilati).-->
        <scriptSourceDirectory />
        <!--L'elemento imposta la directory del codice sorgente utilizzato per i test unitari del progetto. Quando si esegue il progetto di test, il sistema di costruzione compila il codice sorgente nella directory. Questo percorso è una relativa rispetto a pom.xml.-->
        <testSourceDirectory />
        <!--Directory in cui vengono memorizzati i file class compilati dell'applicazione-->
        <outputDirectory />
        <!--Directory in cui vengono memorizzati i file class compilati dei test eseguiti-->
        <testOutputDirectory />
        <!--Utilizza una serie di estensioni di costruzione provenienti da questo progetto-->
        <extensions>
            <!--Descrive l'estensione di costruzione utilizzata-->
            <extension>
                <!--groupId dell'estensione di costruzione-->
                <groupId />
                <!--artifactId dell'estensione di costruzione-->
                <artifactId />
                <!--Versione dell'estensione di costruzione-->
                <version />
            </extension>
        </extensions>
        <!--Valore predefinito quando il progetto non specifica un obiettivo (Maven2 lo chiama fase)-->
        <defaultGoal />
        <!--Questo elemento descrive l'elenco di percorsi di risorse relativi al progetto, ad esempio i file di proprietà associati al progetto, queste risorse sono incluse nel file di pacchetto finale.-->
        <resources>
            <!--Questo elemento descrive tutti i percorsi di risorse relativi al progetto o ai test-->
            <resource>
                <!--Descrive il percorso di destinazione delle risorse. Questo percorso è relativo alla directory target/classes (ad esempio ${project.build.outputDirectory}). Esempio--> 
                    <!--Se vuoi che le risorse siano nel pacchetto specifico (org.apache.maven.messages), devi impostare questo elemento su org/apache/maven/messages. Tuttavia, se vuoi semplicemente mettere le risorse nella struttura del directory delle sorgenti, non è necessario questa configurazione. -->
                <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扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 -->
                    <extensions />
                    <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
                    <executions>
                        <!--execution元素包含了插件执行需要的信息 -->
                        <execution>
                            <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
                            <id />
                            <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
                            <phase />
                            <!--配置的执行目标 -->
                            <goals />
                            <!--配置是否被传播到子POM -->
                            <inherited />
                            <!--作为DOM对象的配置 -->
                            <configuration />
                        </execution>
                    </executions>
                    <!--项目引入插件所需的额外依赖 -->
                    <dependencies>
                        <!--参见dependencies/dependency元素 -->
                        <dependency>
                            ......
                        </dependency>
                    </dependencies>
                    <!--任何配置是否被传播到子项目 -->
                    <inherited />
                    <!--作为DOM对象的配置 -->
                    <configuration />
                </plugin>
            </plugins>
        </pluginManagement>
        <!--使用的插件列表 -->
        <plugins>
            <!--参见build/pluginManagement/plugins/plugin元素 -->
            <plugin>
                <groupId />
                <artifactId />
                <version />
                <extensions />
                <executions>
                    <execution>
                        <id />
                        <phase />
                        <goals />
                        <inherited />
                        <configuration />
                    </execution>
                </executions>
                <dependencies>
                    <!--参见dependencies/dependency元素 -->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
                <goals />
                <inherited />
                <configuration />
            </plugin>
        </plugins>
    </build>
    <!--在列的项目构建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>
            <!--Moduli (a volte chiamati sottoprogetti) che vengono costruiti come parte del progetto. Ogni elemento modulo elencato è il percorso relativo alla directory del modulo -->
            <modules />
            <!--Elenco dei depositi remoti da cui vengono trovati dipendenze e estensioni -->
            <repositories>
                <!--参见repositories/repository元素 -->
                <repository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </repository>
            </repositories>
            Elenco dei depositi remoti di plugin trovati, utilizzati per costruire e generare report.
            <pluginRepositories>
                Informazioni per connettersi al deposito remoto di plugin. Vedi repositories/repository element.
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>
            Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato. Quest'elemento descrive tutte le dipendenze correlate al progetto. Queste dipendenze compongono i vari passaggi del processo di costruzione del progetto. Vengono scaricate automaticamente dai depositi definiti nel progetto. Per ulteriori informazioni, vedere il meccanismo delle dipendenze del progetto.
            <dependencies>
                <!--参见dependencies/dependency元素 -->
                <dependency>
                    ......
                </dependency>
            </dependencies>
            <!--不赞成使用. 现在Maven忽略该元素. -->
            <reports />
            <!--Questo elemento include le specifiche per la generazione di report con i plugin di report. Quando l'utente esegue "mvn site", questi report vengono eseguiti. I link a tutti i report sono visibili nella barra di navigazione della pagina. Vedere l'elemento reporting -->
            <reporting>
                ......
            </reporting>
            <!--Vedere l'elemento dependencyManagement -->
            <dependencyManagement>
                <dependencies>
                    <!--参见dependencies/dependency元素 -->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
            </dependencyManagement>
            <!--Vedere l'elemento distributionManagement -->
            <distributionManagement>
                ......
            </distributionManagement>
            <!--Vedere l'elemento properties -->
            </properties />
        </profile>
    </profiles>
    <!--Moduli (a volte chiamati sottoprogetti) che vengono costruiti come parte del progetto. Ogni elemento modulo elencato è il percorso relativo alla directory del modulo -->
    <modules />
    <!--Elenco dei depositi remoti da cui vengono trovati dipendenze e estensioni -->
    <repositories>
        <!--Includere le informazioni necessarie per connettersi al deposito remoto -->
        <repository>
            <!--Come gestire il download delle versioni di rilascio nel deposito remoto -->
            <releases>
                <!--true o false indica se il deposito è abilitato per il download di un tipo di componente (versione di rilascio, versione snapshot). -->
                <enabled />
                <!--L'elemento specifica la frequenza di aggiornamento. Maven confronta i timestamp del POM locale e remoto. Le opzioni disponibili sono: always (sempre), daily (predefinito, quotidiano), interval: X (qui X è l'intervallo in minuti) o never (mai). -->
                <updatePolicy />
                <!--Cosa fare quando Maven fallisce nel verificare il file di verifica dei componenti: ignore (ignora), fail (fallisce) o warn (avvisa). -->
                <checksumPolicy />
            </releases>
            <!--Come gestire il download delle versioni snapshot nel deposito remoto. Con le configurazioni releases e snapshots, il POM può adottare diverse strategie per ogni tipo di componente in ogni deposito singolo --> 
                Strategia. Ad esempio, qualcuno potrebbe decidere di abilitare il download delle versioni snapshot solo per scopi di sviluppo. Vedi l'elemento repositories/repository/releases -->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <!--Identificatore univoco del deposito remoto. Può essere utilizzato per abbinare il deposito remoto configurato nel file settings.xml -->
            <id>banseon-repository-proxy</id>
            <!--Nome del deposito remoto -->
            <name>banseon-repository-proxy</name>
            URL del deposito remoto, in forma protocol://hostname/path
            <url>http://192.168.1.169:9999/repository/</url>
            Layout di deposito per la localizzazione e l'ordinamento dei componenti - può essere default (predefinito) o legacy (rilasciato). Maven 2 fornisce un layout predefinito per i suoi depositi; 
                Tuttavia, Maven 1.x ha una disposizione diversa. Possiamo utilizzare questo elemento per specificare se la disposizione è default (predefinita) o legacy (rilasciata).
            <layout>default</layout>
        </repository>
    </repositories>
    Elenco dei depositi remoti di plugin trovati, utilizzati per costruire e generare report.
    <pluginRepositories>
        Informazioni per connettersi al deposito remoto di plugin. Vedi repositories/repository element.
        <pluginRepository>
            ......
        </pluginRepository>
    </pluginRepositories>
 
 
    Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato. Quest'elemento descrive tutte le dipendenze correlate al progetto. Queste dipendenze compongono i vari passaggi del processo di costruzione del progetto. Vengono scaricate automaticamente dai depositi definiti nel progetto. Per ulteriori informazioni, vedere il meccanismo delle dipendenze del progetto.
    <dependencies>
        <dependency>
            Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato.
            <groupId>org.apache.maven</groupId>
            Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato.
            <artifactId>maven-artifact</artifactId>
            Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato.
            <version>3.8.1</version>
            Classificatori a dipendenza, il tipo predefinito è jar. Di solito rappresenta l'estensione del file di dipendenza, ma ci sono eccezioni. Un tipo può essere mappato a un'altra estensione o classificatore. Il tipo è spesso corrispondente al modo di pacchettizzazione utilizzato. 
                Anche se ci sono eccezioni. Alcuni esempi di tipi: jar, war, ejb-client e test-jar. Se si imposta extensions a true, è possibile definire nuovi tipi nel plugin. Pertanto, gli esempi precedenti di tipi non sono completi. -->
            <type>jar</type>
            Classificatori a dipendenza. I classificatori possono distinguere componenti che appartengono allo stesso POM ma con metodi di costruzione diversi. Il nome del classificatore viene aggiunto alla versione del nome del file. Ad esempio, se si desidera costruire due componenti separati in 
                JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 -->
            <classifier></classifier>
            <!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 - compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath 
                - runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得 
                - systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 -->
            <scope>test</scope>
            <!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖指定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 -->
            <systemPath></systemPath>
            <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 -->
            <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 della pagina di download del progetto. Se non è presente questo elemento, l'utente dovrebbe fare riferimento alla pagina principale. L'uso di questo elemento è: aiutare a localizzare componenti non presenti nel deposito (per motivi di licenza).-->
        <downloadUrl />
        <!--Se il componente ha un nuovo ID group e artifact (il componente è stato spostato a una nuova posizione), elenca le informazioni di relocazione del componente.-->
        <relocation>
            <!--Nuovo ID group del componente.-->
            <groupId />
            <!--Nuovo ID artifact del componente.-->
            <artifactId />
            <!--Nuovo numero di versione del componente.-->
            <version />
            <!--Mostra informazioni aggiuntive all'utente riguardo al movimento, ad esempio il motivo.-->
            <message />
        </relocation>
        <!--Fornisce lo stato di questo componente nel deposito remoto. Non è possibile impostare questo elemento nel progetto locale, poiché è aggiornato automaticamente dagli strumenti. Valori validi: none (predefinito), converted (amministratore del deposito ha convertito) 
            Maven 1 POM convertito), partner (sincronizzato direttamente dal deposito partner Maven 2), deployed (dalla部署 di esempio Maven 2), verified (verificato come corretto e finale).-->
        <status />
    </distributionManagement>
    <!--Sostituisci il nome con il valore, le Properties possono essere utilizzate in tutto il POM e anche come condizioni di attivazione (vedi la descrizione dell'elemento activation nel file di configurazione settings.xml). Il formato è <name>value</name>.-->
    </properties />
</project>