Maven笔记
Maven
基础
Maven是一个项目管理工具
- 依赖管理:Maven工程中使用到的jar包都放置在本地仓库中,项目中使用的是jar包的坐标。
- 一件构建:Maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
Maven仓库
仓库的总类
- 本地仓库
- 远程仓库(私服)
- 中央仓库
仓库的关系
- 启动Maven工程时,Maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包。
- 默认情况下,本地仓库没有jar包,Maven工程会自动去中央仓库中下载jar包到本地仓库以供使用。
- 公司中,如果本地仓库没有对应jar包,会先从私服下载jar包,如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。
Maven常用命令
- clean
- compile
- test
- package
- install
- deploy
Maven三套生命周期
- 清理生命周期
- 默认生命周期
- 站点生命周期
jar包冲突
产生原因
Maven作为一个强大的项目管理工具,在实现依赖管理功能的时候会将相关的依赖包一同导入
例如手动导入spring-context包时
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
同时Maven会自动导入四大核心包以及aop以及日志依赖包
此时再手动导入有传递依赖传递依赖四大核心包或者aop或者日志依赖包的jar包时,就有可能出现jar包冲突的问题
两种依赖
- 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
- 传递依赖:项目中没有直接导入的jar包,可以用过项目直接依赖jar包传递到项目中去。
解决方法
-
第一声明优先原则
哪个jar包的坐标位置靠上,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。
-
路径近者优先原则
直接依赖路径比传递依赖路径近,那么最终进入的jar包是路径近的直接依赖包。
-
手动直接排除法
当要排除某个jar包下的依赖包时,在配置exclusions标签的时候,内部可以不写版本号。以为此时依赖包使用的版本和默认和本jar包一样。
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4RELEASE</version> </dependency> <!--使用exclusions标签进行手动排除--> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependencies>
锁定jar包版本
凡是依赖别的项目(A),拿到别的项目的依赖包,都是属于传递依赖。而在开发依赖其他项目(A)的项目(B)的同时,B中如果导入一套相关jar包,则是直接依赖,同时有可能造成jar包版本冲突。为了防止这种情况,项目A可以对所导入的jar包的坐标进行锁定,那么其他依赖A的B中,即便是有同名jar包的直接依赖,也无法覆盖,从而达到保护作用。

浙公网安备 33010602011771号