一.Maven简介
Maven的产生主要是为了解决Java项目中的两个问题:
1.依赖管理:
传统 Java 项目在引入第三方库时,需要手动下载 JAR 包并维护复杂的依赖关系。Maven 提供了统一的依赖管理机制,通过简单的配置即可自动从仓库下载并引入所需的依赖,同时还能解决版本冲突问题。
2.项目构建:
Java 项目的构建过程通常包括编译源代码(.java)为字节码(.class)、打包成 JAR 文件等多个步骤。Maven 提供了标准的构建生命周期和插件系统,使得整个构建过程自动化、规范化,极大地提高了开发效率。
Maven仓库的概念:
Maven的仓库分为本地仓库、私服仓库、中央仓库
本地仓库就是PC上保留的jar文件
私服仓库一般是公司内部的,可以上传自主开发的jar文件到私服仓库,便于日后开发
中央仓库是Maven官方维护的。
二.Maven的核心配置
在maven的conf文件夹下面,有一个settings.xml文件
{user.home}
表示当前用户的家目录,我的用户是admin,所以进入admin就可以查看到
我们在下面再添加一行,就可以切换保存的目录了
另外一个需要配置的地方就是镜像,由于中央仓库是在国外的,所以有时候访问会慢很多,我们可以配置国内镜像
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>aliyunmaven</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
接下来是配置Maven的jdk版本
<profile><id>jdk-17</id><activation><activeByDefault>true</activeByDefault><jdk>17</jdk></activation><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><maven.compiler.compilerVersion>17</maven.compiler.compilerVersion></properties>
</profile>
指定使用 Maven 构建出来的项目默认使用的 JDK 版本为 17。
三.在IDEA中配置Maven
选择新建一个Maven项目
archetype里选择快速开始构建
创建完后,下面这个就是maven项目的一个基本结构
然后我们还需要去配置一下Maven,因为IDEA里面的Maven一般是它自带的,我们需要把我们自己的Maven给导入进来
这里选择刚才修改的Maven配置文件
然后点OK即可
四.Maven的生命周期和插件
validate是用来验证pom.xml写的是否正确,执行一下,显示成功了
但是如果我注释掉一行呢
就会出现报错,说我们缺少了groupid
compile进行编译,生成字节码文件
test会把项目中的test用例都给执行一遍
package把项目打包成jar或者war文件(还会先执行compile和test)
verify检查生成的jar包是否正确,是否符合标准
install把生成的jar包导入到本地仓库,导入maven
deploy把生成的jar包导入私服仓库
五.Maven的坐标
1. <groupID> 一般是公司或组织的唯一标识
2. <artifactID> 一般是项目的唯一标识
3.<version> 版本号
六.依赖管理
6.1 依赖范围
除了上面说到的3个依赖标签,还有一个<scope>标签
它用来知道依赖的范围
一般来说有compile,是编译和运行时需要的,默认是这个,可以省略不写
provided 编译时需要,运行时不需要
runtime 运行时需要,编译时不需要
test 只是在测试的时候需要,不会被打包到jar文件中
system从本地仓库查找,需要加上systemPath带上路径
<scope>system</scope><systemPath>${basedir}/lib/junit-3.8.2.jar</systemPath>
6.2 依赖冲突
比如我们在项目中添加了两个不同的依赖,他们又依赖了不同版本的同一个jar包的话,就会出现依赖冲突,到底应该使用哪一个jar包
有两个原则:
1.路径最短
2.pom.xml优先使用最先声明的
七.父子工程
使用情境:
在实际开发中,会把一个大项目拆分成多个小项目,比方说用户管理,商品管理等等,但是如果每一个模块都需要重新配置一遍依赖就会很麻烦。
但是我们观察发现,像spring,mybatis几乎每个模块都会用到。我们就可以通过父子工程来管理这些依赖
我们先新建一个maven-parent
把这里改成pom,表示最后不是生成jar文件,而是用来管理
然后把这个项目的SRC文件也给删掉,在这里用不到
随后右键maven-parent选择新建一个模块
可以看到这里child-a的pom.xml多了一个parent标签
而父工程的pom.xml多了modules模块