Maven基本原理学习笔记

一、坐标

元素说明
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.xml路径下。
3.项目中的pom.xml:此处的配置可以覆盖超级POM中的配置,比如插件的版本信息等。

ps:参考书籍:《Maven实战》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值