maven 进阶
maven是一个项目管理工具。主要有两大功能:
- 依赖管理
maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
- 一键构建
maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作
仓库的种类
-
本地仓库
-
远程仓库【私服】
-
中央仓库
仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包。
默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库。
在公司中,如果本地没有对应jar包,会先从私服下载jar包,
如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。
maven常用命令:clean,compile,test,package,install,deploy。
maven三套生命周期:清理生命周期,默认生命周期,站点生命周期。
直接依赖与传递依赖
maven 工程要导入 jar 包的坐标,必须要考虑解决 jar 包冲突
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
不同的导入顺序,结果并不同
直接依赖:项目中直接导入的 jar 包,就是该项目的直接依赖包
如上面的 pom 表示,项目直接依赖于 spring-beans
与 spring-context
传递依赖:项目中没有直接导入的 jar 包,可以通过项目直接依赖的 jar 包传递到项目中
如:spring-core
是由 spring-beans
或 spring-context
传递进来的
解决 jar 包冲突的方式
- 第一声明优先原则
哪个 jar 包的坐标在靠上的位置,这个 jar 包就是先声明的,先声明的 jar 包坐标下的依赖包,可以优先进入项目中
- 路径近者优先原则
直接依赖路径比传递依赖路径近,如果直接依赖与传递依赖两者并存,选择直接依赖
- 直接排除法(推荐)
当我们要排除某个 jar 包下依赖包,在配置 exclusioins 标签时,内部可以不写版本号
idea 插件
生产环境可以用 mvn dependency:tree -Dverbose
定位 jar 包冲突
锁定版本
锁定版本法可以打破2个依赖传递的原则,优先级为最高
<!-- 统一管理jar包版本 -->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<!-- 锁定jar包版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
拆分与聚合
工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目
工程天生只能使用自己内部资源,工程是独立的。也可以和其他工程或模块建立关联关系
模块不是独立的,属于父工程,模块一旦创建,所有父工程的资源都可以使用
子模块之间默认是没有任何关系的
父子工程不用建立关系,继承关系是默认的,不需要手动建立
平级直接的引用叫依赖,依赖是需要手动建立的
参考
- 上一篇: idea 好用的插件
-
下一篇:
没有了
