1、下载和安装maven
注:在使用之前,应首先安装JDK。
#可以去共用目录中下载,下载完后解压到指定的目录中,如C:\Program Files\apache-maven-2.2.0
#配置环境变量:1)MAVEN_HOME: 你安装的Maven的目录,如C:\Program Files\apache-maven-2.2.0
#在Path 中加入
配置完之后,在命令窗口中使用mvn –version 会出现如下信息
此时,maven已经安装配置好了。
2、使用maven来构建项目,从源代码编译成二进制项目文件
用maven对项目打包,比如用svn下载项目从
svn://10.0.0.58:8000/java/materias/poc/maven/core/,下载到指定的目录,比如放在E:\workspace\java\materias\poc\maven\core目录下
项目的结构如下:
包括src源代码目录,unit test源码目录,以及配置文件目录resources
打开命令窗口,用cd命令转到项目所在的目录下
运行mvn compile,假如下现如下的结果,则该命令运行成功。
该命令是用来编译所有的的(java)源文件,编译后生成所有的class文件放在根目录下的target\classes目录下,即如
除此之外,maven还有很多其他常用的命令方式,比如:
*mvn test-compile //编译测试代码,比如编译test下的源文件,编译后生成的所有的class文件放在根目录下的target\test-classes目录下
*mvn test //运行应用程序中的单元测试,比如对以上的项目,测试生成的结果放在根目录下的target\surefire-reports目录下,
*mvn clean //清除目标目录中的生成结果 delete target,即会清除生成的target目录
*mvn package //依据项目生成 jar或者war/sar文件,比如对以上的项目,生成的包文件会放在根目录下的target\目录下的core-1.0.jar文件,这里要注意的是运行了mvn package命令以后,对于这之前的操作(包括mvn compile,mvn test-compile,mvn test)命令,都会自动运行
*mvn install // 在本地 Repository 中安装 jar或者war //,即将生成的jar或者war放在本地的Repository中,这里要说明的是,maven中默认的Repository是在C:\Documents and Settings\(当前系统用户的名称)\.m2\repository目录下,我们也可以人为的将它存放在指定的目录下,步骤是打开maven的安装目录,打开conf\下的settings.xml文件,修改其中的<localRepository>,比如将其修改为中间就是所要指定的目录,如对以上的项目,执行了mvn install项目后,不仅在根目录下生成target\目录,同时还会将生成的jar文件存放到Repository中,即E:/app/m2/repository中
*mvn site //生成项目相关信息的网站
mvn eclipse:eclipse //生成Eclipse 项目文件及包引用定义,注意,需确保定义Classpath Variables: M2_REPO,指向本地maven类库目录。执行完了后,就可以将源码项目导入elipse。
mvn eclipse:clean //清除Eclipse 项目文件及包引用定义文件。
如果想要跳过测试,则加上-Dmaven.test.skip=true参数,如:mvn install -Dmaven.test.skip=true。
3、mvn的运行简单机制
通过pom.xml来进行构建。 比如Pom.Xml以上项目中的pom.xml文件
<modelVersion> --描述这个POM文件遵从哪个版本的项目描述符;
<groupId> -- 针对一个项目的普贤遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分;比如以上的项目,生成的(java)源文件会放在根目录下的\target\classes\com\sunvalley\demo中,\com\sunvalley\demo便是这里<groupId>所唯一标识的;
<artifactId> -- 项目的通用名称
<packaging> -- 打包扩展名(JAR、WAR、EAR),举个例子jar,war,pom Plugings能够创建他们自己的包,包括包的类型;比如以上的项目生成的core-1.0.jar文件
<name> -- 当前项目的全称;
<version> --当前项目产生的artifact的当前版本;
<description> -- 当前项目的一个细节描述;
除此之外还有一些其它的元素,如<dependencies>
<dependencies>这个元素描述了所有与当前项目相关的依赖。
<dependencies>
<dependency> 可以配置多个相关的依赖
<groupId>activation</groupId> 所依赖组件的标识符
<version>1.0.1</version> 所依赖组件的版本
<properties> 所依赖组件的属性
<war.bundle.jar>true</war.bundle.jar>
</properties>
</dependency>
</dependencies>
比如以上项目中的
这是在以上项目中进行unit test所要用到的一个工具junit。groupId是该组件的标识符,artifactId表示该组件的通用名称,version表示该组件的版本,scope:用于限制相应的依赖范围,还有其他的几种范围如
compaile :默认范围,用于编译
runtime:在执行时,需要使用
test:用于test任务时使用
此外在<dependencies>中可以配置多个<dependency>,即多个组件的配置
4、Maven-proxy的使用
#maven-proxy的作用
maven-proxy是你访问maven仓库(repository)的代理,它可以连接多个maven仓库,但对你来说,你只需要知道maven-proxy就够了。
更重要的是,maven-proxy可以看作是maven仓库在你本地的缓存,这在团队开发的时候会节省下载jar包的时间。比如,你的团队有10个人,默认的情况下maven repository的服务器为 ,这个 可能访问很慢。开发中,10个人都需要分别连接 下载。现在你本地假设了一个maven-proxy B。所有的人都直接连接B。这样,只有第一个人在下载时,B会从 下载jar包,同时缓存,其他9个人只需要从B下载就够了。那么如何让B来访问 呢
#配置代理
##打开安装maven的目录下的conf目录下的settings.xml文件
##配置其中的<profiles>…</profiles>和<activeProfiles>…</activeProfiles>元素,如将它们配置为如下:其中的<url>就是服务器所在的url,注<profile>里的<id>与<activeProfiles>中的<activeProfile>对应。
##保存后,将配置好的settings.xml文件拷贝到本地的repository仓库的同级目录下,比如说放在E:\app\m2
##此时,重新启动该服务器,之后对以上的项目(从SVN下载下来的项目)进行打包,即如该项目放在E:\workspace\java\materias\poc\maven\core目录下,重新打开一个命令窗口,用cd命令转到该目录下,执行mvn compile即编译该项目的命令,此时会出现像如下的结果:
这说明已经成功的在服务器上download了文件oscache-2.4.jar,到这里就已经代理成功了,如要访问其它的服务器,只需在配置settings.xml文件的时候,服务器的全称改为此服务器的全称即可,如:
<url>的中间便是所要访问服务器的全称。
注:有关于服务器的设置请参看有关的附录。
5、解决Maven内存溢出的问题
找到文件
@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...
它的意思是你可以设置一些Maven参数,我们就在该行下面加入以下行:
set MAVEN_OPTS= -Xms256m -Xmx512m
上述设置表示Java堆得大小范围为256M-512M,经过上述设置之后,当再运行Maven命令如 mvn -version 的时候,你会看到如下的输出:
c:\>mvn -versionc:\>set MAVEN_OPTS= -Xms128m -Xmx512m.......
6、忽略失败
当你运行一个Maven构建的时候,它会包含一系列的项目,每个项目可以成功或者失败。你可以三种可选的失败模式:
mvn -ff
最快失败模式:Maven会在遇到第一个失败的时候失败(停止)。
mvn -fae
最后失败模式:Maven会在构建最后失败(停止)。如果Maven refactor中一个失败了,Maven会继续构建其它项目,并在构建最后报告失败。
mvn -fn
从不失败模式:Maven从来不会为一个失败停止,也不会报告失败。