maven学习
22年8月12日
pom.xml文件结构说明
该文件下的
- Project是所有pom.xml的根元素,并且在里面定义了命名空间和xsd元素
- ModelVersion 当前pom模型的版本
- GroupId 定义当前所处的版本号
- Packaging 定义maven项目的打包方式
- Dependencise 元素地下就是加入依赖包的地方,可以从:http://mvnrepository.com 处下载。
- 每个dependency 都是一个依赖包,依赖包也就是在dependency 里面定义各个依赖包的坐标,这样maven就会从网上下载依赖包到本地仓库(我的放在maven所在的res目录下),有所不同的是dependency元素包含了一个子元素,这个就是对maven生命周期的一个说明,还包含几个其他的元素:
- type 说明依赖的类型
- optional 标记依赖是否可选
- exclusions 用来排斥传递依赖
依赖
传递依赖有以下几个原则:
- 最短路径原则 如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包。
- 第一声明优先原则 如果A对于依赖路径中有两个相同的jar包,路径也相同,那么依赖写在前面的优先。
- 可选依赖不会传递 如果A->B,B->C,B->D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D。
依赖范围
- test 范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
- compile 范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
- provided 依赖:在编译和测试的过程有效,最后生成var包时不会加入
- runtime 在运行的时候依赖,在编译的时候不依赖
聚合和继承
聚合
若项目中有core、dao、service、web模块,如何各个模块一次编译、打包、发布?可以构建另一个模块user_parent,pom.xml设置如下:
<modelVersion>4.0.0</modelVersion>
<groupId>org.pango.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>
../user-core
</module>
<module>
../user-dao
</module>
<module>
../user-service
</module>
<module>
../user-web
</module>
</modules>
注意:packaging的类型为pom,module的值是一个以当前POM为主目录的相对路径。
继承
在一个父级别的Maven的pom文件中定义了相关的常量、依赖、插件等配置后,实际项目模块可以继承此父项目的pom文件
将需要继承的包直接卸载dependencies中;
通过parent这个元素来继承父项目中的包,在这个元素中定义parent项目的坐标已经父项目中pom的相对位置
对于需要选择的继承可以将依赖放入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yoOqp1X-1660611356729)(study-images/maven-01.jpg)]