Maven目录分析java
一般在安装Maven时,都会设置M2_HOME这个环境变量,M2_HOME指代了Maven的安装目录,下面是目录结构:shell
binapache
boot安全
lib服务器
LICENSE.txt框架
NOTICE.txteclipse
README.txtmaven
bin目录是?工具
1、该目录包含了mvn运行的脚本google
2、mvn是基于UNIX平台的shell脚本,mvn.bat是基于Windows平台的bat脚本,命令行输入任何一条mvn命令时,实际上时在调用这些脚本,而后执行Java命令,是的maven的运行须要java的环境
3、该目录还包含了mvnDebug和mvnDebug.bat两个文件,mvnDebug与mvn有什么区别呢?打开文件查看之,二者基本上是同样的,只是mvnDebug多了一条MAVEN_DEBUG_OPTS配置,起做用就是在运行Maven时开启debug,以便调试Maven自己
4、该目录还包含m2.conf文件,这是classworlds的配置文件
5、包含文件mvn、mvn.bat、 mvnDebug 、mvnDebug.bat、m2.conf
调试Maven自己?如何调试?
classworlds是干什么的?
boot目录是?
1、该目录只包含一个文件plexus-classworlds-2.2.3.jar
2、plexus-classwords是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置
3、Maven使用该框架加载本身的类库
4、参考http://classworlds.codehaus.org/
conf目录是?
1、该目录包含了一个很是重要的settings.xml
2、修改该文件,就能在机器上全局地定制Maven的行为
3、通常咱们会将该文件复制到~/.m2/目录下(~表示当前用户目录),而后修改该文件,在用户范围定制Maven的行为
lib目录是?
1、该目录包含了全部Maven运行时须要的Java的类库
2、Maven自己是分模块开发的,所以用户能看到诸如maven-core-3.0.jar、maven-model-3.0.jar之类的文件
3、此外还包含了第三方依赖,如common-cli-1.2.jar、google-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-plugin的pom文件和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>
配置说明:
1、proxies下面能够配置多个proxy元素,若是声明多个proxy元素,则默认状况下第一个被激活的proxy会生效
2、id为my-proxy的代理,active的值为true表示激活该代理,protocol表示使用代理协议为http,最重要的是正确的host和port,若是代理须要认证的话配置username和password,nonPoxyHost元素用来指定哪些主机名不须要代理,可使用 "|" 符号来分个主机名,可使用通配符*.google.com
Eclipse很是优秀的IDE
Eclipse是一款很是优秀的IDE,除了基本的语法标亮、代码补齐、XML编辑等基本功能外,最新版本的Eclipse还能很好地支持重构,而且集成JUnit、CVS、Mylyn等各类流行工具,惋惜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
2、m2eclipse的核心模块就是Maven Integration for Eclipse
3、m2eclipse使用的开源许可证是Eclipse Public License v1.0
4、除了核心组件以外,m2eclipse还提供了一组额外的组件,主要是为了方便与其余工具如Subversion进行集成,这些组件的安装地址为http://m2eclipse.sonatype.org/sites/m2e-extras
简单介绍一下这些组件的用途
重要的:
1、Maven SCM handler for Subclipse (Optional):Subversion是很是流行的版本管理工具
该模块可以帮助咱们直接从Subversion服务器签出Maven项目,不过前提是须要首先安装Subclipse (http://subclipse.tigris.org/)
2、Maven SCM Integration (Optional): Eclipse环境中Maven与SCM集成核心的模块。它利用各类SCM工具如SVN实现Maven项目的签出和具体化等操做
不重要的:
3、Maven issue tracking configurator for Mylyn 3.x (Optional):该模块可以帮助咱们使用POM中的缺陷跟踪系统信息连接Mylyn至服务器
4、Maven SCM handler for Team/CVS (Optional):该模块帮助咱们从CVS服务器签出Maven项目,若是还在使用CVS,就须要安装它
5、Maven Integration for WTP (Optional):使用该模块可让Eclipse自动读取POM信息并配置WTP项目
6、M2Eclipse Extensions Development Support (Optional): 用来支持扩展m2eclipse,通常用户不会用到
7、Project 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 上午01时14分49秒: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文件的一些说明
1、Maven用户能够选择配置 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