Maven安装配置和目录结构详解

因为 Maven 本身就是基于 Java 写的,所以在安装配置 Maven 之前,有必要将 Java 的运行环境安装配置好。有关 JDK 的安装,大家可参阅《Java JDK下载与安装教程》和《Java JDK环境变量配置》教程。这里要注意本教程使用 Maven 3.3.9 版本,版本要求的 JDK 一定是 JDK 1.7 或以后的版本。

JDK 环境安装好之后,接下来正式安装配置 Maven。先要下载 Maven(http://maven.apache.org/download.cgi 或直接点开 https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/下载)。

它是以压缩包形式提供的,下载 Binary 形式的压缩包就行。

下载完成后,直接用解压工具解压到自己的一个空目录下。这里是解压到 E:\maven\apache-maven-3.3.9,最后的目录结构如图 1 所示。

Maven安装目录
图 1  Maven安装目录

现在来仔细分析一下 Maven 的目录结构和内容。

1)bin

该目录包含了 mvn 运行的脚本,这些脚本用来配置 Java 命令,准备好 classpath 和相关的 Java 系统属性,然后执行 Java 命令。

其中 mvn 是基于 UNIX 平台的 shell 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。

该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。那么 mvn 和 mvnDebug 有什么区别和关系呢?

打开文件我们就可以看到,两者基本是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启 debug,以便调试 Maven 本身。

此外,该目录还包含 m2.conf 文件,这是 classworlds 的配置文件,后面会介绍 classworlds。

2)boot

该目录只包含一个文件,以 maven 3.3.9 为例,该文件为 plexus-classworlds-2.5.2.jar。

plexus-classworlds 是一个类加载器框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。

更多关于 classworlds 的信息请参考 http://classworlds.codehaus.org/。对于一般的 Maven 用户来说,不必关心该文件。

3)conf

该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。

一般情况下,我们更偏向于复制该文件至 ~/.m2/ 目录下(~表示用户目录),然后修改该文件,在用户范围定制 Maven 的行为。后面将会多次提到 settings.xml,并逐步分析其中的各个元素。

4)lib

该目录包含了所有 Maven 运行时需要的 Java 类库,Maven 本身是分模块开发的,因此用户能看到诸如 maven-core-3.0.jar、maven-model-3.0.jar 之类的文件。

此外,这里还包含一些 Maven 用到的第三方依赖,如 common-cli-1.2.jar、commons-lang-2.6.jar 等。

对于 Maven 2 来说,该目录只包含一个如 maven-2.2.1-uber.jar 的文件,原本各为独立 JAR 文件的 Maven 模块和第三方类库都被拆解后重新合并到了这个 JAR 文件中。可以说,lib 目录就是真正的 Maven。

关于该文件,还有一点值得一提的是,用户可以在这个目录中找到 Maven 内置的超级 POM,这一点教程后面会详细解释。

5)LICENSE.txt

记录了 Maven 使用的软件许可证Apache License Version 2.0。

6)NOTICE.txt

记录了 Maven 包含的第三方软件。

7)README.txt

包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

安装好后,接下来对 Maven 进行配置。配置内容同 JDK 的配置内容一样,也是两部分:一部分是在系统环境变量或者用户环境变量中配置一个 MAVEN_HOME;另一部分也是将 Maven 里面的 bin 目录添加到 Path 环境变量。

1)配置 MAVEN_HOME。同配置 JAVA_HOME 一样,在系统环境变量中添加 MAVEN_HOME,参考 JDK 的 JAVA_HOME 配置,这里就不再赘述了,效果如图 2 所示。

设置MAVEN_HOME环境变量
图 2  设置 MAVEN_HOME 环境变量

2)追加 Path。类似前面 JDK Path 环境变量的配置,请参考 JDK 配置,效果如图 3 所示。

Maven Path环境变量
图 3  Maven Path环境变量

其中,%MAVEN_HOME%/bin是作为 Maven 的 Path 添加的。

3)测试安装是否成功。打开一个 CMD 窗口(一定要重新打开一个,不能使用配置环境变量之前的旧 CMD 窗口),输入“mvn-v”命令运行,出现如图 4 所示内容表示安装成功。

图 4  Maven安装检测
图 4  Maven安装检测

推荐文章
C语言switch case语句详解

C语言虽然没有限制ifelse能够处理的分支数量,但当分支过多时,用ifelse处理会不太方便,而且容易出现ifelse配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示: #i

C语言位运算符

对于更多紧凑的数据,C程序可以用独立的位或多个组合在一起的位来存储信息。文件访问许可就是一个常见的应用案例。位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除、设定,或者倒置任何位或多个

Linux jobs命令:查看当前终端放入后台的工作

jobs命令可以用来查看当前终端放入后台的工作,工作管理的名字也来源于jobs命令。 jobs命令的基本格式如下: [root@localhost~]#jobs[选项] 表1罗列了jobs命令常用

C++静态成员函数(无师自通)

通过将关键字static放置在声明语句的前面作为前缀,可以将类的成员函数声明为静态成员函数。 静态成员函数的一般形式为: static() 静态成员函数通常用于处理类的静态成员变量。实际上,对于类

JS hasOwnProperty()方法:检测一个属性是否是对象的自有属性

JavaScript hasOwnProperty()方法是Object的原型方法(也称实例方法),它定义在Object.prototype对象之上,所有Object的实例对象都会继承hasOwnPr

npm中的这些实用技巧你也许还不知道!

作者:LeanCloudweakish分享一些npm包管理工具的实用小窍门,希望能够略微提高下前端、Node.js开发者的生活质量。绝大多数前端和Node.js开发者每天的日常工作都离不开npm,不知

Shell数组:Shell数组定义以及获取数组元素

和其他编程语言一样,Shell也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。 Shell并且没有限制数组的大小,理论上可以存放无限量的数据。和C++、

程序员的职场阶梯与级别定义

任何种类的职场上升通道都是一个阶梯,但程序员的阶梯有何不同呢? 在程序员职业生涯的发展过程中,都会经历一个修炼成长、打怪升级的过程,而每个公司可能会定义自己的升级阶梯。以AT为首的两大巨头,其对技术

C++ set迭代器(STL set迭代器)详解

set容器的成员返回的迭代器都是双向迭代器。这些迭代器的类型的别名定义在set模板中,可以从set中得到类型别名有iterator、reverse_iterator、const_iterator、co

Python字典推导式

Python中,使用字典推导式可以借助列表、元组、字典、集合以及range区间,快速生成符合需求的字典。 字典推导式的语法格式如下: {表达式for迭代变量in可迭代对象[if条件表达式]} 其中

JS生成指定范围的随机数和字符串

Math是JavaScript的原生对象,提供各种数学运算功能,如各种常用数学常量、数学运算方法。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用。 使用Math.ra

adobe flash player可以卸载吗?

可以卸载。AdobeFlashPlayer是一种广泛使用的、专有的多媒体程序播放器。它最初由Macromedia编写,在Macromedia被Adobe收购后由Adobe继续开发并分发。AdobeFl

一个稍微复杂的Qt程序

《第一个Qt程序》中使用MainWindow作为主界面,内置一个QLabel控件,所有代码都写在main()函数内部。本节我们将主要代码封装到一个类的内部,然后在main()函数中创建该类的对象,这貌

“windows是一个多任务操作系统”指的是什么

“windows是一个多任务操作系统”指的是:Windows可同时运行多个应用程序。在windows系统中,一台计算机同时只能有一个用户在使用,该用户一次可以提交多个作业,一个用户独自享用系统的全部硬

JSP jsp:plugin:加载标签

使用JSP 中的标签可以在页面中插入JavaApplet小应用程序或JavaBean,它们能够在客户端运行。该标签会根据客户端浏览器的版本转换成或HTML元素。 语法: ] [加载失败提示信息

DOM解析XML

XML结构是一种树型结构,处理步骤都差不多,Java己经将它们封装成了现成的类库。目前流行的解析方法有三种,分别为DOM、SAS和DOM4j。 DOM(DocumentObjectModel,文档对

Java Servlet是什么?它有哪些特点?

Servlet(ServerApplet)是JavaServlet的简称,是使用Java语言编写的运行在服务器端的程序。具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内

C++ for循环详解

条件循环计数控制循环 必须将计数器变量初始化为起始值。 必须通过将其与最终值进行比较来测试计数器变量。当计数器变量达到其最终值时,循环终止。 必须在每次迭代期间更新计数器变量。这通常通过变量递增

C语言是菜鸟和大神的分水岭

作为一门古老的编程语言,C语言已经坚挺了好几十年了,初学者从C语言入门,大学将C语言视为基础课程。不管别人如何抨击,如何唱衰,C语言就是屹立不倒;Java、C#、Python、PHP、Perl等都有替

C++逆向入门视频教程(编程魔方)

课程暂定31个课时,后面可能根据课程的需要会进行相应的修改,课程中用到的工具主要有三个:MicrosoftVisualC++6.0、Ollydbg(OD)和IDA。 视频目录: 1、动态调式工具