Maven 基础及 IDEA 创建 Maven 项目范例
Maven 基础及 IDEA 创建 Maven 项目范例
1 Maven 介绍
Maven 是一款用 Java 语言编写的软件开发项目管理工具
Maven 的两个核心功能:
- 依赖管理
- 传统做法,我们必须将工程所依赖的 jar 包复制到工程的依赖库目录,或公共的依赖库目录,缺点明显:
- 若每个工程使用各自的依赖库,会重复占用存储空间
- 若使用一个公共依赖库
- 每个工程都会引入大量用不到的依赖
- 常发生版本冲突
- 使用、维护依赖库的操作繁琐
- Maven 可以帮用户进行依赖管理,通过在 pom.xml 配置文件中添加所需 jar 包的 “坐标” ,即可为工程引入依赖
- 工程通过配置文件,引入本地依赖库中的指定 jar 包
- 本地没有的包,通过网络从 MavenRepository 库中下载
- 传统做法,我们必须将工程所依赖的 jar 包复制到工程的依赖库目录,或公共的依赖库目录,缺点明显:
- 项目构建
- 项目从编译、测试、打包、安装,部署整个过程都可以由 maven 进行处理。
2 下载安装
-
下载
-
安装
-
依赖,Maven 使用 JAVA 语言,依赖 JAVA 运行环境(需要配置好 JAVA_HOME 环境变量)
-
解压
- 目录说明
- bin:可执行程序(命令、脚本)
- boot:存放了一些 Maven 本身的引导程序,如类加载器等
- conf:配置文件,比如:setting.xml
- lib:Maven 本身运行所需要的 jar 包
- 目录说明
-
配置 Maven 自身的环境变量
- 添加:
MAVEN_HOME
( bin 文件夹所在目录,非 bin 目录 ) - path 中添加:
%MAVEN_HOME%\bin
- 验证:
mvn --version
- 添加:
-
配置本地仓
-
编辑 conf/setting.xml 文件,添加(准备一个专门用来放本地依赖库的文件夹)
-
1
<localRepository>D:\#Coding\_Environment\Maven_Repository</localRepository>
-
-
-
配置第三方镜像仓
-
默认的官方 Maven Repository 中央仓在:https://repo1.maven.org/maven2/
-
由于网络原因,建议配置国内的第三方镜像仓,比如:阿里
-
编辑 conf/setting.xml 文件,在
<mirrors> </mirrors>
中添加-
1 2 3 4 5 6
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
-
-
(如有必要,还可以自建内网镜像仓)
-
-
3 IDEA 创建 Maven 项目范例
3.1 IDEA 中的 Maven 环境设置
由于 IDEA 还内置了一个 Maven(bunbled),但直接使用这个内置 Maven 存在一些问题。我们需要修改设置,指定为已经配置好的 Maven :
直接修改 “Settings for New Projects” ,对以后创建的工程全部生效
要修改的地方有 3 项
因为前面已经在配置文件中配置好了本地依赖库,配置好前两项之后,第 3 项就会自动切换过来
3.2 创建 Maven 项目
3.3 pom.xml 例行配置
指定 JDK 版本和字符编码方式
|
|
指定打包类型(如果不是 Web 项目,可免此步骤,缺省就是 jar 方式打包)
|
|
3.4 通过 pom.xml 配置文件添加依赖
比如,为项目添加 Mybatis 的依赖
通过 Maven 进行依赖管理,可以免去手动寻找、下载、引入 jar 包的繁琐过程
-
到 Maven 官方依赖库 网站上检索该包的引入代码(坐标)
-
将该坐标添加到 pom.xml 的
<dependencies> </dependencies>
标签中-
1 2 3 4 5 6 7 8 9 10
<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> </dependencies>
-
-
侦测到添加了新的依赖后,IDEA 会在右上角弹出一个重新加载 Maven 的小按钮
- 如果本地依赖库中从来没下载过该依赖的任意版本,会显示为红字
-
点击该按钮后,Maven 会自动从网络下载该依赖包到本地库
-
下载完成后,就可以使用了
4 生命周期介绍和 Maven 命令
4.1 生命周期
maven 对项目构建过程分为 “三套相互独立的” 生命周期,分别是:
- Clean Lifecycle(清理生命周期)
- 在进行真正的构建之前进行一些清理工作
- 比如:下载的源码、接手的项目
- 命令:clean,开发调试过程中使用率很高,避免手动清理 target 文件夹
- 在进行真正的构建之前进行一些清理工作
- Default Lifecycle(默认生命周期)
- 构建的核心部分,编译,测试,打包,部署等等。
- 命令:compile、test、package、install、deploy
- Site Lifecycle(站点生命周期)
- 生成项目报告、站点,发布站点。
- 命令: site
- 在同一个生命周期中的命令,执行后面的命令,前面的命令会自动被执行
4.2 Maven 命令:命令行执行方式
clean
- 清理命令,会删除 target 目录
compile
- 编译命令,将 src/main/java 下的文件编译为 class 文件输出到target目录
test
- 会执行一系列过程:清空 target 目录、编译 src/main 主干目录、编译 src/test 测试目录、逐一执行 test 目录下的测试代码
package
- 打包
- 打包类型默认为 jar 包,可在 pom.xml 中指定(参考上方 “新工程的 pom.xml 例行配置” )
install
- 安装
- 打包,并发布到本地仓库(就是前面设置的 Maven 本地依赖库)
deploy
- 发布到服务器
- 命令执行方式:在项目根目录下执行
4.3 Maven 命令:使用 IDEA 右侧的 Maven 工具栏执行方式
工具栏执行 Maven 命令,方式一:
工具栏执行 Maven 命令,方式二:
5 依赖管理
5.1 通过 Maven 工具栏 “补下载” 依赖
有时遇到本地依赖库中的某个依赖未下载完整,或存在其他问题,需要重新下载
可以在 Maven 工具栏中,展开 Dependencies ,找到该依赖,右键执行 Download
5.2 依赖范围
依赖范围 | 编译 classpath 时 有效 |
测试 classpath 时 有效 |
运行 classpath 时 有效 |
举例 |
---|---|---|---|---|
compile (默认) |
Yes | Yes | Yes | mybatis |
test | No | Yes | No | junit |
provided | Yes | Yes | No | servlet-api |
runtime | No | Yes | Yse | JDBC驱动 |
5.3 依赖传递
子工程间接依赖父工程的依赖
更常见的情形是,项目的依赖包,本身需要其他的依赖,项目就间接依赖了这些包
5.4 依赖冲突
比如:spring-webmvc 依赖 spirng-beans-5.1.5,spring-aop 依赖 springbeans-5.1.6
Maven 的默认处理方式:依赖调解原则
- 第一声明者优先原则
- 在 pom.xml 文件中定义的依赖,以先声明的依赖为准。就是根据坐标导入的顺序来确定最终使用依赖。
- 路径近者优先原则
- 直接依赖大于依赖传递,直接在 pom.xml 文件中定义的依赖,优先于依赖传递的依赖
5.4.1 解决依赖冲突,方式一:排除依赖
|
|
5.4.2 解决依赖冲突,方式二:锁定依赖版本
使用 dependencyManagement 标签
该标签中的依赖包,并不会实际被引入,只有当项目直接或间接依赖了这些包,才会被引入,而且前置使用其指定的版本
|
|
5.4.3 解决依赖冲突,方式三:使用 properties 标签指定依赖的版本
|
|