1 简介
首先还是要介绍下的,防止有人初次认识
Maven 是一个Yiddish单词,意思是知识的积累,最初是为了简化 Jakarta Turbine 项目中的构建过程。有几个项目,每个项目都有自己的 Ant 构建文件,都略有不同。JAR 被检入 CVS。我们想要一种构建项目的标准方法、对项目组成的清晰定义、一种发布项目信息的简单方法以及一种在多个项目之间共享 JAR 的方法。
结果是现在可以用于构建和管理任何基于 Java 的项目的工具。我们希望我们已经创建了一些东西,使 Java 开发人员的日常工作更容易,并且通常有助于理解任何基于 Java 的项目。
- Maven 是一个站点和文档工具
- Maven 扩展 Ant 以让您下载依赖项
- Maven 是一组可重用的 Ant 脚本
2 下载安装和基本配置
2.1 下载安装
下载:maven.apache.org/download.cg…
下载的时候只需要下载二进制文件就可以了
2.2 安装
ymx@ymx-PC:~/Downloads$ ls apache-maven-3.8.2-bin.tar.gz ymx@ymx-PC:~/Downloads$ tar -zxvf apache-maven-3.8.2-bin.tar.gz ymx@ymx-PC:~/Downloads$ sudo mv apache-maven-3.8.2 /usr/local ymx@ymx-PC:~/Downloads$ cd /usr/local/ ymx@ymx-PC:/usr/local$ ls apache-tomcat-9.0.44 etc go jdk1.8.0_141 man mysql-5.5.60 sbin src apache-maven-3.8.2 bin games include lib mysql redis-6.2.1 share 复制代码
修改/etc/profile文件,在末尾加上如下两句话,并保存退出
export MAVEN_HOME=/usr/local/apache-maven-3.8.2 export PATH=$MAVEN_HOME/bin:$PATH 复制代码
刷新配置文件
ymx@ymx-PC:/usr/local$ source /etc/profile 复制代码
验证安装:
ymx@ymx-PC:/usr/local$ mvn -v Apache Maven 3.8.2 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /usr/local/apache-maven-3.8.2 Java version: 1.8.0_141, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_141/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "5.4.70-amd64-desktop", arch: "amd64", family: "unix" 复制代码
3.3 配置Maven仓库和阿里云镜像
两个配置均在Maven的全局配置文件setting.xml中
配置仓库:
可以使用绝对路径也可以使用相对路径
小扩展:maven仓库都有哪些?
配置阿里云镜像:
3 Maven初步使用
3.1 Maven的生命周期
这些构建生命周期中的每一个都由不同的构建阶段列表定义,其中构建阶段代表生命周期中的一个阶段。
例如,默认生命周期包括以下阶段(有关生命周期阶段的完整列表,请参阅生命周期参考):
clean
- 清除项目目录validate
- 验证项目是否正确并且所有必要的信息都可用compile
- 编译项目的源代码test
- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码package
- 将编译后的代码打包成可分发的格式,例如 JARverify
- 对集成测试的结果进行任何检查,以确保满足质量标准install
- 将包安装到本地存储库中,作为本地其他项目的依赖项deploy
- 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。
3.2 基本命令
所有命令必须在带有pom.xml的目录下进行使用
其实Maven的生命周期就是Maven最常用的命令
mvn clean //清除构建目录 mvn compile //进行项目编译,在编译之前会进行clean、validate操作 mvn verify //对集成测试结果进行检查,在该操作之前会进行clean、validate、compile、test、package操作 mvn clean deploy //清除项目目录并构建 ...... 复制代码
3.3 pom要点
pom.xml
包含此项目的项目对象模型 (POM)。POM 是 Maven 中的基本工作单元。记住这一点很重要,因为 Maven 本质上是以项目为中心的,因为一切都围绕着项目的概念。简而言之,POM 包含有关您的项目的每一条重要信息,并且本质上是用于查找与您的项目相关的任何内容的一站式购物。理解 POM 很重要,鼓励新用户参考POM 简介。
这是一个非常简单的 POM,但仍显示每个 POM 包含的关键元素,因此让我们逐一介绍它们以熟悉 POM 要点:
- project这是所有 Maven pom.xml 文件中的顶级元素。
- modelVersion此元素指示此 POM 使用的对象模型的版本。模型本身的版本很少更改,但是如果 Maven 开发人员认为有必要更改模型,为了确保使用的稳定性,它是强制性的。
- groupId此元素指示创建项目的组织或组的唯一标识符。groupId 是项目的关键标识符之一,通常基于您组织的完全限定域名。例如
org.apache.maven.plugins
是所有 Maven 插件的指定 groupId。 - artifactId此元素指示此项目生成的主要工件的唯一基本名称。项目的主要工件通常是 JAR 文件。像源包这样的次要工件也使用 artifactId 作为其最终名称的一部分。Maven 生成的典型工件的格式为 -.(例如,
myapp-1.0.jar
)。 - version此元素指示项目生成的工件的版本。Maven 在帮助您进行版本管理方面大有帮助,您经常会
SNAPSHOT
在版本中看到指示符,这表明项目处于开发状态。我们将在本指南中讨论快照的使用以及它们如何工作。 - name此元素指示用于项目的显示名称。这通常用于 Maven 生成的文档中。
- url此元素指示可以找到项目站点的位置。这通常用于 Maven 生成的文档中。
- properties该元素包含可在 POM 中的任何位置访问的值占位符。
- dependencies这个元素的子元素列表dependencies。POM 的基石。
- build此元素处理诸如声明项目的目录结构和管理插件之类的事情。
3.4 Maven的GAV
什么是GAV ,GAV是groupId、artifactId、version的简称,三个标签在一起就构成了当前仓库中唯一一个maven项目的坐标,并且在maven仓库中的唯一的位置。我们来看下:
新建Maven 项目
来执行下install安装到仓库
ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ ls play_maven.iml pom.xml src ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ pwd /data/home/ymx/Documents/javaProject/play_maven ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ ls -l 总用量 12 -rw-r--r-- 1 ymx ymx 80 9月 19 21:54 play_maven.iml -rw-r--r-- 1 ymx ymx 420 9月 20 13:01 pom.xml drwxr-xr-x 4 ymx ymx 4096 9月 19 21:52 src ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ mvn install [INFO] Scanning for projects... ...... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.485 s [INFO] Finished at: 2021-09-20T13:03:16+08:00 [INFO] ------------------------------------------------------------------------ 复制代码
查看maven仓库
ymx@ymx-PC:/data/home/ymx/mavenKu/org/ymx/play_maven/1.0-SNAPSHOT$ pwd /data/home/ymx/mavenKu/org/ymx/play_maven/1.0-SNAPSHOT 复制代码
maven仓库/data/home/ymx/mavenKu
下确实有一个按照GAV拼接起来的目录/org/ymx/play_maven/1.0-SNAPSHOT
可见GAV原理就是maven项目的安装路径
4 在IDEA中使用
4.1 Project和Module关系
4.2 新建项目Project
4.3 新建Module
4.4 观察结果
5 详解pom.xml文件
5.1 什么是pom文件
POM 是 Maven 中的基本工作单元。它是一个 XML 文件,其中包含有关 Maven 用于构建项目的项目和配置详细信息的信息。它包含大多数项目的默认值。这方面的示例是构建目录,即target
; 源目录,即src/main/java
;测试源目录,即src/test/java
;等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
可以在 POM 中指定的一些配置是项目依赖项、可以执行的插件或目标、构建配置文件等。还可以指定其他信息,例如项目版本、描述、开发人员、邮件列表等。
5.2 最小pom
POM 的最低要求如下:
project
根modelVersion
- 应设置为 4.0.0groupId
- 项目组的 ID。artifactId
- 工件(项目)的 idversion
- 指定组下的工件版本
例如我们新建项目时的pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.ymx</groupId> <artifactId>play_maven</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> </project> 复制代码
5.3 项目继承与项目聚合
5.3.1 项目继承
如上面的Project与Module的关系
5.3.2 项目聚合
<project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.xml</relativePath> </parent> <artifactId>my-module</artifactId> </project> 复制代码
5.4 项目插件和全局变量
5.4.1 配置插件
在 Maven 中,有两种插件,构建和报告:
- 构建插件在构建期间执行并在
<build/>
元素中配置。 - 报告插件在站点生成期间执行并在
<reporting/>
元素中配置。
所有插件都应具有最少的必需信息:groupId
、artifactId
和version
。
5.4.2 全局变量
通常用来指定全局变量或部分可重用的参数,比如Spring Boot的版本控制中心
<properties> <mysqlVersion>5.1.47</mysqlVersion> </properties> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysqlVersion}</version> </dependency> </dependencies> 复制代码
参考链接:maven.apache.org/