什么时候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>