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-pom
Maven 将会开始解决并显示 effective-pom。
[INFO] Scanning for projects...Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom...[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 01:36 min[INFO] Finished at: 2018-09-05T11:31:28+08:00[INFO] Final Memory: 15M/149M[INFO] ------------------------------------------------------------------------
Effective POM 的后果就像在控制台中显示的一样,通过继承、插值之后,使配置失效。
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.project-group</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory> <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory> <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory> <outputDirectory>C:\MVN\project\target\classes</outputDirectory> <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory> <resources> <resource> <mergeId>resource-0</mergeId> <directory>C:\MVN\project\src\main\resources</directory> </resource> </resources> <testResources> <testResource> <mergeId>resource-1</mergeId> <directory>C:\MVN\project\src\test\resources</directory> </testResource> </testResources> <directory>C:\MVN\project\target</directory> <finalName>project-1.0</finalName> <pluginManagement> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-2</version> </plugin> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.0</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.4</version> </plugin> <plugin> <artifactId>maven-ear-plugin</artifactId> <version>2.3.1</version> </plugin> <plugin> <artifactId>maven-ejb-plugin</artifactId> <version>2.1</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-javadoc-plugin</artifactId> <version>2.5</version> </plugin> <plugin> <artifactId>maven-plugin-plugin</artifactId> <version>2.4.3</version> </plugin> <plugin> <artifactId>maven-rar-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-release-plugin</artifactId> <version>2.0-beta-8</version> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.3</version> </plugin> <plugin> <artifactId>maven-site-plugin</artifactId> <version>2.0-beta-7</version> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.0.4</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.3</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.1-alpha-2</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-help-plugin</artifactId> <version>2.1.1</version> </plugin> </plugins> </build> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories> <reporting> <outputDirectory>C:\MVN\project\target/site</outputDirectory> </reporting></project>
在下面的 pom.xml 中,你能够看到 Maven 在执行指标时须要用到的默认工程源码目录构造、输入目录、须要的插件、仓库和报表目录。
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>