手机扫码查看
2020javaweb框架教程之maven特性
1.传递性
所谓传递性,是指,在项⽬中导⼊了依赖A,⽽A内部依赖了B,则A会⾃动触发B也被导⼊项⽬
好处:没必要导⼊所有依赖在项⽬中,传递性会⾃动导⼊⼀些依赖。简化依赖导⼊管理
坏处:jar冲突
jar冲突:A依赖B B依赖C和d-1.0 c依赖d-2.0。则此时导⼊A依赖,那么项⽬中会采⽤d-1.0 还是 d-2.0
maven默认的选择原则是:最短路径
d-1.0的路径 A->B->d-1.0
d-2.0的路径 A->B->C->d-2.0 则最终选择的是d-1.0
如果路径相等,则先声明的优先
解决方案:
默认的选择原则明显是不能符合实际的需求的,所以有其他设置可以改变默认原则
1.排除原则:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.6.RELEASE</version>
<exclusions>
<!– 排除⼀个依赖,则此依赖不会被spring-context-suport传递导⼊ –>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
2.明确定义:
直接定义 <dependency> ,则根据最短路径,设置明确版本
3.在⽗项⽬中定义,则⼦项⽬中在传递依赖时会以⽗项⽬中的声明为准
传递依赖范围
前置概念:
项⽬A中 依赖 B库 ,B库 依赖C库;
则A对B是 第⼀直接依赖 ,B对C是 第⼆直接依赖 ,A对C是 传递性依赖 。
如果第⼀直接依赖范围是:compile,第⼆直接依赖范围:compile,则传递性依赖范围就是:compile
则, 传递性依赖 的范围取决于 第⼀和第⼆直接依赖

2.继承
定义父项目
定义空⽩的maven项⽬(不⽤写任何代码,只⽤pom⽂件)


注意:⼦项⽬中如果明确定义了版本,则⽗项⽬中的声明会失效。所以⽗项⽬中声明的版本,⼦项⽬中不允许再定义。
子项目继承

3.聚合
⼀个项⽬( project ),可以分为多个模块( module ),使得项⽬更加层次清晰,利于管理。利于模块复⽤
模块的划分,常⽤的⽅式之⼀: 基于 MVC 划分模块 ,进⼀步树⽴项⽬层次,对于⼤型项⽬尤为实⽤
每个模块都是⼀个单独的maven项⽬,由⼀个⽗项⽬来做聚合。
模块之间可以互相依赖。
对⽗项⽬做编译,清理,打包等⾏为会传播给所有模块
创建父模块
直接创建maven项目,无需创建骨架
创建子模块
在父模块右键创建–>模块


可以创建多个子module
⽗项⽬的pom,已经发⽣了改变, <moludels> 标签即在做多模块聚合


⽗项⽬中定义版本管理
<!-- 共⽤的依赖定义-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
<!-- 依赖版本统一管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
</dependencyManagement>

统一管理:
如上可以避免在每个⼦模块中都声明版本号,这样想升级或者切换到另⼀个版本时,只需要在⽗模块⾥更新,不需要
任何⼀个⼦模块的修改
自定义:
如果某个⼦模块需要另外⼀个版本号时,只需要在dependencies中声明⼀个版本号即可。⼦模块就会使⽤⼦模块声明
的版本号,不继承于⽗模块版本号
在做依赖管理时,也有时会在⽗项⽬中不做依赖管理,⽽是明确导⼊所有依赖,⼦模块直接继承后就拥有哪些依赖。service模
块只需要单独导⼊dao,web模块只需要单独导⼊service
部署
在⽗模块所在⽬录下,直接执⾏: mvn package , 即可完成所有模块的打包,且web模块的war包中会包含dao,service,
pojo模块的jar。
直接部署web模块的war即可。
相关指令
# 测试,对⽗模块做 打包操作
mvn package
# 测试,对⽗模块做 清理并编译
mvn clean compile
# 测试,对⽗模块做 清理并打包
mvn clean package
# 注意:对⽗模块做的操作都会同步到每个模块上。



发表回复