1.概念
Project Object Model,项目对象模型,通过xml格式描述程序之间的依赖和程序管理相关信息,一般在阅读项目时需要先大致看下root模块的pom文件,便于理解程序的结构
2.基础配置
<modelVersion>4.0.0</modelVersion>
描述maven版本信息,现在唯一支持maven2、maven3的版本
<parent></parent>
父节点,描述继承关系,如果公司涉及项目比较多的话,建议此节点抽象抽来描述,把一些共有的配置统一约定掉
<groupId></groupId>
组织名
<artifactId></artifactId>
模块名
<version></version>
版本
<packaging></packaging>
打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par
web模块打包为war,子模块一般描述为pom
<dependencyManagent></dependencyManagent>
依赖管理
<dependencies></dependencies>
详细依赖描述
<modules></modules>
模块,主要再根pom描述,因为一个项目会涉及很多模块,在实际编译的时候不可能每个模块都去mvn compile或者mvn package,直接对根模块执行mvn package ,即可完成所有模块的打包配置
<properities></properities>
通用配置和变量描述,一般将和子模块之间通用的一些配置变量抽象描述出来
2.其他配置
编译相关、项目信息、环境配置,这些配置都比较简单,看看就知道是什么意思,而且一般不会影响编译过程
3.依赖关系
a.继承
使用parent节点将父节点显示描述即可,如projectB继承自projectA,那么pom文件可显示描述:
<parent>
<groupId>com.xavier.study<groupId>
<artifactId>study<artifactId>
<version>1.0.1</version>
<relativePath>./projectA/pom.xml</relativePath>, 如果两个项目目录是同级的关系,那么此配置可省略,如果不是这种情况,需要显示的指定父节点的pom文件,不然编译会无法通过
</parent>
b.聚合
把若干个项目聚合到一起管理,使用modules管理,projectA聚合到projectB:
<modules>
<module>./projectA</module>, 如果目录不同级,需要显示的指定目录名(是目录名,非artifactid)
<modules>
4.依赖
在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素:
type:对应于依赖项目的packaging类型,默认是jar
scope:表示依赖项目的一个作用范围。
compile:这是它的默认值,这种类型表示所有的情况都是有用的,包括编译和运行时。且这种类型的依赖性是可以传递。
provided:和compile类似,表示期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。
runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。
test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。
system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。
systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的jar包的scope为system时才能使用,否则Maven将报错。
optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。
exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。
网友评论