一、坐标
元素 | 说明 |
---|---|
groupId | 必须定义当前Maven项目隶属的实际项目 |
artifactId | 必须定义实际项目中的一个maven项目(模块) |
version | 必须定义Maven项目当前所处的版本 |
packaging | 可选,定义项目的打包方式,默认值为jar |
classifier | 不能直接定义,该元素用来帮助定义构建输出的一些附属构件。由附加的插件帮助生成 |
二、依赖
Maven需要根据坐标才能找到需要的依赖。
坐标元素 | 说明 |
---|---|
groupId、artifactId、version | 依赖的基本坐标 |
type | 依赖的类型,对应项目坐标定义的packaging。默认值为jar |
scope | 依赖的范围 |
Optional | 标记依赖是否可选 |
Exclusions | 用来排除传递性依赖 |
三、仓库
1.意义:统一存储构件(依赖、插件或者项目构建的输出)。当Maven项目需要用到其中的构件时,只需要声明这些依赖或插件的坐标,Maven会自动根据坐标找到仓库中的构件,并使用它们。
2.原理:Maven根据坐标定义构件在仓库中的唯一存储路径,由此构成Maven的仓库布局方式。
【例子】假设构件groupId=com.xxx.aaa、artifactId=ccc、version=1.1.0、classifier=jdk15、packaging=jar
(1)基于构件的groupId准备路径,maven将groupId中的句点分隔符转换成路径分隔符,即在本例子中,com.xxx.aaa
会被转换成com/xxx/aaa
,再在末尾加上路径分隔符斜杠,即com/xxx/aaa/
;
(2)基于构件的artifactId准备路径,在(1)的基础上转换并在末尾添加路径分隔符,则有:com/xxx/aaa/ccc
;
(3)使用版本信息,则com/xxx/aaa/ccc/1.1.0
;
(4)依次加上artifactId,构件分隔符连字号,以及version,则有com/xxx/aaa/ccc/1.1.0/ccc-1.1.0
;
(5)如果构件有classifier,就记上构件分隔符和classifier的内容,即
com/xxx/aaa/ccc/1.1.0/ccc-1.1.0-jdk15
;
(6)如果构件有extension(由packaging决定),即packaging决定了构件的扩展名,因此,在本次的例子中,最终路径为 com/xxx/aaa/ccc/1.1.0/ccc-1.1.0-jdk15.jar
3.仓库类型:
(1)本地仓库:
①默认仓库地址:C:\Users\用户名\.m2\repository\
②自定义仓库地址:可以通过setting.xml设置localRepository。
(2)远程仓库:中央仓库、私服、其他公共库
①远程与本地的联系:Maven会根据配置和需要,从远程仓库下载构件至本地仓库。其中,访问远程仓库内容,需要配置认证信息,即在setting.xml中配置id、username和password等。
②镜像:私服可以代理任何外部的公共仓库(包括中央仓库),所以对于组织内部的Maven用户而言,是一名一个私服地址就等于使用了所有需要的外部仓库,即实现了将配置集中到私服,从而简化Maven本身的配置。这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。在setting.xml下配置mirror。*即匹配所有远程仓库。
四、生命周期
clean、default、site三套生命周期本身相互独立,但一个生命周期内的阶段是有前后依赖关系的。
(1)clean:清理项目。
阶段 | 说明 |
---|---|
Pre-clean | 执行清理前需要完成的工作 |
clean | 清理上一次构建生成的文件 |
Post-clean | 执行清理后需要完成的工作 |
(2)default:构建项目。由于本生命周期的阶段较多,此处挑选重要的阶段进行列举。
阶段 | 说明 |
---|---|
Process-sources | 处理项目主资源文件。一般是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。 |
compile [插件]maven-complier-plugin:compile | 编译项目的主源码。一般是编译src/main/java目录下的Java文件至项目输出的主classpath目录中 |
Process-test-sources | 处理项目测试资源文件。一般是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。 |
Test-compile [插件]maven-complier-plugin:testCompile | 编译项目的测试代码。一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中。 |
test [插件]maven-surefile-plugin:test | 使用单元测试框架运行测试,测试代码不会被打包或者部署。 |
package [插件]maven-jar-plugin:jar | 接收编译好的代码,打包成可发布的格式,如jar。 |
Install [插件]maven-install-plugin:install | 将包安装到Maven本地仓库,供本地其他Maven项目使用。 |
Deploy [插件]maven-deploy-plugin:deploy | 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。 |
(3)site:建立项目站点。
阶段 | 说明 |
---|---|
Pre-site | 执行在生成项目站点前需要完成的工作 |
site | 生成项目站点文档 |
Post-site | 执行生成项目站点后需要完成的工作 |
Site-deploy | 将生成的项目站点发布到服务器上 |
五、关于POM
1.超级POM:Maven在超级POM中为所有核心插件设定了版本。超级POM是所有Maven项目的父POM,所有项目都继承这个POM的配置。目的是防止因插件版本的变化而造成构建不稳定。
2.超级POM的路径:对于Maven 3,超级POM在maven安装路径下的lib\maven-model-builder-x.x.x.jar
中的
org\apache\maven\model\pom-4.0.0.xm
l路径下。
3.项目中的pom.xml:此处的配置可以覆盖超级POM中的配置,比如插件的版本信息等。
ps:参考书籍:《Maven实战》