什么是Maven?
Maven 是一个强大的项目管理工具,它基于 POM(项目对象模型)。它用于项目构建、依赖和文档。它像 ANT 一样简化了构建过程。但是它比ANT先进太多了。
简而言之,我们可以说 maven 是一个可用于构建和管理任何基于 Java 的项目的工具。 maven 使Java开发人员的日常工作更轻松,并且通常有助于理解任何基于 Java 的项目。
maven 是做什么的?
Maven 做了很多有用的任务,比如
- 我们可以使用 maven 轻松构建项目。
- 我们可以使用 maven 的帮助轻松添加项目的 jar 和其他依赖项。
- Maven 提供项目信息(日志文档、依赖列表、单元测试报告等)
- Maven 在更新 JAR 和其他依赖项的中央存储库时对项目非常有帮助。
- 在 Maven 的帮助下,我们可以将任意数量的项目构建为 JAR、WAR 等输出类型,而无需编写任何脚本。
- 使用 maven,我们可以轻松地将我们的项目与源代码控制系统(例如 Subversion 或 Git)集成。
Maven 是如何工作的?
Maven的核心概念:
- POM 文件:项目对象模型(POM)文件是 XML 文件,包含与项目相关的信息和配置信息,如 Maven 用于构建项目的依赖项、源目录、插件、目标等。当你应该执行一个 maven 命令时,你给 maven 一个 POM 文件来执行命令。 Maven 读取 pom.xml 文件来完成它的配置和操作。
- 依赖项和存储库:依赖项是项目所需的外部Java库,存储库是打包 JAR 文件的目录。本地存储库只是您机器硬盘上的一个目录。如果在本地 Maven 存储库中找不到依赖项,Maven 将从中央 Maven 存储库下载它们并将它们放在您的本地存储库中。
- 构建生命周期、阶段和目标:构建生命周期由一系列构建阶段组成,每个构建阶段由一系列目标组成。 Maven 命令是构建生命周期、阶段或目标的名称。如果通过给出 maven 命令请求执行生命周期,则该生命周期中的所有构建阶段也将被执行。如果请求执行构建阶段,则也执行定义序列中在它之前的所有构建阶段。
- 构建配置文件:构建配置文件是一组配置值,允许您使用不同的配置构建项目。例如,您可能需要为本地计算机构建项目,以进行开发和测试。要启用不同的构建,您可以使用配置文件元素将不同的构建配置文件添加到 POM 文件中,并以多种方式触发。
- 构建插件:构建插件用于执行特定目标。您可以在 POM 文件中添加一个插件。 Maven 有一些您可以使用的标准插件,您也可以在Java实现自己的插件。
Maven的安装过程
Maven的安装包括以下步骤:
- 验证您的系统是否安装了Java 。如果没有,则安装Java ( Java安装链接)
- 检查Java环境变量是否设置。如果没有,则设置Java环境变量。(安装Java和设置环境变量的链接)
- 下载 maven(链接)
- 在系统中的任何位置解压 Maven zip。
- 将创建的目录apache-maven-3.5.3(取决于你的安装版本)的bin目录添加到PATH环境变量和系统变量中。
- 打开 cmd 并运行mvn -v命令。如果它打印以下代码行,则安装完成。
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T01:19:05+05:30) Maven home: C:\apache-maven-3.5.3\bin\.. Java version: 1.8.0_151, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.8.0_151\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
Maven pom.xml 文件
POM 意味着 Project Object Model 是操作 Maven 的关键。 Maven 读取 pom.xml 文件来完成它的配置和操作。它是一个 XML 文件,其中包含与项目相关的信息和配置信息,例如依赖项、源目录、插件、目标等。 Maven 使用它来构建项目。
pom.xml 示例
4.0.0
com.project.loggerapi
LoggerApi
0.0.1-SNAPSHOT
org.apache.logging.log4j
log4j-api
2.11.0
用于创建 pom.xml 文件的元素
- project-它是 pom.xml 文件的根元素。
- modelVersion- modelversion 表示您使用的 POM 模型的版本。 maven 2 和 maven 3 使用版本 4.0.0。
- groupId-的groupId装置项目组的ID。它是唯一的,并且大多数情况下,您将使用类似于项目的根Java包名称的组 ID,就像我们使用 groupId com.project.loggerapi 一样。
- artifactId- artifactId 用于给出您正在构建的项目的名称。在我们的项目示例中,我们的项目名称是 LoggerApi。
- 版本-版本元素包含该项目的版本号。如果您的项目已经以不同的版本发布,那么提供您项目的版本会很有用。
Pom.xml 文件的其他元素
- dependencies- dependencies 元素用于定义项目的依赖项列表。
- dependency- dependency 定义了一个依赖项并在依赖项标签中使用。每个依赖项都由其 groupId、artifactId 和 version 描述。
- name –此元素用于为我们的 maven 项目命名。
- 范围 –此元素用于定义此 Maven 项目的范围,可以是编译、运行时、测试、提供的系统等。
- Packaging- Packaging 元素用于将我们的项目打包为 JAR、WAR 等输出类型。
Maven 存储库
Maven 存储库是包含一些元数据的打包 JAR 文件的目录。元数据是与每个打包的 JAR 文件所属的项目相关的 POM 文件,包括每个打包的 JAR 具有哪些外部依赖项。此元数据使 Maven 能够递归下载依赖项的依赖项,直到下载所有依赖项并将其放入本地计算机。
Maven 有三种类型的存储库:
- 本地存储库
- 中央存储库
- 远程仓库
Maven 在此存储库中搜索依赖项。如果在 POM 中指定了远程存储库,则 maven 首先在本地存储库中搜索,然后在中央存储库中搜索,然后在远程存储库中搜索。
- 本地存储库– 本地存储库是开发人员机器上的目录。此存储库包含 Maven 下载的所有依赖项。 Maven 只需要下载依赖项一次,即使多个项目依赖它们(例如 ODBC)。
默认情况下,maven 本地存储库是 user_home/m2 目录。
示例 – C:\Users\asingh\.m2 - 中央存储库– 中央 Maven 存储库是创建 Maven 社区。 Maven 在此中央存储库中查找所需但在本地存储库中找不到的任何依赖项。 Maven 然后将这些依赖项下载到您的本地存储库中。您可以通过此链接查看中央存储库。
- 远程存储库-远程存储库是 Web 服务器上的存储库,Maven 可以从中下载依赖项。它通常用于托管组织内部的项目。 Maven 然后将这些依赖项下载到您的本地存储库中。
- Maven 可以通过读取 pom 文件自动添加项目所需的所有依赖项。
- 人们可以使用 Maven 根据他们的要求轻松地将他们的项目构建为 jar、war 等。
- Maven 使得在不同环境下启动项目变得容易,并且不需要处理依赖注入、构建、处理等。
- 添加新的依赖项非常容易。一个人只需要在 pom 文件中编写依赖代码。
- Maven 需要在系统中安装 maven 才能工作,并需要为 ide 安装 maven 插件。
- 如果现有依赖项的 maven 代码不可用,则无法使用 maven 添加该依赖项。
- 当项目有很多依赖项时。然后使用 maven 很容易处理这些依赖项。
- 当依赖版本频繁更新时。然后只需更新 pom 文件中的版本 ID 即可更新依赖项。
- 使用 maven 可以轻松处理持续构建、集成和测试。
- 当需要一种从源代码生成文档、编译源代码、将编译后的代码打包成 JAR 文件或 ZIP 文件的简单方法时。
Maven的实际应用
当处理一个Java项目并且该项目包含很多依赖项、构建、需求时,手动处理所有这些事情是非常困难和乏味的。因此,使用一些可以完成这些工作的工具是非常有帮助的。
Maven 就是这样一个构建管理工具,它可以完成所有事情,例如添加依赖项、管理项目的类路径、自动生成 war 和 jar 文件以及许多其他事情。使用 Maven 的优缺点
优点:
缺点:
什么时候应该使用 Maven?
可以在以下条件下使用 Maven 构建工具:
参考 – Apache Maven 文档