以Maven2.0.9版本为例,在win xp环境下安装及创建第一个简单的工程,获得对maven最初步的实践经验。主要参考了Maven官方网站提供的5分钟快速入门手册。
maven 主页
http://maven.apache.org/
1》下载maven
http://maven.apache.org/download.xml,下载windows下的zip文件 apache-maven-2.0.9-bin.
2》安装
详细安装步骤请参考下载页面的原始说明,下面只是一个概要总结
0.前提: JRE已经安装,版本在1.4以上
1.解压zip文件到需要安装的目录下,比如c:/,则解压并生成c:/zipapache-maven-2.0.9
此目录为maven的根目录
2.系统环境变量中添加
M2_HOME ,值为c:/zipapache-maven-2.0.9
M2, 值为%M2_HOME%/bin
更新Path, 添加 %M2% 到Path值中
可选参数 MAVEN_OPTS,值为 -Xms256m -Xmx512m
3.测试是否安装成功
mvn --version ,该命令执行后有详细的版本信息打印,则表示前面的安装已经成功
3》maven安装目录的初始内容
初始内容很少,只有一个jar文件位于lib下。
maven的很多jar文件都是在后继步骤中从internet上自动download下来的
dir 当前安装目录内容为:
<DIR> .
<DIR> ..
<DIR> bin
<DIR> boot
<DIR> conf
<DIR> lib
LICENSE.txt
NOTICE.txt
README.txt
4》创建自己的第一个项目
参考Get start in 5 minutes快速入门手册: http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
以创建项目 my-app为例,执行命令mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app1
此过程中,Maven会花相当长的时间从网上自动download 其创建project所必须的jar文件。如果网络状况不好,该命令会因超时自动终止,并报告错误,比如
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-invoker
/2.0.6/maven-invoker-2.0.6.jar
24K downloaded
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
1) xml-apis:xml-apis:jar:1.0.b2Try downloading the file manually from:
http://www.apache.org/dist/xml/commons/binaries/xml-commons-1.0.b2.tar.gzThen, install it using the command:
mvn install:install-file -DgroupId=xml-apis -DartifactId=xml-apis -Dversio
n=1.0.b2 -Dpackaging=jar -Dfile=/path/to/file
表面看是由于文件找不到而出错,实际上多数情况下是因为文件下载超时。建议重新执行命令,maven会继续下载文件。有时候要反复多次,才能把所需的文件都下载回来。这些文件都存放在 <user home>/.m2/repository目录下 (因为之前没有重新配置repository的路径,直接用的是缺省路径。如何配置maven,请参考http://maven.apache.org/guides/mini/guide-configuring-maven.html)。
命令成功的标志是
1)命令执行结束并打印信息如下
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
2)对应的my-app1目录树被创建
my-app1
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
App.java 是自动生成的简单程序,可以打印Hello World
5》Build 工程
在my-app目录下执行命令 :mvn package
这次又花了很长时间download 一些jar包,比如junit jar,codehaus jar等,时间的长短取决于网络连接的状况。
mvn package 实际包含了如下子过程:
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to C:/MavenProj/my-app1/target/classes
[INFO] [resources:testResources]
................
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to C:/MavenProj/my-app1/target/classes
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
.................
[INFO] [compiler:testCompile]
[INFO] Compiling 1 source file to C:/MavenProj/my-app1/target/test-classes
[INFO] [surefire:test]
[INFO] Surefire report directory: C:/MavenProj/my-app1/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.125 secResults :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
.........
[INFO] [jar:jar]
[INFO] Building jar: C:/MavenProj/my-app1/target/my-app1-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21 minutes 29 seconds
[INFO] Finished at: Fri Sep 19 21:33:11 CST 2008
[INFO] Final Memory: 7M/12M
[INFO] ------------------------------------------------------------------------
到命令执行结束居然费时21分钟之久。当然,第二次执行mvn package速度就很快了,一般几秒即可。原因是所有需要的jar文件都在第一次执行时下载到本地,只需执行目标任务package。
package结束后,my-app下会新生成一个target目录
target
├─classes
│ └─com
│ └─mycompany
│ └─app (java文件生成的class)
├─maven-archiver
├─surefire-reports (Junit用例的测试报告)
└─test-classes
└─com
└─mycompany
└─app (test 文件的class)
6》Maven 的几个执行阶段
validate: 验证project是正确的,并且所有必需的信息都是可用的
compile: 编译代码及测试用例代码
test: 使用测试框架(如Junit)进行测试
package: 安装要求的格式对class进行打包,如JAR.
integration-test: 如有必要,可对打好的包需要被部署到特定的环境中做集成测试
verify: 执行并验证当前的包是正确的,并能满足质量要求
install: 将包存放到本地repository中,供其他有需要的本地projects使用
deploy: 拷贝最后生成的包到其他机器上,以便有需要的远地project使用。用于项目的发布和集成
可以根据特定的目的选取不同的阶段执行
7>> 小技巧
1) 如何从Maven的服务器更快的下载所需文件?
答案是配置一个网络访问速度更快的镜像服务器。
在中国的用户,可以按照如下方式修改<user home>/.m2/setting.xml的配置:
<mirror>
<id>redv.com</id>
<url>http://mirrors.redv.com/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- China, Shanghai -->
</mirror>
如此一来,所以的文件下载都可以通过访问在上海的镜像服务器来完成,速度要比访问国外的服务器(如http://repo1.maven.org/maven2/)快上很多倍。
具体的参数意义请参考http://maven.apache.org/guides/mini/guide-mirror-settings.html
2) 无法通过Maven库服务器获取的JavaMail,JSP jar
由于JavaMail等项目遵循Sun's Binary License,不允许Maven的库服务器提供下载分发服务,因此,我们不得不到其它网站去下载这些文件,然后手工安装到本地的repository目录下。
安装命令如下:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> /
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
关于这些有特殊要求的Sun Jars,请参考maven提供的声明文档 http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html