目录
1.Maven 概述
maven是一个项目管理工具
(1)依赖管理
传统工程 | maven工程 |
---|---|
直接把jar包放在在项目中 | 真正的jar包放置在仓库中,项目中只用放置jar包的座标 |
(2) 依赖范围
Compile Test Runtime Provided
(3)仓库的种类
种类 | 作用 |
---|---|
本地仓库 | – |
远程仓库(私服) | 放置公司内部开发所需要的jar包 |
中央仓库 | 安装完maven之后,本地maven自动连接中央仓库。 |
(4)仓库之间的关系
类别 | 关系 |
---|---|
本地仓库与pom文件 | 当我们启动一个maven工程的时候,maven工程会通过pom文件中的jar包的座标去本地仓库找对应的jar包(如果是编译阶段,可以直接找本地项目的源码) |
本地仓库和中央仓库仓库 | 默认情况下(或公司断网时候),如果本地仓库没有jar包,maven工程会自动(断网时通过局域网连接远程仓库)去中央仓库下载jar包到本地。 |
本地仓库和远程仓库 | 在公司中,如果本地没有对应的jar包,会先从私服下载jar包,如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。 |
2.Maven 的好处
节省磁盘空间,可以一键构建,可以跨平台,应用在大型项目时可以提高开发效率
一键构建:maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作。
maven三套生命周期:清理生命周期、默认生命周期、站点生命周期。
3. Maven生命周期
命令 | 含义 |
---|---|
clean | 构建项目的时候,清理之前构建项目的信息 |
validate | 验证项目是否正确,所有必要的信息可用 |
compile | 对src/main下的目录进行编译 |
test | 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署 |
package | 本地项目直接打包,打包在本地编译目录—target目录下 |
verify | 对集成测试的结果执行任何检查,以确保满足质量标准 |
install | 把包安装到本地仓库 |
deploy | 本地做好的项目直接打包上传到私服,与其他开发人员和项目共享 |
4. 座标的书写规范
groupId 公司或组织域名的倒序
artifactId 项目名或模块名
version 版本号
示例:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--座标作用域,非必填-->
<scope>test</scope>
</dependency>
5. 解决冲突
maven工程要导入jar包的座标,就必须要考虑解决jar包冲突。
maven导入jar包中的一些概念
直接依赖:项目中直接导入的jar包,就是在该项目中的直接依赖包。
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。
解决冲突方式一:第一声明优先原则
概念:哪个jar包的座标在靠上的位置,这个jar包就是先声明的。
先声明的jar包座标下的依赖包,可以优先进入项目中。
解决冲突方式二:路径近者优先原则。
直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。
解决冲突方式三:直接排除法(推荐使用)
当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号。
因为此时依赖包使用的版本会默认和本jar包一样。
6.maven工程父子依赖
maven工程是可以分父子依赖关系:一个项目依赖另一个项目。
凡是依赖别的项目或拿到别的项目的依赖包,都属于传递依赖。
比如:当前A项目,被B项目依赖,那么我们A项目中所有jar包都会传递到B项目中,B项目开发者,如果在B项目中导入一套ssm框架的jar包,对于B项目是直接依赖,那么直接依赖的jar包就会把我们A项目传递过去的jar包覆盖掉。
为了防止以上情况出现。我们可以把A项目中主要jar包的座标锁住,那么其他依赖该项目的项目中,及时有同名jar包直接依赖,也无法覆盖。
<!-- 统一管理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>