海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020javaweb框架教程之maven特性

未分类
2020-11-28 11:08:03
1822677238@qq.com

手机扫码查看

2020javaweb框架教程之maven特性

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
# 注意:对⽗模块做的操作都会同步到每个模块上。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注