首页 > 代码库 > Maven实战读书笔记(2)

Maven实战读书笔记(2)

Maven目录分析

通常在安装Maven时,都会设置M2_HOME这个环境变量,M2_HOME指代了Maven的安装目录,下面是目录结构:

bin

boot

lib

LICENSE.txt

NOTICE.txt

README.txt

 

bin目录是?

1、该目录包含了mvn运行的脚本

2mvn是基于UNIX平台的shell脚本,mvn.bat是基于Windows平台的bat脚本,命令行输入任何一条mvn命令时,实际上时在调用这些脚本,然后执行Java命令,是的maven的运行需要java的环境

3、该目录还包含了mvnDebugmvnDebug.bat两个文件,mvnDebugmvn有什么区别呢?打开文件查看之,两者基本上是一样的,只是mvnDebug多了一条MAVEN_DEBUG_OPTS配置,起作用就是在运行Maven时开启debug,以便调试Maven本身

4、该目录还包含m2.conf文件,这是classworlds的配置文件

5、包含文件mvnmvn.bat mvnDebug mvnDebug.batm2.conf

 

调试Maven本身?如何调试?

classworlds是干什么的?

 

boot目录是?

1、该目录只包含一个文件plexus-classworlds-2.2.3.jar

2plexus-classwords是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置

3Maven使用该框架加载自己的类库

4、参考http://classworlds.codehaus.org/

 

conf目录是?

1、该目录包含了一个非常重要的settings.xml

2、修改该文件,就能在机器上全局地定制Maven的行为

3、一般我们会将该文件复制到~/.m2/目录下(~表示当前用户目录),然后修改该文件,在用户范围定制Maven的行为

 

lib目录是?

1、该目录包含了所有Maven运行时需要的Java的类库

2Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jarmaven-model-3.0.jar之类的文件

3、此外还包含了第三方依赖,如common-cli-1.2.jargoogle-collection-1.0.jar

 

对于Maven2来说lib目录有些不同

1、该目录只包含一个如maven-2.2.1-uber.jar的文件

2、原本各为独立JAR文件的Maven模块和第三方类库都被拆解后重新合并到这个jar文件中

3用户可以在这个jar文件中找到Maven内置的超级POM         

 

LICENSE.txt文件是?

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

 

NOTICE.txt文件是?

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

 

README.txt文件是?

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

 

非常有用的mvn help:system命令

1、该命令会打印出所有的Java系统属性环境变量

2、执行该命令Maven会下载maven-help-plugin,包括pom文件和jar文件,这些文件都被下载到了Maven本地仓库中

3、默认情况,可以到~/.m2/repository/org/apache/maven/plugins/maven-help-plugins/目录下找到刚才下载的maven-help-pluginpom文件和jar文件

 

~/.m2目录

1、默认情况下,该文件夹下放置了Maven本地仓库.m2/repository

2、所有的Maven构建都被存储到该仓库中,以方便重用

4、默认情况,~/.m2目录下除了repository仓库之外就没有其他目录和文件,不过大多数Maven用户需要复制M2_HOME/conf/settings.xml文件到~/.m2/settings.xml,这是一条最佳实践

 

设置HTTP代理

有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的带来访问因特网。这种情况下,你需要为Maven配置HTTP代理,才能让它正常访问外部仓库,以下载所需要的资源

 

如何设置HTTP代理

1、首先检查代理服务器是否能正常的访问

2、代理服务器的IP可能是218.14.227.197 端口号为3128

编辑~/.m2/setting.xml文件,添加代理配置如下:

<setting>

       ...

       <proxies>

              <proxy>

                     <id>my-proxy</id>

                     <active>true</active>

                     <protocol>http</protocol>

                     <host>218.14.227.197</host>

                     <port>3128</port>

                     <!--

                     <username>XXX</username>

                     <password>XXX</password>

                     <nonProxyHosts>repository.mycom.com | *.google.com</nonProxyHosts>

                     -->

              </proxy>

       </proxies>

       ...

</setting>

配置说明:

1proxies下面可以配置多个proxy元素,如果声明多个proxy元素,则默认情况下第一个被激活的proxy会生效

2idmy-proxy的代理,active的值为true表示激活该代理,protocol表示使用代理协议为http,最重要的是正确的hostport,如果代理需要认证的话配置usernamepasswordnonPoxyHost元素用来指定哪些主机名不需要代理,可以使用 "|" 符号来分个主机名,可以使用通配符*.google.com

Eclipse非常优秀的IDE

Eclipse是一款非常优秀的IDE,除了基本的语法标亮、代码补齐、XML编辑等基本功能外,最新版本的Eclipse还能很好地支持重构,并且集成JUnitCVSMylyn等各种流行工具,可惜Eclipse默认没有集成对Maven的支持,幸运的是,由Maven之父Jason Van Zyl创立的Sonatype公司建立了m2eclipse项目,这是Eclipse下的一款十分强大的Maven插件,

可以访问http://m2eclipse.sonatype.org/了解更多该项目的信息

 

安装m2eclipse

1、使用Eclipse Marketplace搜索m2eclipse下载Maven Integration for Eclipse(Luna and newer) 1.5

2m2eclipse的核心模块就是Maven Integration for Eclipse

3m2eclipse使用的开源许可证是Eclipse Public License v1.0

4、除了核心组件之外,m2eclipse还提供了一组额外的组件,主要是为了方便与其他工具如Subversion进行集成,这些组件的安装地址为http://m2eclipse.sonatype.org/sites/m2e-extras

 

简单介绍一下这些组件的用途

重要的:

1Maven SCM handler for Subclipse Optional):Subversion是非常流行的版本管理工具

该模块能够帮助我们直接从Subversion服务器签出Maven项目,不过前提是需要首先安装Subclipse (http://subclipse.tigris.org/)

2Maven SCM Integration (Optional): Eclipse环境中MavenSCM集成核心的模块。它利用各种SCM工具如SVN实现Maven项目的签出和具体化等操作

不重要的:

3Maven issue tracking configurator for Mylyn 3.x (Optional):该模块能够帮助我们使用POM中的缺陷跟踪系统信息链接Mylyn至服务器

4Maven SCM handler for Team/CVS (Optional):该模块帮助我们从CVS服务器签出Maven项目,如果还在使用CVS,就需要安装它

5Maven Integration for WTP (Optional):使用该模块可以让Eclipse自动读取POM信息并配置WTP项目

6M2Eclipse Extensions Development Support (Optional): 用来支持扩展m2eclipse,一般用户不会用到

7Project configurators for commonly used maven plugins (temporary):一个临时的组件,用来支持一些Maven插件与Eclipse的集成,建议安装。

以上的这些模块在http://m2eclipse.sonatype.org/sites/m2e-extras已经找不到了,如果想要安装指定的插件,自己在Eclipse marketplace自己搜索吧

 

如何在Eclipse中验证某个插件是否正确安装?

1、首先,单击菜单栏中的Help

2、然后选择About Eclipse,在弹出的对话框中,单击Installation Details按钮,会得到一个对话框

3、在Installed Software标签中,检查该模块是否在这个列表中

 

一个非常常见的错误

在安装Maven的时候,经常会出现一个这样的错误:

09-10-6 上午011449:Eclipse is running in a JRE, but a JDK is reuqired

Some Maven plugins may not work when importing projects or updating or updating source folders

这是因为Eclipse默认是运行在JRE上的,而m2eclipse的一些功能要求使用JDK

解决方法之一:将Eclipse默认运行的JRE改成我们自己安装的JDK

 

安装NetBeans Maven插件

 

Maven安装的最佳实践

1、设置MAVEN_OPTS环境变量

2、配置用户范围settings.xml

3、不要使用IDE内嵌的Maven

 

设置MAVEN_OPTS环境变量干什么?

1、运行mvn命令实际上执行的是Java的命令,Java命令可用的参数也可以用在mvn命令

2、通常需要设置MAVEN_OPTS的值为-Xms138m -Xms512m,因为Java默认的最大可用内存往往不能满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点需要占用大量的内存,如果没有该配置,则很容易得到java.lang.OutOfMemeoryError

注意:尽量不要修改mvn.bat或者mvn这两个Maven执行脚本,如果要升级Maven时不得不再次修改,一来麻烦,二来容易忘记,同理也不要去修改任何Maven安装目录下的文件

 

settings.xml文件的一些说明

1Maven用户可以选择配置 M2_HOME/conf/settings.xml或者~/.m2/settings.xml,前者是全局范围的,整台机器上的所有用户都会直接受到该配置的影响,而后者是用户范围的,只有当前用户才会受到该配置的影响

2、推荐使用用户范围的settings.xml,主要是为了避免无意识地影响到系统中的其他用户,如果有切实的需求,需要统一系统中所有用户的setting.xml配置,当然应该使用全局范围的setting.xml

3、配置用户范围的settings.xml文件还便于Maven的升级,直接修改conf目录下的settings.xml会导致Maven升级不便,每次升级到新版本的Maven,都需要复制settings.xml文件,如果使用~/.m2目录下的settings.xml,就不会影响到Maven安装文件,升级时就不需要触动settings.xml文件

 

为什么不要使用IDE内嵌的Maven

无论Eclipse还是NetBeans,当集成Maven时,都会安装上一个内嵌的Maven,这个内嵌的Maven通常会比较新,但不一定很稳定,而且往往也会和在命令行使用的Maven不是同一个版本

 

使用IDE内嵌的Maven会出现两个潜在的问题

1、较新版本的Maven存在很多不稳定因素,容易造成一些难以理解的问题

2、除了IDE,也经常还会使用命令行的Maven,如果版本不一致,容易造成构建行为的不一致,这是我们所不希望看到的。

所以应该在IDE中配置Maven插件时使用与命令行一致的Maven


Maven实战读书笔记(2)