乐趣区

关于java:第三篇-Maven-POM之Spring-Cloud直播商城-b2b2c电子商务技术总结

Maven POM
POM(Project Object Model,我的项目对象模型) 是 Maven 工程的根本工作单元,是一个 XML 文件,蕴含了我的项目的根本信息,用于形容我的项目如何构建,申明我的项目依赖,等等。

执行工作或指标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,而后执行指标。

POM 中能够指定以下配置:

我的项目依赖
插件
执行指标
我的项目构建 profile
我的项目版本
我的项目开发者列表
相干邮件列表信息
在创立 POM 之前,咱们首先须要形容项目组 (groupId), 我的项目的惟一 ID。​

<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的惟一标记,并且配置时生成的门路也是由此生成,如 com.companyname.project-group,maven 会将该我的项目打成的 jar 包放本地门路:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 我的项目的惟一 ID,一个 groupId 上面可能多个我的项目,就是靠 artifactId 来辨别的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 -->
    <version>1.0</version>
</project>

所有 POM 文件都须要 project 元素和三个必须字段:groupId,artifactId,version。父(Super)POM
父(Super)POM 是 Maven 默认的 POM。所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 蕴含了一些能够被继承的默认设置。因而,当 Maven 发现须要下载 POM 中的 依赖时,它会到 Super POM 中配置的默认仓库 http://repo1.maven.org/maven2 去下载。

Maven 应用 effective pom(Super pom 加上工程本人的配置)来执行相干的指标,它帮忙开发者在 pom.xml 中做尽可能少的配置,当然这些配置能够被重写。

应用以下命令来查看 Super POM 默认配置:mvn help:effective-pom接下来咱们创立目录 MVN/project,在该目录下创立 pom.xml,内容如下:

<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的惟一标记,并且配置时生成的门路也是由此生成,如 com.companyname.project-group,maven 会将该我的项目打成的 jar 包放本地门路:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 我的项目的惟一 ID,一个 groupId 上面可能多个我的项目,就是靠 artifactId 来辨别的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 -->
    <version>1.0</version>
</project>

在命令控制台,进入 MVN/project 目录,执行以下命令:C:\MVN\project>mvn help:effective-pomMaven 将会开始解决并显示 effective-pom。

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

Effective POM 的后果就像在控制台中显示的一样,通过继承、插值之后,使配置失效。

Effective POM 的后果就像在控制台中显示的一样,通过继承、插值之后,使配置失效。<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
<!--                                                                   -->
<!-- ================================================================= -->
 
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Effective POM for project                                         -->
<!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
<!--                                                                   -->
<!-- ================================================================= -->
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  <version>1.0</version>
  <build>
    <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
    <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
    <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
    <resources>
      <resource>
        <mergeId>resource-0</mergeId>
        <directory>C:\MVN\project\src\main\resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <mergeId>resource-1</mergeId>
        <directory>C:\MVN\project\src\test\resources</directory>
      </testResource>
    </testResources>
    <directory>C:\MVN\project\target</directory>
    <finalName>project-1.0</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <version>2.3.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-ejb-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0-beta-8</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>2.0-beta-7</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.0.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.1-alpha-2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  </reporting>
</project>

在下面的 pom.xml 中,你能够看到 Maven 在执行指标时须要用到的默认工程源码目录构造、输入目录、须要的插件、仓库和报表目录。

Maven 的 pom.xml 文件也不须要手工编写。

Maven 提供了大量的原型插件来创立工程,包含工程构造和 pom.xml。

POM 标签大全详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
    <!-- 父我的项目的坐标。如果我的项目中没有规定某个元素的值,那么父我的项目中的对应值即为我的项目的默认值。坐标包含 group ID,artifact ID 和 
        version。-->
    <parent>
        <!-- 被继承的父我的项目的构件标识符 -->
        <artifactId />
        <!-- 被继承的父我的项目的寰球惟一标识符 -->
        <groupId />
        <!-- 被继承的父我的项目的版本 -->
        <version />
        <!-- 父我的项目的 pom.xml 文件的相对路径。相对路径容许你抉择一个不同的门路。默认值是../pom.xml。Maven 首先在构建以后我的项目的中央寻找父项 
            目标 pom,其次在文件系统的这个地位(relativePath 地位),而后在本地仓库,最初在近程仓库寻找父我的项目的 pom。-->
        <relativePath />
    </parent>
    <!-- 申明我的项目描述符遵循哪一个 POM 模型版本。模型自身的版本很少扭转,尽管如此,但它依然是必不可少的,这是为了当 Maven 引入了新的个性或者其余模型变更的时候,确保稳定性。-->
    <modelVersion>4.0.0</modelVersion>
    <!-- 我的项目的寰球惟一标识符,通常应用全限定的包名辨别该我的项目和其余我的项目。并且构建时生成的门路也是由此生成,如 com.mycompany.app 生成的相对路径为:/com/mycompany/app -->
    <groupId>asia.banseon</groupId>
    <!-- 构件的标识符,它和 group ID 一起惟一标识一个构件。换句话说,你不能有两个不同的我的项目领有同样的 artifact ID 和 groupID;在某个 
        特定的 group ID 下,artifact ID 也必须是惟一的。构件是我的项目产生的或应用的一个货色,Maven 为我的项目产生的构件包含:JARs,源 码,二进制公布和 WARs 等。-->
    <artifactId>banseon-maven2</artifactId>
    <!-- 我的项目产生的构件类型,例如 jar、war、ear、pom。插件能够创立他们本人的构件类型,所以后面列的不是全副构件类型 -->
    <packaging>jar</packaging>
    <!-- 我的项目以后版本,格局为: 主版本. 次版本. 增量版本 - 限定版本号 -->
    <version>1.0-SNAPSHOT</version>
    <!-- 我的项目的名称, Maven 产生的文档用 -->
    <name>banseon-maven</name>
    <!-- 我的项目主页的 URL, Maven 产生的文档用 -->
    <url>http://www.baidu.com/banseon</url>
    <!-- 我的项目的详细描述, Maven 产生的文档用。当这个元素可能用 HTML 格局形容时(例如,CDATA 中的文本会被解析器疏忽,就能够蕴含 HTML 标 
        签),不激励应用纯文本形容。如果你须要批改产生的 web 站点的索引页面,你应该批改你本人的索引页文件,而不是调整这里的文档。-->
    <description>A maven project to study maven.</description>
    <!-- 形容了这个我的项目构建环境中的前提条件。-->
    <prerequisites>
        <!-- 构建该我的项目或应用该插件所须要的 Maven 的最低版本 -->
        <maven />
    </prerequisites>
    <!-- 我的项目的问题管理系统 (Bugzilla, Jira, Scarab, 或任何你喜爱的问题管理系统) 的名称和 URL,本例为 jira -->
    <issueManagement>
        <!-- 问题管理系统(例如 jira)的名字,-->
        <system>jira</system>
        <!-- 该我的项目应用的问题管理系统的 URL -->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!-- 我的项目继续集成信息 -->
    <ciManagement>
        <!-- 继续集成系统的名字,例如 continuum -->
        <system />
        <!-- 该我的项目应用的继续集成系统的 URL(如果继续集成系统有 web 接口的话)。-->
        <url />
        <!-- 构建实现时,须要告诉的开发者 / 用户的配置项。包含被告诉者信息和告诉条件(谬误,失败,胜利,正告)-->
        <notifiers>
            <!-- 配置一种形式,当构建中断时,以该形式告诉用户 / 开发者 -->
            <notifier>
                <!-- 传送告诉的路径 -->
                <type />
                <!-- 产生谬误时是否告诉 -->
                <sendOnError />
                <!-- 构建失败时是否告诉 -->
                <sendOnFailure />
                <!-- 构建胜利时是否告诉 -->
                <sendOnSuccess />
                <!-- 产生正告时是否告诉 -->
                <sendOnWarning />
                <!-- 不赞成应用。告诉发送到哪里 -->
                <address />
                <!-- 扩大配置项 -->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <!-- 我的项目创立年份,4 位数字。当产生版权信息时须要应用这个值。-->
    <inceptionYear />
    <!-- 我的项目相干邮件列表信息 -->
    <mailingLists>
        <!-- 该元素形容了我的项目相干的所有邮件列表。主动产生的网站援用这些信息。-->
        <mailingList>
            <!-- 邮件的名称 -->
            <name>Demo</name>
            <!-- 发送邮件的地址或链接,如果是邮件地址,创立文档时,mailto: 链接会被主动创立 -->
            <post>banseon@126.com</post>
            <!-- 订阅邮件的地址或链接,如果是邮件地址,创立文档时,mailto: 链接会被主动创立 -->
            <subscribe>banseon@126.com</subscribe>
            <!-- 勾销订阅邮件的地址或链接,如果是邮件地址,创立文档时,mailto: 链接会被主动创立 -->
            <unsubscribe>banseon@126.com</unsubscribe>
            <!-- 你能够浏览邮件信息的 URL -->
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!-- 我的项目开发者列表 -->
    <developers>
        <!-- 某个我的项目开发者的信息 -->
        <developer>
            <!--SCM 里我的项目开发者的惟一标识符 -->
            <id>HELLO WORLD</id>
            <!-- 我的项目开发者的全名 -->
            <name>banseon</name>
            <!-- 我的项目开发者的 email -->
            <email>banseon@126.com</email>
            <!-- 我的项目开发者的主页的 URL -->
            <url />
            <!-- 我的项目开发者在我的项目中表演的角色,角色元素形容了各种角色 -->
            <roles>
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
            <!-- 我的项目开发者所属组织 -->
            <organization>demo</organization>
            <!-- 我的项目开发者所属组织的 URL -->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!-- 我的项目开发者属性,如即时消息如何解决等 -->
            <properties>
                <dept>No</dept>
            </properties>
            <!-- 我的项目开发者所在时区,-11 到 12 范畴内的整数。-->
            <timezone>-5</timezone>
        </developer>
    </developers>
    <!-- 我的项目的其余贡献者列表 -->
    <contributors>
        <!-- 我的项目的其余贡献者。参见 developers/developer 元素 -->
        <contributor>
            <name />
            <email />
            <url />
            <organization />
            <organizationUrl />
            <roles />
            <timezone />
            <properties />
        </contributor>
    </contributors>
    <!-- 该元素形容了我的项目所有 License 列表。应该只列出该项目标 license 列表,不要列出依赖我的项目的 license 列表。如果列出多个 license,用户能够抉择它们中的一个而不是承受所有 license。-->
    <licenses>
        <!-- 形容了我的项目的 license,用于生成我的项目的 web 站点的 license 页面,其余一些报表和 validation 也会用到该元素。-->
        <license>
            <!--license 用于法律上的名称 -->
            <name>Apache 2</name>
            <!-- 官网的 license 注释页面的 URL -->
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
            <!-- 我的项目散发的次要形式:repo,能够从 Maven 库下载 manual,用户必须手动下载和装置依赖 -->
            <distribution>repo</distribution>
            <!-- 对于 license 的补充信息 -->
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>
    <!--SCM(Source Control Management)标签容许你配置你的代码库,供 Maven web 站点和其它插件应用。-->
    <scm>
        <!--SCM 的 URL, 该 URL 形容了版本库和如何连贯到版本库。欲知详情,请看 SCMs 提供的 URL 格局和列表。该连贯只读。-->
        <connection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
        </connection>
        <!-- 给开发者应用的,相似 connection 元素。即该连贯不仅仅只读 -->
        <developerConnection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
        </developerConnection>
        <!-- 以后代码的标签,在开发阶段默认为 HEAD -->
        <tag />
        <!-- 指向我的项目的可浏览 SCM 库(例如 ViewVC 或者 Fisheye)的 URL。-->
        <url>http://svn.baidu.com/banseon</url>
    </scm>
    <!-- 形容我的项目所属组织的各种属性。Maven 产生的文档用 -->
    <organization>
        <!-- 组织的全名 -->
        <name>demo</name>
        <!-- 组织主页的 URL -->
        <url>http://www.baidu.com/banseon</url>
    </organization>
    <!-- 构建我的项目须要的信息 -->
    <build>
        <!-- 该元素设置了我的项目源码目录,当构建我的项目的时候,构建零碎会编译目录里的源码。该门路是绝对于 pom.xml 的相对路径。-->
        <sourceDirectory />
        <!-- 该元素设置了我的项目脚本源码目录,该目录和源码目录不同:绝大多数状况下,该目录下的内容 会被拷贝到输入目录(因为脚本是被解释的,而不是被编译的)。-->
        <scriptSourceDirectory />
        <!-- 该元素设置了我的项目单元测试应用的源码目录,当测试项目的时候,构建零碎会编译目录里的源码。该门路是绝对于 pom.xml 的相对路径。-->
        <testSourceDirectory />
        <!-- 被编译过的应用程序 class 文件寄存的目录。-->
        <outputDirectory />
        <!-- 被编译过的测试 class 文件寄存的目录。-->
        <testOutputDirectory />
        <!-- 应用来自该项目标一系列构建扩大 -->
        <extensions>
            <!-- 形容应用到的构建扩大。-->
            <extension>
                <!-- 构建扩大的 groupId -->
                <groupId />
                <!-- 构建扩大的 artifactId -->
                <artifactId />
                <!-- 构建扩大的版本 -->
                <version />
            </extension>
        </extensions>
        <!-- 当我的项目没有规定指标(Maven2 叫做阶段)时的默认值 -->
        <defaultGoal />
        <!-- 这个元素形容了我的项目相干的所有资源门路列表,例如和我的项目相干的属性文件,这些资源被蕴含在最终的打包文件里。-->
        <resources>
            <!-- 这个元素形容了我的项目相干或测试相干的所有资源门路 -->
            <resource>
                <!-- 形容了资源的指标门路。该门路绝对 target/classes 目录(例如 ${project.build.outputDirectory})。举个例 
                    子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为 org/apache/maven /messages。然而,如果你只是想把资源放到源码目录构造里,就不须要该配置。-->
                <targetPath />
                <!-- 是否应用参数值代替参数名。参数值取自 properties 元素或者文件里配置的属性,文件在 filters 元素里列出。-->
                <filtering />
                <!-- 形容寄存资源的目录,该门路绝对 POM 门路 -->
                <directory />
                <!-- 蕴含的模式列表,例如 **/*.xml. -->
                <includes />
                <!-- 排除的模式列表,例如 **/*.xml -->
                <excludes />
            </resource>
        </resources>
        <!-- 这个元素形容了单元测试相干的所有资源门路,例如和单元测试相干的属性文件。-->
        <testResources>
            <!-- 这个元素形容了测试相干的所有资源门路,参见 build/resources/resource 元素的阐明 -->
            <testResource>
                <targetPath />
                <filtering />
                <directory />
                <includes />
                <excludes />
            </testResource>
        </testResources>
        <!-- 构建产生的所有文件寄存的目录 -->
        <directory />
        <!-- 产生的构件的文件名,默认值是 ${artifactId}-${version}。-->
        <finalName />
        <!-- 当 filtering 开关关上时,应用到的过滤器属性文件列表 -->
        <filters />
        <!-- 子项目能够援用的默认插件信息。该插件配置项直到被援用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会笼罩这里的配置 -->
        <pluginManagement>
            <!-- 应用的插件列表。-->
            <plugins>
                <!--plugin 元素蕴含形容插件所须要的信息。-->
                <plugin>
                    <!-- 插件在仓库里的 group ID -->
                    <groupId />
                    <!-- 插件在仓库里的 artifact ID -->
                    <artifactId />
                    <!-- 被应用的插件的版本(或版本范畴)-->
                    <version />
                    <!-- 是否从该插件下载 Maven 扩大(例如打包和类型处理器),因为性能起因,只有在真须要下载时,该元素才被设置成 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>
            <!-- 模块(有时称作子项目)被构建成我的项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 -->
            <modules />
            <!-- 发现依赖和扩大的近程仓库列表。-->
            <repositories>
                <!-- 参见 repositories/repository 元素 -->
                <repository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </repository>
            </repositories>
            <!-- 发现插件的近程仓库列表,这些插件用于构建和报表 -->
            <pluginRepositories>
                <!-- 蕴含须要连贯到近程插件仓库的信息. 参见 repositories/repository 元素 -->
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>
            <!-- 该元素形容了我的项目相干的所有依赖。这些依赖组成了我的项目构建过程中的一个个环节。它们主动从我的项目定义的仓库中下载。要获取更多信息,请看我的项目依赖机制。-->
            <dependencies>
                <!-- 参见 dependencies/dependency 元素 -->
                <dependency>
                    ......
                </dependency>
            </dependencies>
            <!-- 不赞成应用. 当初 Maven 疏忽该元素. -->
            <reports />
            <!-- 该元素包含应用报表插件产生报表的标准。当用户执行 "mvn site",这些报表就会运行。在页面导航栏能看到所有报表的链接。参见 reporting 元素 -->
            <reporting>
                ......
            </reporting>
            <!-- 参见 dependencyManagement 元素 -->
            <dependencyManagement>
                <dependencies>
                    <!-- 参见 dependencies/dependency 元素 -->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
            </dependencyManagement>
            <!-- 参见 distributionManagement 元素 -->
            <distributionManagement>
                ......
            </distributionManagement>
            <!-- 参见 properties 元素 -->
            <properties />
        </profile>
    </profiles>
    <!-- 模块(有时称作子项目)被构建成我的项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 -->
    <modules />
    <!-- 发现依赖和扩大的近程仓库列表。-->
    <repositories>
        <!-- 蕴含须要连贯到近程仓库的信息 -->
        <repository>
            <!-- 如何解决近程仓库里公布版本的下载 -->
            <releases>
                <!--true 或者 false 示意该仓库是否为下载某种类型构件(公布版,快照版)开启。-->
                <enabled />
                <!-- 该元素指定更新产生的频率。Maven 会比拟本地 POM 和近程 POM 的工夫戳。这里的选项是:always(始终),daily(默认,每日),interval:X(这里 X 是以分钟为单位的工夫距离),或者 never(从不)。-->
                <updatePolicy />
                <!-- 当 Maven 验证构件校验文件失败时该怎么做:ignore(疏忽),fail(失败),或者 warn(正告)。-->
                <checksumPolicy />
            </releases>
            <!-- 如何解决近程仓库里快照版本的下载。有了 releases 和 snapshots 这两组配置,POM 就能够在每个独自的仓库中,为每种类型的构件采取不同的 
                策略。例如,可能有人会决定只为开发目标开启对快照版本下载的反对。参见 repositories/repository/releases 元素 -->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <!-- 近程仓库惟一标识符。能够用来匹配在 settings.xml 文件里配置的近程仓库 -->
            <id>banseon-repository-proxy</id>
            <!-- 近程仓库名称 -->
            <name>banseon-repository-proxy</name>
            <!-- 近程仓库 URL,按 protocol://hostname/path 模式 -->
            <url>http://192.168.1.169:9999/repository/</url>
            <!-- 用于定位和排序构件的仓库布局类型 - 能够是 default(默认)或者 legacy(遗留)。Maven 2 为其仓库提供了一个默认的布局;然 
                而,Maven 1.x 有一种不同的布局。咱们能够应用该元素指定布局是 default(默认)还是 legacy(遗留)。-->
            <layout>default</layout>
        </repository>
    </repositories>
    <!-- 发现插件的近程仓库列表,这些插件用于构建和报表 -->
    <pluginRepositories>
        <!-- 蕴含须要连贯到近程插件仓库的信息. 参见 repositories/repository 元素 -->
        <pluginRepository>
            ......
        </pluginRepository>
    </pluginRepositories>
 
 
    <!-- 该元素形容了我的项目相干的所有依赖。这些依赖组成了我的项目构建过程中的一个个环节。它们主动从我的项目定义的仓库中下载。要获取更多信息,请看我的项目依赖机制。-->
    <dependencies>
        <dependency>
            <!-- 依赖的 group ID -->
            <groupId>org.apache.maven</groupId>
            <!-- 依赖的 artifact ID -->
            <artifactId>maven-artifact</artifactId>
            <!-- 依赖的版本号。在 Maven 2 里, 也能够配置成版本号的范畴。-->
            <version>3.8.1</version>
            <!-- 依赖类型,默认类型是 jar。它通常示意依赖的文件的扩展名,但也有例外。一个类型能够被映射成另外一个扩展名或分类器。类型常常和应用的打包形式对应,只管这也有例外。一些类型的例子:jar,war,ejb-client 和 test-jar。如果设置 extensions 为 true,就能够在 plugin 里定义新的类型。所以后面的类型的例子不残缺。-->
            <type>jar</type>
            <!-- 依赖的分类器。分类器能够辨别属于同一个 POM,但不同构建形式的构件。分类器名被附加到文件名的版本号前面。例如,如果你想要构建两个独自的构件成 
                JAR,一个应用 Java 1.4 编译器,另一个应用 Java 6 编译器,你就能够应用分类器来生成两个独自的 JAR 构件。-->
            <classifier></classifier>
            <!-- 依赖范畴。在我的项目公布过程中,帮忙决定哪些构件被包含进来。欲知详情请参考依赖机制。- compile:默认范畴,用于编译 - provided:相似于编译,但反对你期待 jdk 或者容器提供,相似于 classpath 
                - runtime: 在执行时须要应用 - test: 用于 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。如果没有该元素,用户应该参考主页。应用该元素的起因是:帮忙定位那些不在仓库里的构件(因为 license 限度)。-->
        <downloadUrl />
        <!-- 如果构件有了新的 group ID 和 artifact ID(构件移到了新的地位),这里列出构件的重定位信息。-->
        <relocation>
            <!-- 构件新的 group ID -->
            <groupId />
            <!-- 构件新的 artifact ID -->
            <artifactId />
            <!-- 构件新的版本号 -->
            <version />
            <!-- 显示给用户的,对于挪动的额定信息,例如起因。-->
            <message />
        </relocation>
        <!-- 给出该构件在近程仓库的状态。不得在本地我的项目中设置该元素,因为这是工具自动更新的。无效的值有:none(默认),converted(仓库管理员从 
            Maven 1 POM 转换过去),partner(间接从搭档 Maven 2 仓库同步过去),deployed(从 Maven 2 实例部 署),verified(被核实时正确的和最终的)。-->
        <status />
    </distributionManagement>
    <!-- 以值代替名称,Properties 能够在整个 POM 中应用,也能够作为触发条件(见 settings.xml 配置文件里 activation 元素的阐明)。格局是 <name>value</name>。-->
    <properties />
</project>
退出移动版