1.pom.xml是什么
pom是Project Object Model(项目对象模型)的缩写,是Maven中的项目文件,可用于管理与配置依赖,组织信息,项目授权,远程仓库等等.一个Maven项目,可以没有任何代码,但不能没有pom.xml.
2.基本配置
(1)
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
(2)
pom的版本,这是Maven 2&3唯一支持的pom版本,而且不能忽略.
(3)Maven坐标
A.
B.
C.
主版本号:代表架构变动或者不兼容的实现.
次版本号:兼容性修改,功能增强.
修订版本号:bug修复.
版本号的后缀意味着项目的不同阶段:
SNAPSHOT:开发中的版本
RELEASE:正式发布版
M1,M2:M指里程碑,表示即将发布
RC:Release Candidate,发布候选
GA:General Availablity,基本可用版本
(4)
打包类型,没有提供的话默认值为jar,常见的有jar与war,也可以取值:
maven-plugin
pom
ejb
ear
rar
(5)POM 关系
Maven的一个强大之处是处理项目关系的方式,可以通过一个公共的本地仓库去解决问题.
A.依赖
POM的基础就是依赖列表,Maven下载与在编译时链接依赖与其他所需要的目标,而且可以处理传递性依赖,使列表可以专注于项目所需的依赖.依赖放在
....
....
一个
a.
对应项目坐标
b.
版本
c.
可用于配置不同jdk的
d.
对应的依赖类型,默认为jar,通常对应与
e.
scope表示类库与项目的关系,可以取以下5个值:
compile:默认值,编译依赖使其在所有类路径中可用,而且这些依赖项会传递到其他依赖项目,在编译和打包时都需要此类库.
provided:类似compile,但是期望JDK或一个容器会在运行时提供,仅在编译和测试类路径上可用,不可传递.
runtime:在运行时与测试类路径中可用,在编译类路径中不可用.
test:测试编译与执行阶段可用,不可传递.
system:类似于provided,但必须显式提供jar包.
f.
当
g.
标记依赖的可选状态.
h.
排除不需要的依赖,包含子元素
B.继承
使用
子pom会继承父pom的
groupId
version
description
url
inceptionYear
organization
licenses
developers
contributors
mailingLists
scm
issueManagement
ciManagement
properties
dependencyManagement
dependencies
repositories
pluginRepositories
build
reporting
profiles
但不能继承:
artifactId
name
prerequisites
另外,就像java中所有类都继承于java.lang.Object一样,所有POM都有一个"Super POM",pom都从它继承而来,下面是Maven3.5.4的"Super pom":
C.聚合(或多模块)
模块是pom列出的项目,并作为一个组执行,每个模块通过pom文件或项目的相对路径进行列出.
不需要考虑模块间的依赖关系,Maven会对其进行拓扑排序以便在依赖模块之前构建依赖关系.
(6)属性
属性是Maven中的值占位符,像Ant一样,可以以
${x}
这样的形式在pom.xml的任何位置访问一个值,也可以被用作默认值使用.有5种形式使用值:
①env.x
env会使用当前shell的环境变量的值.例如
${env.PATH}
②project.x
${project.version}
③settings.x
使用settings.xml中的元素的值
${settings.offline}
④java.x
java系统属性值,通过java.lang.System.getProperties()获取,如
${java.home}
⑤x
直接使用x,用的是
${aaa}
3.构建配置
(1)BaseBuild元素
A.
目标的默认值,可以取值install,copile
B.
构建产生的文件存放目录
C.
构建最终产生的项目名字,但有可能会被更改.
D.
定义一组
(2)资源
A.
描述每个资源的根元素.
B.
构建资源的位置,对于jar包放在META-INF里面.
C.
取值true或false,表示是否开启过滤
D.
资源位置.
E.
指定要包含的资源,使用*作为通配符.
F.
与include相反,要排除的资源列表.
(3)插件
A.
与上面的
B.
与上面的
C.
取值true或false,表示是否加载扩展,默认为false.
D.
取值ture或false,是否应用pom的继承关系,默认true.
E.
插件项的相关配置,可以配置
F.
引入插件的依赖,与前面的
G.
插件可能有多个目标,
(4)插件管理
(5)目录
可以为pom设置各种目录,比如
A.项目源码目录
构建项目时会编译该目录的源码,是相对于pom.xml的相对路径.
B.测试源码目录
测试时会编译其中的源码,也是相对于pom.xml的相对路径.
C.class目录
这里存放被编译过的class文件.
D.测试class
存放测试文件编译后的class文件.
(6)扩展
(7)报表
A.
是否包含默认报表.
B.
报表存放位置.
C.
报表包含的插件以及配置.
D.
包含一组
4.项目信息
(1)许可证
A.
名称.
B.
官方license页面的url.
C.
项目分发的方式,可以选择
repo:从Maven仓库下载.
manual:手动安装.
D.
一些补充信息.
(2)组织
(3)开发者
A.
开发者id.
B.
姓名.
C.
邮箱.
D.
主页url.
E.
所属组织.
F.
所属组织的主页url.
G.
角色,包含一组
H.
时区,可以以America/New_York或Europe/Berlin这样的形式,或者设置一个整数,范围[-11,12].
I.
开发者属性,如如何处理即时消息等.
(4)贡献者
5.环境配置
(1)问题管理
(2)持续集成管理
A.
持续集成系统的名称.
B.
持续集成系统的url.
C.
包含一组
a.
如何发送通知,比如可以取值mail.
b.
取值true/false,错误时发送.
c.
取值true/false,失败时发送.
d.
取值true/false,成功时发送.
e.
取值true/false,发生警告时发送.
f.
相关配置,例如可以添加
,发送的地址.(3)邮件列表
A.
邮件名称.
B.
订阅邮件地址或链接.
C.
取消订阅邮件或链接.
D.
要发送的邮件地址.
E.
查看旧的邮件的url.
(4)软件配置管理(SCM)
A.
描述如何通过Maven连接到版本控制系统,其中connection需要读权限,developConnection需要写权限.
B.
代码标签,默认为HEAD.
C.
公开的可浏览的仓库,例如ViewVC或Fisheye.
(5)前提条件
代替.
(6)仓库
A.
如何处理远征仓库的发布版本,包含:
B.
如何处理远程仓库的快照版本,包含的元素与
C.
远程仓库的标识符.
D.
远程仓库的名称.
E.
远程仓库的url.
F.
仓库布局类型,可以是default或legacy,Maven2.x为仓库提供了默认布局.
(7)插件仓库
(8)分发管理
A.仓库
还有一个叫
B.站点部署
C.重定位
(9)配置文件
A.
是否默认激活,true或false.
B.
指定jdk版本.
C.
D.
若Maven检测到该属性就会激活该属性所在的配置文件,可以指定
E.
有