安装 Maven 之前需要安装 JDK(Maven 3.3 版本需要 1.7 及更高版本的 JDK 才能运行,但仍然可以构建基于 1.3 或更高版本的 JDK 的 Java 应用 )并配置 Java 环境变量(推荐通过建立 JAVA_HOME
环境变量的方式来间接指定 Java 的环境变量,而不是直接把 JDK 的安装目录作为 Java 环境变量,否则不能在控制台使用 mvn 命令。因为目前版本的 Maven(版本为 3.3.9)在控制台执行时会查找 JAVA_HOME
环境变量)。关于 JDK 的安装和 Java 环境变量的配置请参考我写的详解Java环境变量配置(Windows&Linux)。
下载 Maven
Maven 官方下载地址:http://maven.apache.org/download.cgi。将下载得到的压缩包解压到合适的运行位置,得到名为 apache-maven-3.3.x 的文件夹(我的是 apache-maven-3.3.9)。文件的文件结构如下:
- LICENSE.txt:包含了 Apache Maven 的软件许可证;
- NOTICE.txt:包含了一些 Maven 依赖的类库所需要的通告及权限;
- README.txt:包含了一些安装指令;
- bin/:目录包含了运行 Maven 的 mvn 脚本;
- boot/:目录包含了一个负责创建 Maven 运行所需要的类装载器的 JAR 文件—— plexus-classworlds-x.x.x.jar。plexus-classworlds 是一个类加载框架,相对于默认的类加载器,该框架提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库;
- conf/:目录包含了一个全局的
settings.xml
文件,该文件用来自定义你机器上 Maven 的一些行为。如果你需要自定义 Maven,更通常的做法是将该文件复制到~/.m2
目录下,每个用户都有对应的这个目录; - lib/:目录有了一个包含 Maven 核心的 JAR 文件。
运行和验证 Maven
以 Windows 系统为例,新建一个 MAVEN_HOME
的环境变量,指向 Maven 的安装目录,然后将 %MAVEN_HOME%\bin
目录添加到 Path 环境变量中。添加环境变量的步骤参考笔者之前的文章环境变量详解(Windows&Linux)。
在控制台输入mvn -v
即可查看 Maven 的版本。如下图所示。
C:\Users\Vincent Huang>echo %JAVA_HOME%
D:\development\tools\jdk1.8.0_171
C:\Users\Vincent Huang>echo %MAVEN_HOME%
D:\development\tools\apache-maven-3.3.9
C:\Users\Vincent Huang>mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\development\tools\apache-maven-3.3.9
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: D:\development\tools\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
运行 Maven 的语法如下:
mvn [options] [<goal(s)>] [<phase(s)>]
使用 -h
选项可查看所有可用的选项:
mvn -h
配置 Maven
Maven 可以使用其本身的配置和所构建项目中的配置,这些配置分散在以下几个地方:
-
MAVEN_OPTS
环境变量。该环境变量指定启动 Maven 时所用的 JVM 参数,并可用于为其提供其他选项。例如,如果通过 Maven 构建大型项目出现 java.lang.OutOfMemoryError,可以使用值-Xms256m -Xmx512m
来定义 JVM 内存配置。 -
settings.xml
。Maven 会创建一个~/.m2
目录(这里的 ~ 指用户的 home 目录),该目录下有:~/.m2/settings.xml
:该文件包含了用户相关的认证,仓库和其它信息,用来自定义 Maven 行为。一般使用%MAVEN_HOME%\config\settings.xml
文件来覆盖该文件;~/.m2/repository/
:该目录是默认的本地的仓库。当从远程 Maven 仓库下载依赖的时候,Maven 在本地仓库存储了这个依赖的一个副本。
-
.mvn
。该可选目录位于 Maven 项目的顶层目录中。该目录下的maven.config
、jvm.config
和extensions.xml
文件包含当前项目中特定的 Maven 配置。该目录是 Maven 项目的一部分,可以添加到 Maven 项目的版本控制中。-
.mvn/extensions.xml
。以前(直到 Maven 3.2.5)是创建一个包含扩展的 jar(如果有其他依赖项,则必须使用 shade),并手动将其放入${MAVEN_HOME}/lib/ext
目录。这意味着每个想使用该扩展的开发人员都需要这样做,很不方便。另一个选择就是通过mvn -Dmaven.ext.class.path=extension.jar
在命令行上提供 jar 的路径。但这样的话,每次调用 Maven 时都需要提供这些选项,也不是很方便。从现在起,可以定义一个${maven.projectBasedir}/.mvn/extensions.xml
文件,该文件中可以声明扩展相关的信息。该文件示例如下所示:<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"> <extension> <groupId/> <artifactId/> <version/> </extension> </extensions>
如上所示,可以在该文件中通过声明扩展的 Maven 坐标(groupId、artifactId、version) 来使用该扩展。此外,这些扩展的所有可传递依赖项都将自动从仓库中下载。因此,不再需要创建 shade 工件。
-
.mvn/maven.config
。很难定义一组调用 Maven 命令行的通用选项。从 Maven 3.3.1+ 开始,可以通过将这些选项放到脚本中来解决,但现在可以通过定义${maven.projectBasedir}/.mvn/maven.config
文件来实现,该文件包含mvn
命令行的配置选项。例如,像-T3 -U --fail-at-end
,只需在每次调用 Maven 时仅使用mvn clean package
就可以了(而不是mvn -T3 -U --fail-at-end clean package
),这样也不会在每次调用时丢失-T3 -U --fail-at-end
选项。${maven.projectBasedir}/.mvn/maven.config
位于${maven.projectBasedir}/.mvn/
目录中,对于根目录中含有多个模块的项目中,该文件也可以发挥作用。 -
.mvn/jvm.config
。从 Maven 3.3.1+ 开始,可以通过${maven.projectBasedir}/.mvn/jvm.config
文件定义运行 Maven 的 JVM 配置,这意味着可以在每个项目基础上定义运行 Maven 的 JVM 选项。该文件将成为项目的一部分,并应该将其与项目中的其他文件一起检入版本控制系统。因此不再需要MAVEN_OPTS
、.mavenrc
文件。例如,如果将以下 JVM 选项放入${maven.projectBasedir}/.mvn/jvm.config
文件中:-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
这样,就不需要在
MAVEN_OPTS
中使用这些选项,也不需要在不同的配置之间切换。
-