Maven安装目录分析

----------

 

1.M2_HOME

前面讲到设置M2_HOME环境变量指向maven的安装目录,本书之后所有使用M2_HOME的地方都指代了该安装目录。下面看一下该目录的结构和内容:

bin

boot

conf

lib

LICENSE.txt

NOTICE.txt

README.txt

 

bin目录:

该目录包含了mvn运行的脚本,这些脚本用来配置java命令,准备好classpath和相关的java系统属性,然后执行java命令。其中mvn是基于UNIX平台的shell脚本,mvn.bat是基于windows平台的bat脚本。在命令行输入任何一条mvn命令时,实际上就是在调用这些脚本。该目录还包含了mvnDebug和mvnDebug.bat两个文件,同样,前者是UNIX平台的脚本,后者是windows平台的脚本。那么mvn和mvnDebug有什么区别和关系呢?打开文件我们就可以看到,两者基本是一样的,只是mvnDebug多了一条MAVEN_DEBUG_OPTS配置,其作用就是在运行Maven时开启debug,以便调试Maven本身。此外,该目录还包含m2.conf文件,这是classworlds的配置文件,后面会介绍classworlds。

 

boot目录:

该目录只包含一个文件,以maven3为例,该文件为plexus-classworlds-xxx.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,maven使用该框架加载自己的类库。

 

conf目录:

该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制maven的行为。一般情况下,我们更偏向于复制该文件至~/.m2/目录下(~表示用户目录),然后修改该文件,在用户范围定制maven的行为。后面将会多次提到settings.xml,并分析其中的各个元素。 

 

lib目录:

该目录包含了所有maven运行时需要的java类库,maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jar,maven-model-3.0.jar之类的文件。此外,这里还包含一些maven用到的第三方依赖,如common-cli-1.2.jar,google-collection-1.0.jar等。对于maven2来说,该目录只包含一个如maven-2.2.1-uber.jar的文件,原本各为独立jar文件的maven模块和第三方类库都被拆解后重新合并到了这个jar文件中。可以说,lib目录就是真正的maven。

---

2.~/.m2

在用户目录下可以发现.m2文件夹。默认情况下,该文件夹下放置了maven本地仓库.m2/repository。所有的maven构件都被存储到该仓库中,以方便重用。默认情况下,~/.m2目录下除了repository仓库之外就没有其他目录和文件了,不过大多数maven用户需要复制M2_HOME/conf/settings.xml文件到~/.m2/settings.xml,以便定制。