写在前面
今天我们来学习一下 Maven。简单来说,Maven 是一种项目管理和构建工具,它的核心原理是通过使用插件(这些插件是由 Java 编写的 JAR 包)来实现的。
Maven 的作用
假设一个公司要开发一个项目,而这个项目又分成多个模块,每个模块又有许多业务需求,需要不同的小组进行开发和整合。这样的问题是,在快速发展的技术时代里,每个人可能使用不同版本的 JAR 包和软件版本。这种版本不一致的问题可能会导致在项目整合时出现各种问题。
Maven 如何解决这些问题
Maven 能够有效地解决这些问题,其关键在于以下几点:
-
中央仓库
Maven 提供了一个中央仓库,开发者可以从这个中央仓库中获取所需的 JAR 包。此外,开发者完成的项目也可以打包成 JAR 包并发布到这个中央仓库中,供其他模块的开发人员使用。 -
统一版本管理
项目经理或管理员可以使用 Maven 来统一管理所有开发所需的版本,从而最大程度上减少因版本不一致而产生的问题。Maven 的pom.xml
文件中定义了项目所需的所有依赖及其版本,这样可以确保每个开发者都使用相同版本的库和工具。
Maven
下载
可以去国内镜像站中下载 Maven。
安装
-
解压缩包
解压 Maven 压缩包到指定目录。 -
环境变量配置
- 新建一个
MAVEN_HOME
环境变量,指向 Maven 解压目录。 - 将
MAVEN_HOME/bin
目录添加到PATH
环境变量中。
- 新建一个
-
验证安装
在命令行中使用mvn -v
来查询 Maven 的版本,验证是否安装成功。参考网站:Maven Repository
基本使用
项目构建
-
目录结构
src # 书写 Java 源代码 ├── main # 书写 Java 主程序代码 │ ├── java # 书写 Java 代码 │ └── resources # 书写配置文件代码 └── test # 书写测试代码 ├── java # 书写测试 Java 代码 └── resources # 书写测试配置文件代码 pom.xml # 配置文件 target # 编译后目录结构
-
相关操作
项目构建是一个过程,由以下步骤组成。项目创建是瞬间完成的。
- 清理:
mvn clean
- 编译:
mvn compile
- 测试:
mvn test
- 报告:
mvn site
- 打包:
mvn package
- 安装:
mvn install
- 部署:
mvn deploy
- 清理:
-
生命周期
Maven 的生命周期按照顺序执行各个命令,包含以下三个部分:
- Clean LifeCycle:在进行真正的构建之前进行一些清理工作。
- Default LifeCycle:构建的核心部分,包括编译、测试、打包、安装、部署等。
- Site LifeCycle:生成项目报告、站点及发布站点。
基本设置
pom.xml
配置
-
坐标
Maven 使用坐标来唯一标识一个项目的模块:
groupId
:公司或组织的域名倒序 + 当前项目名称artifactId
:当前项目的模块名称version
:当前模块的版本
<groupId>com.shujia</groupId> <artifactId>maven-demo</artifactId> <version>1.0</version>
-
设置父工程坐标
<parent> <artifactId>maven-demo</artifactId> <groupId>com.shujia</groupId> <version>1.0</version> </parent>
-
设置依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
依赖的范围
依赖的语法:
compile
(默认值):在main
、test
、Tomcat 服务器下均有效。test
:仅在test
目录下有效。provided
:在main
、test
下有效,Tomcat 服务器无效。
注意事项
-
在一个大型 Maven 项目中,多个子模块会继承父模块的依赖。如果父模块中有多个不同版本的同一依赖,则使用最后声明的版本。如果子模块中声明了不同版本的依赖,则以子模块的版本为准。
-
如果子模块需要引入其他子模块的依赖,可以直接在
dependency
中添加相关坐标。如果引入其他子模块的依赖,导入的依赖会遵循声明顺序,即前面的模块优先。 -
如果想要控制父模块的所有依赖不直接传递给子模块,可以使用
dependencyManagement
来管理,子模块需要明确声明父模块的依赖才能使用。 -
对于版本号相同的依赖,可以在
properties
中定义参数,例如<hadoop.version>3.1</hadoop.version>
,使用${hadoop.version}
替代版本号,以便统一管理版本号。
Maven 示意图
在 IDEA 中配置 Maven
-
创建 Maven 项目
在 IntelliJ IDEA 中创建一个 Maven 项目。在设置中配置 Maven 的安装目录、依赖包存放位置和conf
中的settings.xml
文件。IDEA 会自动创建并下载必要的依赖包。 -
配置完成
配置完成后,IDEA 会出现pom.xml
文件和 Maven 工具栏,可以继续进行相关配置并正常使用 Maven。