天天看点

Maven实战. 3.1编写POM

<b>3.1编写pom</b>

就像make的makefile、ant的build.xml一样,maven项目的核心是pom.xml。pom(project object model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。现在先为hello world项目编写一个最简单的pom.xml。

首先创建一个名为helloworld的文件夹,打开该文件夹,新建一个名为pom.xml的文件,输入其内容,如代码清单3-1所示。代码清单3-1hello world的pom

&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;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"&gt;

&lt;modelversion&gt;4.0.0&lt;/modelversion&gt;

&lt;groupid&gt;com.juvenxu.mvnbook&lt;/groupid&gt;

&lt;artifactid&gt;helloworld&lt;/artifactid&gt;

&lt;version&gt;1.0snapshot&lt;/version&gt;

&lt;name&gt;maven hello world

project&lt;/name&gt;

&lt;/project&gt;

代码的第一行是xml头,指定了该xml文档的版本和编码方式。紧接着是project元素,project是所有pom.xml的根元素,它还声明了一些pom相关的命名空间及xsd元素,虽然这些属性不是必须的,但使用这些属性能够让第三方工具(如ide中的xml编辑器)帮助我们快速编辑pom。

根元素下的第一个子元素modelversion指定了当前pom模型的版本,对于maven 2及maven 3来说,它只能是4.0.0。

这段代码中最重要的是包含groupid、artifactid和version的三行。这三个元素定义了一个项目基本的坐标,在maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。

groupid定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。譬如在googlecode上建立了一个名为myapp的项目,那么groupid就应该是com.googlecode.myapp,如果你的公司是mycom,有一个项目为myapp,那么groupid就应该是com.mycom.myapp。本书中所有的代码都基于groupid

com.juvenxu.mvnbook。

artifactid定义了当前maven项目在组中唯一的id,我们为这个hello world项目定义artifactid为helloworld,本书其他章节代码会分配其他的artifactid。而在前面的groupid为com.googlecode.myapp的例子中,你可能会为不同的子项目(模块)分配artifactid,如myapputil、myappdomain、myappweb等。

顾名思义,version指定了hello world项目当前的版本——1.0snapshot。snapshot意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如升级为1.0、1.1snapshot、1.1、2.0等。6.5节会详细介绍snapshot,第13章会介绍如何使用maven管理项目版本的升级发布。

最后一个name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个pom声明name,以方便信息交流。

没有任何实际的java代码,我们就能够定义一个maven项目的pom,这体现了maven的一大优点,它能让项目对象模型最大程度地与实际代码相独立,我们可以称之为解耦,或者正交性。这在很大程度上避免了java代码和pom代码的相互影响。比如当项目需要升级版本时,只需要修改pom,而不需要更改java代码;而在pom稳定之后,日常的java代码开发工作基本不涉及pom的修改。