天天看点

Maven实战. 2.3安装目录分析

<b>2.3安装目录分析</b>

前面讲述了如何在各种操作系统中安装和升级maven。现在来仔细分析一下maven的安装文件。

<b>2.3.1m2_home</b>

前面讲到设置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平台的shell脚本,后者是windows平台的bat脚本。那么mvn和mvndebug有什么区别和关系呢?打开文件我们就可以看到,两者基本是一样的,只是mvndebug多了一条maven_debug_opts配置,其作用就是在运行maven时开启debug,以便调试maven本身。此外,该目录还包含m2.conf文件,这是classworlds的配置文件,后面会介绍classworlds。

 boot: 该目录只包含一个文件,以maven 3.0为例,该文件为plexusclassworlds2.2.3.jar。plexusclassworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,maven使用该框架加载自己的类库。更多关于classworlds的信息请参考http://classworlds.codehaus.org/。对于一般的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等。对于maven 2来说,该目录只包含一个如maven2.2.1uber.jar的文件,原本各为独立jar文件的maven模块和第三方类库都被拆解后重新合并到了这个jar文件中。可以说,lib目录就是真正的maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到maven内置的超级pom,这一点在8.5节详细解释。其他: license.txt记录了maven使用的软件许可证apache license version 2.0; notice.txt记录了maven包含的第三方软件;而readme.txt则包含了maven的简要介绍,包括安装需求及如何安装的简要指令等。

<b>2.3.2~/.m2</b>

在讲述该小节之前,我们先运行一条简单的命令:mvn help:system。该命令会打印出所有的java系统属性和环境变量,这些信息对我们日常的编程工作很有帮助。这里暂不解释help:system涉及的语法,运行这条命令的目的是让maven执行一个真正的任务。我们可以从命令行输出看到maven会下载mavenhelpplugin,包括pom文件和jar文件。这些文件都被下载到了maven本地仓库中。

现在打开用户目录,比如当前的用户目录是c:\users\juven xu\,你可以在vista和windows7中找到类似的用户目录。如果是更早版本的windows,该目录应该类似于c:\document

and settings\juven xu\。在基于unix的系统上,直接输入cd 回车,就可以转到用户目录。为了方便,本书统一使用符号 ~ 指代用户目录。

在用户目录下可以发现.m2文件夹。默认情况下,该文件夹下放置了maven本地仓库.m2/repository。所有的maven构件都被存储到该仓库中,以方便重用。可以到~/.m2/repository/org/apache/maven/plugins/mavenhelpplugins/目录下找到刚才下载的mavenhelpplugin的pom文件和jar文件。maven根据一套规则来确定任何一个构件在仓库中的位置,这一点在第6章将会详细阐述。由于maven仓库是通过简单文件系统透明地展示给maven用户的,有些时候可以绕过maven直接查看或修改仓库文件,在遇到疑难问题时,这往往十分有用。

默认情况下,~/.m2目录下除了repository仓库之外就没有其他目录和文件了,不过大多数maven用户需要复制m2_home/conf/settings.xml文件到~/.m2/settings.xml。这是一条最佳实践,我们将在2.7小节详细解释。