玩转Apache Maven
1 简介
首先还是要介绍下的,防止有人初次认识
Maven 是一个Yiddish单词,意思是知识的积累,最初是为了简化 Jakarta Turbine 项目中的构建过程。有几个项目,每个项目都有自己的 Ant 构建文件,都略有不同。JAR 被检入 CVS。我们想要一种构建项目的标准方法、对项目组成的清晰定义、一种发布项目信息的简单方法以及一种在多个项目之间共享 JAR 的方法。
结果是现在可以用于构建和管理任何基于 Java 的项目的工具。我们希望我们已经创建了一些东西,使 Java 开发人员的日常工作更容易,并且通常有助于理解任何基于 Java 的项目。
- Maven 是一个站点和文档工具
- Maven 扩展 Ant 以让您下载依赖项
- Maven 是一组可重用的 Ant 脚本
2 下载安装和基本配置
2.1 下载安装
下载:https://maven.apache.org/download.cgi
下载的时候只需要下载二进制文件就可以了
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
- 将编译后的代码打包成可分发的格式,例如 JAR -
verify
- 对集成测试的结果进行任何检查,以确保满足质量标准 -
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 生成的典型工件的格式为 <artifactId>-<version>.<extension>(例如,
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>
- 点赞
- 收藏
- 关注作者
评论(0)