Maven进阶知识点
Maven进阶
1.分模块开发
步骤:
①在该模块pom依赖里面引入另一个模块的坐标(在pom里面有)
②然后对该模块进行install打包,把他打包到本地仓库(因为idea能找不到坐标,但是本地仓库没有)
2.依赖管理
依赖传递
依赖具有传递性,可间接传递也可也直接传递,但是会出现冲突
依赖冲突问题
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
概述:可选依赖指对外隐藏当前所依赖的资源—不透明
在依赖里面加一个属性optional,设置为true表示隐藏
可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-
排除依赖
在主要模块pom里面的依赖添加属性
3.聚合与继承
所谓聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
聚合工程:通常是一个不具有业务功能的”空”工程(有且仅有一个pom文件)
作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。
聚合工程创建:①创建一个maven模块,然后设置打包类型为pom
②设置当前聚合工程所包含的子模块名称
<moudles>
<moudle>../maven_ssm</module>
</modules>
注意:顺序不用管,他自己会按照依赖进行顺序构建
继承
所谓继承:描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
作用:
简化配置
减少版本冲突
配置关系
在pom文件里面用<parent>标签输入组,id,版本,指明他的父类,并指出路径
子类不用定义依赖,可以直接用父类的,并且跟父类是同步的,方便统一管理
同时可以在下面定义依赖管理<dependencyManagement>,在这个标签里面定义可选依赖的坐标,子类如果想用需要直接在依赖导入可选依赖坐标即可,但是不能配置版本,如果配了就不属于父类管理了
聚合和继承的区别
两种之间的作用:
聚合用于快速构建项目,对项目进行管理
继承用于快速配置和管理子项目中所使用jar包的版本
聚合和继承的相同点:
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
聚合与继承均属于设计型模块,并无实际的模块内容
聚合和继承的不同点:
聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
4.属性
定义属性
在pom文件里面定义标签
资源引用属性
如果要把数据库的properties文件的属性也放到pom里面统一管理
步骤:①先把jdbc.url等属性定义到pom里面
②配置文件中引用属性,就是把值换成取值符合那种形式${}
③然后开启资源文件目录加载属性的过滤器
<build>
<resources>
<!--设置资源目录-->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<!--设置能够解析${},默认是false -->
<filtering>true</filtering>
</resource>
</resources>
</build>
注意:${project.basedir}: 当前项目所在目录,子项目继承了父项目,相当于所有的子项目都添加了资源目录的过滤
此时打包发现出现错误,需要web.xml文件才能打包
解决方法一:直接加一个web.xml
解决方法二:在bulld里面加一个插件属性重新编辑maven-war-plugin,并且给出配置属性<configuration>定义<failOnMissingWebXml>为false
maven还有他内置的系统属性,${project.basedir}就属于内置的
5.多环境开发
定义多坏境
6.跳过测试
方法一点击maven,里面有个蓝色的M图标,点击即可跳过所有测试
方法二还是插件的方法,编辑maven-surefire-plugin设置配置属性即可
方法三指令mvn package -D skipTests
7.私服
仓库分三大类
①宿主仓库hosted
作用:保存无法从中央仓库获取的资源
自主研发,第三方非开源项目,比如Oracle,因为是付费产品,所以中央仓库没有,关联上传操作
②代理仓库proxy
作用:代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库,关联下载操作
③仓库组group
作用:将若干个仓库组成一个群组,简化配置,仓库组不能保存资源,属于设计型仓库
资源上传与下载
在工程中配置私服的位置
①<distributionManagement>该标签配置私服
②然后配置<repository>表示正式版本,<snapshotRepository>表示快照版本
③然后配置对应的id和地址即可
④然后用deploy指令