10 Maven高级使用
Maven是一个项目管理工具,主要作用是在项目开发阶段对Java项目进行依赖管理和项目构建。
主要完成:清理,编辑,测试,报告,打包,部署等功能。
1、Maven依赖传递
当引用一个包的时候,会连带引入相关联的包,例如:
2、Maven依赖冲突
当引入不同版本的包是,如果这两个包都依赖某个子包,就会导致这个子包会出现两个不同的版本被引入。
解决冲突的方法
2.1、默认规则
使用第一声明者优先原则,谁放在前边,就用谁引入的子包。
使用路径近者优先原则,导入依赖层次越深,优先级越低,直接导入优先级高于依赖导入。
2.2、排除依赖
将包的依赖导入给排除掉。
2.3、版本锁定
通过dependencies再导入版本的时候,就不需要再指定版本了。
3、分模块构建工程
在企业项目开发过程中,由于项目规模庞大,业务复杂,参与的人员比较多,一般会通过合理的模块拆分将一个大型的项目拆分为N多个小模块,分别进行开发。而且拆分出的模块可以非常容易的被其他模块复用。
常见的拆分方案有两种:
第一种:按照业务模块进行拆分,拆分成用户模块,订单模块,购物车模块,每个模块对应就是一个maven工程。
第二种:按照层进行拆分,持久层,业务层,表现层,每个层对应就是一个maven工程。
不管那种拆分方法,
不管用那种拆分方式,通常都会提供一个父工程,将一些共用的代码和配置提取到父工程中进行统一管理和配置。
公共代码放在parent中。不同工程根据层次关系相互依赖。
3.1、工程继承
子工程继承父工程,从父工程中继承已经引入的Jar包。
父工程打包方式必须是pom,子工程通过parent标签进行父工程的继承,parent内部的artifactId就是父工程的标识。
3.2、工程聚合
在maven工程的pom.xml文件中,可以通过<modules>标签将其他Maven工程聚合到一起,聚合的目的是为了进行统一操作。
例如拆分后的maven工程有多个,要进行打包,就需要针对每个工程分别执行打包指令,这个时候可以通过<modules>标签将这些工程统一聚合到一个maven工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程都会被打包。
在父工程中,将其它工程集合在一起,未继承父工程的工程也可以聚合进来。
打开这个窗口之后,工作目录设置成聚合的工程,就可以统一执行相关命令。
在父工程中锁定包的版本,具体引用可以放在子包里边。
4、操作例子
别人的开源源码:https://github.com/owenma/parent