Maven 简介
What Maven
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。它具有以下特征:
- 依赖管理:Maven 自动处理项目依赖。当你在项目中声明一个依赖时,Maven 会自动下载所需的库和它们的依赖项,极大地简化了库管理过程。
- 标准化构建过程:它提供了一个标准化的构建生命周期来编译、测试和打包Java 代码,这使得开发人员更容易理解和维护不同的项目。
- 项目模型:Maven 使用 Project Object Model (POM) 来描述项目和其依赖,这是一个基于XML的文件,包含了项目的所有配置信息。
- 插件式架构:通过使用插件,Maven 可以扩展其功能来支持各种额外的任务,比如代码分析、文档生成等。
- 中央仓库:Maven 有一个中央仓库(Maven Central Repository),其中包含了大量常用的库。这简化了依赖管理,因为大多数常见的库都可以在不需要任何额外配置的情况下使用。
Why Maven
- 工程轻量化:在今天的 JavaEE 开发领域,有大量的第三方框架和工具(以 Jar 包形式)可以供我们使用。对每个工程进行手动添加 Jar 包操作,会造成大量重复文件(一个 Jar 包在多个工程里被反复使用)的情况,造成资源臃肿和空间浪费。而 Maven 只需要每个 Jar 包在本地仓库中保存一份,当需要使只需简单引用一下即可,大大缩小了空间使用率,使工程变得更轻巧灵活。
- Jar 包依赖关系:当手动添加 Jar包时,如果该 Jar 包依赖于某些其他 Jar 包,没有添加这些 Jar 包会导致该 Jar包不能正常工作。而使用 Maven 引用 Jar 包时,它会自动引用该 Jar 包的上游依赖,从而使用者不必理解 Jar 包之间的依赖关系。
- 获取第三方Jar包:Maven提供的中央仓库可以让我们更方便的下载我们需要的Jar 包。只需要在项目中添加一个Jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 Jar 包所依赖的其他 Jar 包。
- 工程模块化:开发时,一个大型 Project 被划分为多个较小的模块,每个模块都是一个独立的 Maven Project,具有自己的 pom.xml 文件。这种方法使得管理大型 Project 变得更加容易,因为它允许独立开发、测试和维护各个模块。
Maven 安装
- 方式一:官网下载,下载地址(推荐)
从官网左边的 Menu 中找到 Download,下载最新版本的 Maven(需下载 Binary archive),解压在合适的地方。如果使用如 IDEA 的 Intelij 这样的 IDE,则需要在设置中(以 Intelij 为例,在Preferences | Build, Execution, Deployment | Build Tools | Maven中)找到 Maven home path,然后换成本地解压好的 Maven 的路径。 - 方式二:IDE 集成
许多 IDE 如 IDEA 的 Intelij 都集成 Maven。不过如果需要在 Terminal 里使用 Maven 命令,需要将集成 Maven 的路径(和 bin 文件夹路径)加入环境变量(以 mac 上的 Intelij 为例,Bundled Maven 路径一般为 /Applications/IntelliJ IDEA CE.app/Contents/plugins/maven/lib/maven3)。
无论哪种方式,如果需要在 Terminal 中使用 Maven 命令,都需要将Maven 的路径(和 bin 文件夹路径)加入环境变量。步骤为:
- 定义新的 MAVEN_HOME 变量
MAVEN_HOME=/.../apache-maven-X.X.X
- 加入 bin 文件夹
MAVEN_HOME=$MAVEN_HOME/BIN:$MAVEN_HOME
- 将 MAVEN_HOME 变量加入 PATH 中
PATH=...:$MAVEN_HOME:$PATH
通过以上步骤,重启 Terminal 之后,就可以正常使用 Maven 的命令啦~
Maven Project 结构
其中
- 根目录 以 Project 命名
- src 文件夹位于根目录中,储存项目源码
- main 文件夹位于 src 中,为主程序目录
- test 文件夹位于 src 中,为测试程序目录
- java 文件夹位于 main/test 中,为主程序/测试程序下的 Java 源文件目录
- resources 文件夹位于 main/test 中,为主程序/测试程序下的资源文件目录
- target 文件夹位于根目录中,储存编译结果(.class文件)
- pom.xml 文件位于根目录中,包含了构建项目所需的所有信息和配置。
Maven 常用命令介绍
通过Terminal cd 至 Project repository,我们可以使用一些命令对 Project 进行编译/测试/运行/打包/安装/部署。以下为 Maven 的常见指令:
- mvn compile:mvn compile 是 Maven 的编译命令,它的作用是将 src/main/java 文件编译为 .class 文件输出到target目录下
- mvn test:mvn test 是 Maven 的测试命令,它会执行 src/test/java 下的单元测试类。
- mvn clean:mvn clean 是 Maven 的清理命令,它会删除 target 文件夹以及文件。
- mvn package:mvn package 是Maven的打包命令,它会对 Java Project 打成 Jar 包,对 Java Web Project 打成 War 包。
- mvn install: mvn install 是Maven的安装命令,它会将预先打包的 Jar 包或者 War 发布到本地仓库。
Maven 对项目构建有三套独立的生命周期,分别为:
- Clean Lifecycle:在进行真正构建前进行一些清理工作。
- Default Lifecycle:构建的核心部分,包括编译,测试,打包,部署等。
- Site Lifecycle:生成项目报告,站点,发布站点。
他们是互相独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以直接运行mvn clean install site 运行所有这三套生命周期。
当执行后面的命令时,前面的命令也会被执行。
文档将持续更新…