1.jar包冲突
例如项目中引入了这两个jar包
解决jar包冲突 , 需要借助idea , 可以看到spring-beans,spring-context 都依赖了 spring-core , 分别对应了自己的版本 ,
解决方法:
- 在pom文件中优先声明的才会有较高的优先级决定传递依赖的jar包版本
- 将冲突的jar包在pom文件中声明
<exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions>
在坐标中配置这个标签可以排除传递依赖中指定的jar包
2.pom文件标签
dependencyManagement 父子模块的依赖管理
properties 标签
将版本号已变量的形式提出 , 方便进行统一修改
3.父子模块
-
maven对资源的可重用性
将一个单体应用中不同的模块进行打包 , 符合maven的依赖管理 , 以后这些模块在其他项目中使用时 , 可以直接引入模块的坐标 . 方便维护 .
比如将一个单体ssm电商项目中的订单与用户模块看做子模块 , 并给与对应坐标 , 这些子模块可以在其他项目中通过pom文件引入 -
工程project与模块module的区别
继承与依赖 , 父工程与子模块间属于直接依赖 (继承) , 子模块开始就可以使用父工程的所有资源 , 但是子模块和子模块之间 , 需要在pom.xml声明依赖关系
4.细节
-
作用域 标签<scope> 中的属性值有
compile 编译时有效 防止代码报红
test 测试时有效 junit 常用配置
runtime 运行期有效
provided compile 与test 时有效 打包时忽略
如果父模块配置了junit 作用域为test , 子模块中是无法使用的 , 需要单独引入 -
父工程启动与子模块启动
一个模块的启动需要确保他的所有依赖都能在仓库中找到,例如通过web子模块启动项目前,需要执行一次父工程的install命令 , 让父工程所有的依赖jar包都打入本地仓库. -
子模块间在路径结构上相同的资源会编译后会放在同目录, 需要注意文件名称 .
如果在web项目中web.xml中需要配置对于service 层的spring监听器 , 需要使用到spring中的配置文件 , 编译时防止报错, 需要在web模块中 ,按照路径添加一份配置文件 , 配置文件中只需要引入缺失的spring配置文件即可. -
安装第三方jar包
与第三方公司对接时 , 有时需要用到对方的jar包用来做接口认证 , 或者代理 , 此时需要将第三方的jar包放到本地仓库和公司的私服上 , 让团队成员项目中都能使用到
安装到本地仓库 对照一个坐标(jar包提供方提供)的三要素 , 组织名 , 项目名 ,版本号 , 然后加上jar包的路径 , 通过maven的命令即可安装到本地仓库
安装到nuxes私服 需要额外在maven目录下的setting.xml中配置登录私服的认证信息.