1.1准备
(1) eclipse中使用jdk1.5,不要使用jre,环境变量java_home也要使用1.5。
(2) 安装maven。
解压缩apache-maven-2.0.9.zip到%M2_HOME%,
比如:D:\software\\apache-maven-2.0.9,在环境变量中增加M2_HOME,在path中添加:“%M2_HOME%\bin” 。
(3) 在开发环境中安装m2插件。
ü Eclipse: 直接将共享的m2eclipse插件拷贝到eclipse安装目录对应的plugin和features目录下。
ü myEclipse: myEclipse6.5自带了maven4myeclipse,但由于bug超多,在安装之前需要先卸载,手工删除MyEclipse安装目录下myeclipse/eclipse/features和myeclipse/eclipse/plugins这两个目录下与maven相关的文件,可以先在这2个目录中搜索一下,带有“maven” 的文件和文件夹全部删除即可,然后再拷贝插件到plugin和features目录下。
ü 如果需要自行下载m2插件安装,步骤为:help->soft ware updates->find and install->search new features to install->new remote site,name名称输入“maven”,URL为:“http://m2eclipse.sonatype.org/update/”。 注意:如果查找到多个“maven_embedder 2.1.0.20080530-2300”,只能选择其中一个,否则可能出现安装的插件不可用的错误。
(4) 设置“M2_REPO 变量”
ü window >> preferences >> Java >> Build Path >> Classpath Variables,新建一个 M2_REPO 的变量,变量值指向自己本地数据仓库位置。例如D:/myRepository/repository。
(5) 将工程导入eclipse中,注意eclipse中的setting.xml与安装maven后conf目录下的setting.xml不同,maven有2种级别的setting.xml:
ü %M2_HOME%/conf/settings.xml,这是针对该部电脑的所有用户的profiles,是global profiles,它会影响所有的maven project build
ü <your -home-directory>/.m2/settings.xml,这是针对每个用户的profiles,是user级的profiles,它会影响当前用户的所有maven project build。
ü 将共享的setting.xml拷贝到如图所示的位置中:<your -home-directory>/.m2/settings.xml。修改settings.xml 中localRepository的值为自己的存储位置。
(6) 向setting.xml配置所指定的repository目录中拷贝maven插件。(目前这些插件没有上传到111.74机器,后续如果跟cmp使用同一个私服的话,使用时会自动下载。)
(7) 在工程所在的目录中使用cmd,敲入 mvn compile,进行编译,并下载工程依赖的jar包。(jar包较多,需要下载一段时间。)
如果需要经常使用cmd运行maven命令,建议在右键菜单中增加“cmd”,具体方法为:
ü 打开“我的电脑”,点击菜单中的“工具”-“文件夹选项”,选择“文件类型”,找到“(无)资料夹”,点“高级”,“新建”,在“操作”中填入 “CMD”(其实爱填什么都可以),“用于执行操作的应用程序”中填入“cmd.exe /k cd %1”,确定。
1.2配置setting.xml
1.2.1指定本地仓库,localRepository如下设置:
<localRepository>D:/myRepository/repository</localRepository>
位置根据自己的存储情况而定,这个位置要跟1.1的第四步设置的路径相同。
1.2.2指定私服,下载jar包。
1.<offline>false</offline>
2.设置profile构建环境。
<profiles> …… <profile> <id>artifactory</id> <repositories> <repository> <id>ext-releases-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>ext-snapshots-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>plugins-releases-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>plugins-snapshots-local</id> <url>http://10.164.111.74:8082/artifactory/repo</url> <releases> <enabled>false</enabled> </releases> </pluginRepository> </pluginRepositories> </profile> <profiles>
3.最后激活该profile。
<activeProfiles> <activeProfile>artifactory</activeProfile> </activeProfiles>
4.附profile配置说明:
< profiles >:我们可以在profile中定义一组我们需要使用的私服上仓库 <profiles> <profile> <id> artifactory</id> <!--profile的ID--> <repositories> <repository> <id> ext-snapshots-local</id> <!--仓库的id,对应与私服上的Local或Remote仓库--> <name>pmp remote snapshot repository</name> <!--该仓库的描述--> <url>http://10.164.79.191:8081/artifactory/libs-snapshots</url> <!--该仓库的地址--> <snapshots> <!-- snapshot项--> <enabled>true</enabled> <!--true表示该仓库处理snapshot类型的构件--> <updatePolicy>always</updatePolicy> <!--这里可取值为:always(一直),daily(默认,每日),interval:X(这里X以分钟为单位的时间间隔),或者never(从不)。--> <!--Tips:对于snapshot,建议设置为always,它可以保证引用的snapshot版本的构件自动更新--> </snapshots> <releases> <!--release项目--> <enabled>false</enabled> <!--false表示该仓库不处理Release型的构件--> </releases> </repository> </repositories> </profile> </profiles>1.2.3 如果是代理上网,需设置代理。
如果需要自动下载internet上的jar包,按照如下进行设置。
注意,如果使用:mvn deploy命令部署工程,则需要注释掉该段代码,否则出现http504错误。
<proxies> <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <host>proxycn2.huawei.com</host> <port>8080</port> <nonProxyHosts>local.net,some.host.com</nonProxyHosts> </proxy> </proxies>1.2.4 设置私服的登陆信息。
如果不进行设置,会出现如下错误:
Error deploying artifact: Failed to transfer file: http://10.164.111.74:8082/artifactory/*.jar. Return code is: 401。
配置用户密码:
<servers>
<server>
<id>artifactory</id>
<username>admin</username>
<password>password</password>
</server>
</servers>
……
<repository>
<id>internal-artifactory</id>
<url>http://10.164.111.74:8082/artifactory/repo</url>
</repository>
1.3 Maven常用命令
maven定义的主要生命周期:
validate: 验证项目是否正确以及相关信息是否可用。
compile: 编译。
test: 通过junit进行单元测试。
package: 根据事先指定的格式(比如jar),进行打包。
integration-test: 部署到运行环境中,准备进行集成测试。
verify: 对包进行有效性性和质量检查。
install: 安装到本地代码库。
deploy: 在集成或发布环境,将包发布到远程代码库。
常用命令:
ü mvn archetype:create -DgroupId=com.huawei.bme -DartifactId=test –Dversion=1.0
创建普通应用项目
ü mvn archetype:create -DgroupId=com.huawei.bme -DartifactId=testWeb -DarchetypeArtifactId=maven-archetype-webapp
创建WEB项目
ü mvn eclipse:eclipse
生成 Eclipse 项目文件及包引用定义,注意,需事先定义Classpath Variables: M2_REPO,指向本地maven类库目录。
ü mvn compile
编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,可能会比较费时。
ü mvn test-compile
编译测试代码,compile之后会生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下。
ü mvn test
运行应用程序中的单元测试
ü mvn site
生成项目相关信息的网站,发布站点在target/site里。
ü mvn clean
清除目标目录(target)中的生成结果。
ü mvn package
依据项目,打包类型为jar的,在目录target中就会生成 jar 文件,打包类型为war的,生成 war 文件,打包之前会进行编译,测试。
ü mvn install
在本地 Repository 中安装 jar。
ü mvn deploy
在远程 Repository 中发布。
ü mvn install -DskipTests=true
忽略单元测试,在本地 Repository 中安装 jar。
ü mvn eclipse:clean
清除 Eclipse 项目文件及包引用定义
ü mvn install:install -file -Dfile=D:/opensource/dbunit-2.2/dbunit-2.2.jar -DgroupId=dbunit-DartifactId=junitperf -Dversion=2.2 -Dpackaging=jar
发布到本地仓库
ü mvn deploy:deploy -file -DgroupId=staticComparison -DartifactId=static-comparison -Dversion=2.0 -Dpackaging=jar -Dfile=c:/staticComparison_2.0.jar
发布到远程仓库
ü mvn help:describe -Dplugin=compiler -Dmojo=compile –Dfull
列出Compiler 插件的compile 目标的所有信息
ü pom: mvn help:effective-pom
查看实际使用的pom
ü mvn dependency:analyze
分析项目依赖
1.4 FAQ
1.4.1创建maven 工程时报找不到“RELEASE”版本的插件错误
当使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app来创建一个新项目时,有时候会出现以下错误:
。。。。。。。
[INFO] Velocimacro : initialization complete.
[INFO] Velocity successfully started.
[INFO] [archetype:create]
[INFO] Defaulting package to group ID: com.mycompany.app
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO]
------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
GroupId: org.apache.maven.archetypes
ArtifactId: maven-archetype-quickstart
Version: RELEASE
Reason: Unable to determine the release version
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.maven.archetypes
-DartifactId=maven-arch
etype-quickstart \
-Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file
……
由于在maven本地仓库中,可能更新了某个plug-in的版本,但本地plug-in 的metadata没有版本的信息或者没有最新版本的信息,致使maven无法下载正确的版本。具体步骤如下:
1.找到最新的插件版本,如果私服上没有,则需要在网上下载,网址:http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/
2.选择最新版本并且下载最新的“maven-archetype-quickstart-1.0-alpha-4.jar ”文件
3.安装这个archetype到maven本地仓库。使用命令如下:mvn install:install-file -DgroupId=org.apache.maven.archtypes -DartifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是刚下载的文件的路径。
1.4.2 Deploy时出现: http502、 504错误
网关错误, 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答, deploy时需要向私服上传release或snapshot版本的归档包,所以出现该错误时要先检查是否可以连接到私服。 如果setting.xml中设置了<proxies> <proxy>…… </proxy></proxies>代理,要取消。
1.4.3 Deploy时出现: code 401错误
错误描述为:
Error deploying artifact: Failed to transfer file: http://10.164.111.74:8082/artifactory/*.jar. Return code is: 401。
参照1.2.4设置私服登陆信息。
1.4.4 mvn eclipse:eclipse 导入工程后出现:Unbound classpath variable: M2_REPO 错误
建立一个工程后,执行 mvn eclipse:eclipse,会产生eclipse的工程文件,但是第一次用eclipse打开工程后,发现报如下错误:Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project my-webapp ,需要在Eclipse 中配置 M2_REPO 变量。
配置步骤:window >> preferences >> Java >> Build Path >> Classpath Variables,新建一个 M2_REPO 的变量,变量值指向你系统的Maven2的数据仓库位置。例如前面提到了D:/myRepository/repository