JavaEE从入门到起飞(七) ~ Maven进阶

什么时候pom不要写版本号?

版本锁定是指在项目中固定特定依赖的版本,以避免因依赖升级而导致的问题。

被springboot-dependencies中的<dependencyManagement>所管理的不需要声明版本,一般国内产品需要写版本spring提供了该功能的其他实现,比如Spring Boot 默认使用 Logback 作为日志框架。如果你希望使用其他的日志框架,比如 Log4j2,那么你需要在 pom.xml 中进行相应的配置。

Maven

基础知识

导入maven项目:直接导入pom文件即可,不要导入文件夹。

maven是一个项目管理工具,主要作用如下:

  • 统一结构 :maven规定了一套标准的目录结构,不会因为开发工具而改变,例如IDEA和Eclipse目录结构都相同。
  • 依赖管理:就是对jar包的管理,通过导入maven坐标,就相当于将仓库中的jar包导入了当前项目中,不是手动导致。
  • 项目构建:通过maven的一个命令就可以完成项目从清理、编译、测试、报告、打包,部署整个过程。

模块拆分

目前我们开发是将所有的功能都写在一个项目中,随着项目规模越来越大,各个业务之间的代码就会变得错综复杂

因此需要对项目进行模块拆分,这样各个模块完成自己业务内的功能,这些模块组装起来达成整个项目的功能

分模块的好处:

  • 模块之间边界清晰,每个模块可以单独开发,协作人员随之减少,出现代码冲突情况也会大大降低
  • 开发更加灵活,模块体积更小,任务安排和问题排查更加方便

怎么拆分模块:

大部分情况都是按照功能拆分,各模块具备的功能相对独立:

  • sky-common(项目中通用代码)
  • sky-service (核心业务模块)
  • sky-web(表示层代码)

创建父子工程

创建父工程

父工程不需要写任何代码,只负责子模块的构建工作,因此可以把src目录删除掉

创建common模块

zzyl-common作为通用工具模块,可以放一些工具类、配置类、常量...

创建service模块

zzyl-service模块主要存放持久层和业务层代码

创建web模块

zzyl-web模块用于编写表示层代码,也就是controller层

分模块细节

模块聚合

在父工程上执行的各种maven命令子模块都会执行,并且会自动按照依赖层级执行,例如A依赖B,B依赖C,你使用install命令会优先安装C到本地仓库,其次是B,然后是A。

在 Maven 多模块项目中,最终的打包过程涉及到将各个模块的内容和依赖项整合到一个完整的、可部署的应用程序单元。例如:A依赖B,B依赖C,最终打包为jar时,打包出的内容为A.jar,其中B和C以jar包的形式存在于A的lib目录中。

模块继承

写在父工程中的依赖会被各个子模块继承,从而在各个子模块中可以直接使用依赖中的类

模块聚合

在父工程上执行的各种maven命令,会自动在各个子模块执行,例如在父工程上执行package,子模块都会执行打包操作

依赖传递

在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C

假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A

依赖冲突

在依赖的传递过程中,很容易出现同一jar包的版本冲突问题,这个就称为依赖冲突

为了防止出现依赖冲突,可以采用锁定版本的方法确定依赖构件的版本,版本锁定后,系统会以锁定的版本的为准添加到工程中

xml 复制代码
<properties>
    <!--提取版本号-->
    <spring.version>5.3.22</spring.version>
</properties>

<!--依赖管理: 仅仅声明依赖版本,不会引入-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--依赖引入: 不在设置版本号-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
</dependencies>
相关推荐
Ch.yang几秒前
【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
java·spring·代理模式
web150850966412 分钟前
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
java
昙鱼10 分钟前
springboot创建web项目
java·前端·spring boot·后端·spring·maven
eternal__day10 分钟前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
天之涯上上14 分钟前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot
2402_8575834916 分钟前
“协同过滤技术实战”:网上书城系统的设计与实现
java·开发语言·vue.js·科技·mfc
白宇横流学长16 分钟前
基于SpringBoot的停车场管理系统设计与实现【源码+文档+部署讲解】
java·spring boot·后端
APP 肖提莫20 分钟前
MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
java·前端·算法
kirito学长-Java21 分钟前
springboot/ssm太原学院商铺管理系统Java代码编写web在线购物商城
java·spring boot·后端
爱学习的白杨树22 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring