(II)POM那些事儿系列——基本项目声明




xml头指定了改xml文档的版本1.0和编码方式UTF-8。
project元素是所有pom.xml元素的根元素,声明了一些POM相关的命名空间及xsd元素,使用这些属性可以让第三方工具(如XML编辑器)帮助快速编辑POM。

4.0.0  
com.play.myMaven
hello-maven
1.0-SNAPSHOT
Hello World

modelVersion指定当前POM模型的版本,对于Maven2和Maven3来说,这里只能是4.0.0。

groupId、artifactId和version定义了一个项目基本的坐标。在Maven世界里,所有的jar,pom,war都是基于这些基本坐标进行区分的。
groupId 定义项目属于哪个分组,这个组往往和项目所在的公司/组织有关。
artifactId定义了当前Maven项目在组中的唯一的ID。
version指定了当前Maven项目的版本——1.0-SNAPSHOT SNAPSHOT为快照的意思,说明项目当前还处于开发阶段,是不稳定版本。
name为当前POM声明一个名称,方便查看。


坐标详解
Maven坐标元素包括groupId、artifactId、version、packaging、classifier。只要能提供正确的的坐标元素,Maven就可以找到对应的构建。Maven内置了一个中央仓库的地址,该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去下载。

我们看一组坐标定义:

org.sonatype.nexus
nexus-indexer
2.0.0
jar

这是nexus-indexer的坐标定义,nexus-indexer是一个对Maven仓库编篡索引并提供搜索功能的类库,是Nexus的一个子模块
groupId定义当前Maven项目隶属的实际项目。Maven项目和实际项目不一定是一对一关系。SpringFramework这个实际项目对应的Maven项目会有很多(spring-core,spring-context等),这是由于Maven重模块的概念,因此一个实际项目往往被划分为多个模块。groupId命名规则:[公司/组织].[公司名].[实际项目名]
artifactId该元素定义实际项目中的一个Maven项目(模块),推荐加上[实际项目名]- 这个前缀,这样可以方便寻找实际构件。
version定义Maven项目当前所处的版本。
packaging定义Maven项目打包方式。war,jar,packaging。不同打包方式会影响到构建的生命周期。不定义packaging元素时,Maven使用packaging默认值jar
classifier该元素用来帮助定义构建输出的一些附属构件。附属构件与主构件对应。注意的是不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
项目构件名称与坐标相对应。一般规则为:artifactId-version[-classifier].packaging

  • [-classifier]为可选。例如nexus-indexer的主构件为nexus-indexer-2.0.0.jar,附属构件有nexus-indexer-2.0.0-javadoc.jar
  • packaging并非一定与构件扩展名对应,eg:packaging为maven-plugin的构件扩展名为jar

此外,Maven仓库的布局也是基于Maven坐标。


注:《Maven实战》学习笔记

你可能感兴趣的:((II)POM那些事儿系列——基本项目声明)