JAVA-2-[Maven]项目对象模型pom.xml文件

本文详细介绍了Maven项目中的pom.xml文件,包括其作为项目对象模型的作用,基本元素如modelVersion、groupId、artifactId和version,以及各种详细字段的解析,如parent、dependencies和distributionManagement等。
摘要由CSDN通过智能技术生成

参考maven pom.xml 详解

参考pom.xml详解

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,XML格式,名称为pom.xml,作用类似ant的build.xml文件,功能则更强大。

该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

事实上在Maven的世界中,一个项目可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。

1 pom.xml文件包含的元素

注意:其中的modelVersion是4.0.0,这是当前仅有的可以被Maven2&3同时支持的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.0
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 基本设置 The Basics -->
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>
    <dependencies>...</dependencies>
    <parent>...</parent>
    <dependencyManagement>...</dependencyManagement>
    <modules>...</modules>
    <properties>...</properties>
    
    <!-- 构建过程的设置 Build Settings -->
    <build>...</build>
    <reporting>...</reporting>
    
    <!-- 项目信息设置 More Project Information -->
    <name>...</name>
    <description>...</description>
    <url>...</url>
    <inceptionYear>...</inceptionYear>
    <licenses>...</licenses>
    <organization>...</organization>
    <developers>...</developers>
    <contributors>...</contributors>
    
    <!-- 环境设置 Environment Settings -->
    <issueManagement>...</issueManagement>
    <ciManagement>...</ciManagement>
    <mailingLists>...</mailingLists>
    <scm>...</scm>
    <prerequisites>...</prerequisites>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <distributionManagement>...</distributionManagement>
    <profiles>...</profiles>
</project>

1.1 简单示例

一个最简单的pom.xml的定义必须包含modelVersion、groupId、artifactId和version这四个元素,当然这其中的元素也是可以从它的父项目中继承的。

在maven中,使用groupId、artifactId和version组成groupId:artifactId:version的形式来唯一确定一个项目:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>otowa.user.dao</groupId>
    <artifactId>user-dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>maven</name>
</project>

说明如下:

(1)<groupId>otowa.user.dao</groupId>
含义:组织标识,定义了项目属于哪个组,风向标,坐标。
用途:此名称则是本地仓库中的路径,列如:otowa.user.dao,
在M2_REPO目录下,将是: otowa/user/dao目录。
命名规范:项目名称,模块,子模块。

(2)<artifactId>user-dao</artifactId>
含义:项目名称也可以说是模块名称,定义当面Maven项目在组中唯一的ID。
用途:例如:user-dao,
在M2_REPO目录下,将是:otowa/user/dao/user-dao目录。
命名规范:唯一即可。

(3)<version>0.0.1-SNAPSHOT</version>
含义:项目当前的版本号
用途:例如:0.0.1-SNAPSHOT,
在M2_REPO目录下,将是:otowa/user/dao/user-dao/0.0.1-SNAPSHOT目录

(4)<packaging>war</packaging>
打包的格式,可以为:pom,jar,maven-plugin,ejb,war,ear,rar,par。

(5)<name>maven</name>
声明了一个对用户更为友好的项目名称。
    

1.2 详细示例

<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/maven-v4_0_0.xsd "> 
(1)第一项parent
<!-- 父项目的坐标。
如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 
坐标包括group ID,artifact ID和 version。 
--> 
<parent> 
	<!-- 被继承的父项目的构件标识符 --> 
	<artifactId /> 
	<!-- 被继承的父项目的全球唯一标识符 --> 
	<groupId /> 
	<!-- 被继承的父项目的版本 --> 
	<version /> 
	<!-- 父项目的pom.xml文件的相对路径。
	相对路径允许你选择一个不同的路径。
	默认值是../pom.xml。
	Maven首先在构建当前项目的地方寻找父项目的pom,
	其次在文件系统的这个位置(relativePath位置),
	然后在本地仓库,最后在远程仓库寻找父项目的pom。 
	--> 
	<relativePath /> 
</parent> 

(2)第二项modelVersion
<!-- 声明项目描述符遵循哪一个POM模型版本。
模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,
这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。 
--> 
<modelVersion> 4.0.0 </modelVersion> 
 
(3)第三项groupId
<!-- 项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。
并且构建时生成的路径也是由此生成, 
如com.mycompany.app生成的相对路径为:/com/mycompany/app。
--> 
<groupId> asia.banseon </groupId> 

(4)第四项artifactId
<!-- 构件的标识符,它和group ID一起唯一标识一个构件。
换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;
在某个特定的group ID下,artifact ID也必须是唯一的。
构件是项目产生的或使用的一个东西,
Maven为项目产生的构件包括:JARs,源码,二进制发布和WARs等。
--> 
<artifactId> banseon-maven2 </artifactId> 

(5)第五项packaging
<!-- 项目产生的构件类型,例如jar、war、ear、pom。
插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型。
--> 
<packaging> jar </packaging> 

(6)第六项version
<!-- 项目当前版本,格式为:主版本.次版本.增量版本-限定版本号。
 --> 
<version> 1.0-SNAPSHOT </version> 

(7)第七项name
<!-- 项目的名称, Maven产生的文档用 --> 
<name> banseon-maven </name> 

(8)第八项url
<!-- 项目主页的URL, Maven产生的文档用 --> 
<url> http://www.baidu.com/banseon </url> 

(9)第九项description
<!-- 项目的详细描述, Maven 产生的文档用。
当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,
就可以包含HTML标签),不鼓励使用纯文本描述。
如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,
而不是调整这里的文档。 
--> 
<description> A maven project to study maven. </description> 

(10)第十项prerequisites
<!-- 描述了这个项目构建环境中的前提条件。 --> 
<prerequisites> 
	<!-- 构建该项目或使用该插件所需要的Maven的最低版本 --> 
	<maven /> 
</prerequisites> 

(11)第十一项issueManagement
<!-- 项目的问题管理系统(Bugzilla, Jira, Scarab,
或任何你喜欢的问题管理系统)的名称和URL,本例为 jira --> 
<issueManagement> 
	<!-- 问题管理系统(例如jira)的名字, --> 
	<system> jira </system> 
	<!-- 该项目使用的问题管理系统的URL --> 
	<url> http://jira.baidu.com/banseon </url> 
</issueManagement> 

(12)第十二项ciManagement
<!-- 项目持续集成信息 --> 
<ciManagement> 
	<!-- 持续集成系统的名字,例如continuum --> 
	<system /> 
	<!-- 该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。 --> 
	<url /> 
	<!-- 构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告) --> 
	<notifiers> 
		<!-- 配置一种方式,当构建中断时,以该方式通知用户/开发者 --> 
		<notifier> 
			<!-- 传送通知的途径 --> 
			<type /> 
			<!-- 发生错误时是否通知 --> 
			<sendOnError /> 
			<!-- 构建失败时是否通知 --> 
			<sendOnFailure /> 
			<!-- 构建成功时是否通知 --> 
			<sendOnSuccess /> 
			<!-- 发生警告时是否通知 --> 
			<sendOnWarning /> 
			<!-- 不赞成使用。通知发送到哪里 --> 
			<address /> 
			<!-- 扩展配置项 --> 
			<configuration /> 
		</notifier> 
	</notifiers> 
</ciManagement> 

(13)第十三项inceptionYear
<!-- 项目创建年份,4位数字。当产生版权信息时需要使用这个值。 --> 
<inceptionYear /> 

(14)第十四项mailingLists
<!-- 项目相关邮件列表信息 --> 
<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> 
 
(15)第十五项developers
<!-- 项目开发者列表 --> 
<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> 

(16)第十六项contributors
<!-- 项目的其他贡献者列表 --> 
<contributors> 
<!-- 项目的其他贡献者。参见developers/developer元素 --> 
	<contributor> 
		<name />
		<email />
		<url />
		<organization />
		<organizationUrl />
		<roles />
		<timezone />
		<properties /> 
	</contributor> 
</contributors> 

(17)第十七项licenses
<!-- 该元素描述了项目所有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> 
 
(18)第十八项scm
<!-- 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> 

(19)第十九项organization
<!-- 描述项目所属组织的各种属性。Maven产生的文档用 --> 
<organization> 
	<!-- 组织的全名 --> 
	<name> demo </name> 
	<!-- 组织主页的URL --> 
	<url> http://www.baidu.com/banseon 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值