一、Maven 简介
1、Maven 是什么
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
- 版本 - maven 有自己的版本定义和规则。
- 构建 - maven 支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
- 输出物管理 - maven 可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。
- 依赖关系 - maven 对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
- 文档和构建结果 - maven 的 site 命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
- 项目关系 - 一个大型的项目通常有几个小项目或者模块组成,用 maven 可以很方便地管理。
- 移植性管理 - maven 可以针对不同的开发场景,输出不同种类的输出结果。
2、Maven 的生命周期
maven 把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven 中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后 maven 执行的时候,就依照过程的发展依次调用这些 goal 进行各种处理。
这个也是 maven 的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven 同样提供了配置文件,可以依照用户要求,跳过某些阶段。
3、Maven 的标准工程结构
Maven 的标准工程结构如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|-- java(java源代码目录)
|-- resources(资源文件目录)
|-- test
|-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
|-- classes(编译后的class文件存放处)
4、Maven 的"约定优于配置"
所谓的"约定优于配置",在 maven 中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是除非必要,并不需要去修改那些约定内容。maven 默认的文件存放结构如下:
每一个阶段的任务都知道怎么正确完成自己的工作,比如 compile 任务就知道从 src/main/java 下编译所有的 java 文件,并把它的输出 class 文件存放到 target/classes 中。
对 maven 来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
二、Maven 安装
1、环境准备
Maven 依赖于 Java,所以本地必须安装 JDK。
打开控制台,执行 java -version
确认本地已安装 JDK。
# java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
2、下载解压
进入 官网下载地址,选择合适版本,下载并解压。命令如下:
wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz --no-check-certificate
tar zxf apache-maven-3.8.4-bin.tar.gz -C /usr/src/
cd /usr/src/
mv apache-maven-3.8.4 maven
3、环境变量
添加环境变量 MAVEN_HOME
,值为 Maven 的安装路径。
1、配置 Linux 系统环境变量
输入 vi /etc/profile
,添加环境变量如下:
# MAVEN 的根路径
export MAVEN_HOME=/usr/src/maven
export PATH=$PATH:$MAVEN_HOME/bin
执行 source /etc/profile
,立即生效。
4、检测安装成功
检验是否安装成功,执行 mvn -v
命令,如果输出类似下面的 maven 版本信息,说明配置成功。
# mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /usr/src/maven
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: /usr/src/jdk1.8.0_321/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.19.12-1.el7.elrepo.x86_64", arch: "amd64", family: "unix"
5、Maven 配置文件
setting.xml
文件是 Maven 的默认配置文件,其默认路径为:<Maven 安装目录>/conf/settings.xml
。
如果需要修改 Maven 配置,直接修改 setting.xml
并保持即可。
例如:想要修改本地仓库位置可以按如下配置,这样,所有通过 Maven 下载打包的 jar 包都会存储在 D:\maven\repo
路径下。
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<localRepository>D:\maven\repo<localRepository/>
<!-- 略 -->
</settings>
三、构建项目
1、构建参数
参数 | 说明 |
---|---|
install | 完成项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库 |
clean | clean能够保证上一次构建的输出不会影响到本次构建 |
deploy | 完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库 |
-U | 强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态 |
-e | 如果构建出现异常,该参数能让Maven打印完整的stack trace,以方便分析错误原因 |
-Dmaven.repo.local | 如果服务器有很多任务,每个任务都会使用本地仓库,下载依赖至本地仓库 |
-B | 该参数表示让Maven使用批处理模式构建项目,能够避免一些需要人工参与交互而造成的挂起状态 |
-pl | 在指定模块上执行命令 |
执行以下命令,即可构建项目:
mvn clean package -Dmaven.test.skip=true -B -U
构建成功后,会输出类似下面的信息:
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.953 s
[INFO] Finished at: 2019-11-24T13:05:10+01:00
[INFO] ------------------------------------------------------------------------
这时,在当前路径下会产生一个 target
目录,其中包含了构建的输出物,如:jar 包、class 文件等。
这时,我们可以执行以下命令启动 jar 包:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
2、Maven 命令
常用 maven 命令清单:
生命周期 | 阶段描述 |
---|---|
mvn validate | 验证项目是否正确,以及所有为了完整构建必要的信息是否可用 |
mvn generate-sources | 生成所有需要包含在编译过程中的源代码 |
mvn process-sources | 处理源代码,比如过滤一些值 |
mvn generate-resources | 生成所有需要包含在打包过程中的资源文件 |
mvn process-resources | 复制并处理资源文件至目标目录,准备打包 |
mvn compile | 编译项目的源代码 |
mvn process-classes | 后处理编译生成的文件,例如对 Java 类进行字节码增强(bytecode enhancement) |
mvn generate-test-sources | 生成所有包含在测试编译过程中的测试源码 |
mvn process-test-sources | 处理测试源码,比如过滤一些值 |
mvn generate-test-resources | 生成测试需要的资源文件 |
mvn process-test-resources | 复制并处理测试资源文件至测试目标目录 |
mvn test-compile | 编译测试源码至测试目标目录 |
mvn test | 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 |
mvn prepare-package | 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在 Maven 2.1+中实现) |
mvn package | 将编译好的代码打包成可分发的格式,如 JAR,WAR,或者 EAR |
mvn pre-integration-test | 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境 |
mvn integration-test | 如果有必要的话,处理包并发布至集成测试可以运行的环境 |
mvn post-integration-test | 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。 |
mvn verify | 执行所有检查,验证包是有效的,符合质量规范 |
mvn install | 安装包至本地仓库,以备本地的其它项目作为依赖使用 |
mvn deploy | 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关) |
示例:最常用的 maven 构建命令
mvn clean install -Dmaven.test.skip=true -B -U
清理本地输出物,并构建 maven 项目,最后将输出物归档在本地仓库。
评论区