Transcript Maven培训

Maven培训
 Maven简介
 Maven的特点
 Maven安装与配置
 Maven的使用
 Maven常见问题
 Maven的插件安装及使用
 Maven在Tiger项目中的使用
Maven简介


Maven是基于项目对象模型(POM),可以通过一小段描述信
息来管理项目的构建,报告和文档的软件项目管理工具。
如果你已经有十次输入同样的Ant targets来编译你的代码、
jar或者war、生成javadocs,你一定会自问,是否有有一个
重复性更少却能同样完成该工作的方法。Maven便提供了这
样一种选择,将你的注意力从作业层转移到项目管理层。
Maven项目已经能够知道如何构建和捆绑代码,运行测试,
生成文档并宿主项目网页.
Maven特点




Maven 的编译及所有脚本都基于POM(project object model)。
Maven 对所依赖的包有明确定义,如使用那个包,版本是多少,一目
了然。(备注:使用到的包会在pom.xml中配置)如:freemarker2.3.16.jar
Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央
仓库里,如jar,tld,pom,等。当编译的时候,maven会自动在仓库
中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载
到本地。
Maven有大量的重用脚本可以利用,如生成网站,生成javadoc,
sourcecode reference,等。
Maven安装










1、下载maven
版本:3.0.3
下载地址:http://maven.apache.org/download.html
2、安装maven
JDK:jdk1.6
2.1 解压缩apache-maven-3.0.3-bin.zip 到你想安装的位置,如
D:/software/。
2.2 设置Maven系统环境变量,M2_HOME=D:/software/maven-3.0.3。
2.3 添加Maven bin目录至系统环境变量PATH中,%M2_HOME%\bin。
2.4 确认Maven的安装:
cmd > mvn -version
提示Maven version 3.0.3即安装成功。
Maven的配置(project配置)









Maven home directory在windows中是C:\Documents and
Settings\username\.m2。
maven的配置可以分为三个级别:
3.1.project
在pom.xml中配置。project configuration只针对当前project有效。
3.2 .installation
在maven安装时配置。
3.3 .user
对指定用户的配置。user configuration可以在
${user.home}/.m2/settings.xml中指定。注:该文件不是必须的,当该文
件找不到时,maven会使用默认的配置。
关于该文件的具体配置可以参考:
http://maven.apache.org/ref/3.0.3/maven-settings/settings.html。
pom.xml文件基本配置














Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文
件包含了一组指令,这些指令告诉Maven如何构 建项目和包含哪些其它的特殊指令
(POM是“项目对象模型”的缩写)。在默认的情况下,Maven包含了JUnit的依赖以此
来鼓励单元测试。
xml 代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
</project>
Pom.xml中部分参数值说明


pom.xml 文件基本节点介绍
<project > :文件的根节点 .
<modelversion > : pom.xml 使用的对象模型版本 .
<groupId > :创建项目的组织或团体的唯一 Id.
<artifactId > :项目的唯一 Id, 可视为项目名 .
<packaging > :打包物的扩展名,一般有 JAR,WAR,EAR 等
<version > :产品的版本号 .
<name > :项目的显示名,常用于 Maven 生成的文档。
<url > :组织的站点,常用于 Maven 生成的文档。
<description > :项目的描述,常用于 Maven 生成的文档。









在 POM 4 中, <dependency> 中还引入了 <scope> ,它主要管理依赖的部署。
目前 <scope> 可以使用 5 个值:
compile :缺省值,适用于所有阶段,会随着项目一起发布。
provided :类似 compile ,期望 JDK 、容器或使用者会提供这个依赖。如 servlet.jar 。
runtime :只在运行时使用,如 JDBC 驱动,适用运行和测试阶段。
test :只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system :类似 provided ,需要显式提供包含依赖的 jar , Maven 不会在 Repository 中查找它。
Maven 的主要组件
(http://www.ibm.com/developerworks/cn/java/j-maven/)








项目对象模型
项目对象模型(Project Object Model,POM)描述项目的各个方面。尽管对于 POM 的物
理表示没有内在的限制,但 Maven 开发人员通常使用一个 XML 项目文件(project.xml)。
该 XML 文件格式由位于 Maven 安装目录中的 XML 模式(maven-project.xsd)定义。
通常,project.xml 文件由三个主要部分组成:
项目管理部分包括项目的组织、开发人员名单、源代码位置和错误跟踪系统 URL 等信息。
项目相关性部分包括关于项目相关性的信息。
项目构建和报告部分包含项目构建信息(如源代码目录、单元测试用例目录)和要在构建
中生成的报告。
Maven主要组件:
Maven的配置(本地Repository配置)
本地Repository的默认值是
${user.home}/.m2/repository/。可以在user
configuration(即在${user.home}/.m2/setting.xml)
中改变本地Repository。
 配置如下:<settings></settings>


<localRepository>/path/to/local/repo</localReposit
ory>
注意:本地Repository 必须是绝对路径。
Maven代理配置


3.5 配置代理
可以为http request配置代理。同样在user configuration中配置,配置如
下: <settings></settings> <proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>www.hc360.com</host>
<port>80</port>
<nonProxyHosts>local.net,some.host.com</nonProxyHosts>
</proxy>
详见:http://maven.apache.org/guides/mini/guide-proxies.html
Maven安全和部署配置

在一个project中,该项目将要使用哪个Repository,是在
<distributionmanagement></distributionmanagement>setti
ng.xml中指定的。然而,你却不能将用户名和 码以及其它的
安全设定也放在该project中。因此,你可能会在你自己的设
定中定义一个server,给它指定一个id, 该id
与project将要使用那个Repository相对应。 另外,有些
repository在下载时可能需要用户名和密码,这些也可以在
server element中以相同的方式指定。配置如下
<server>
<id>deploymentRepo</id>
<username>repouser</username>
<password>repopwd</password>
</server>
Maven的使用






Maven简单的管理功能如下:
生成项目 mvn archetype:create -DgroupId=com.myproject -DartifactId=myapp
工程名称为my-app
my-app
----src
----main
----java
----com
----myproject
----test
----java
----com
----myproject
mvn archetype:create -DgroupId=com.huawei.dbank.message DartifactId=dbank_message -DpackageName=com.huawei.dbank DarchetypeArtifactId=maven-archetype-webapp
Maven的常用命令(1)














Maven的运行命令为 : mvn ,
常用命令为 :
mvn archetype:create :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar
mvn eclipse:eclipse :生成 Eclipse 项目文件
生成项目
建一个 JAVA 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App
建一个 web 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app DarchetypeArtifactId=maven-archetype-webapp






生成 Eclipse 项目
普通 Eclipse 项目执行 : mvn eclipse:eclipse
Eclipse WTP 项目执行 : mvn eclipse:eclipse –Dwtpversion=1.0
( wtp1.0 以上版本均可用)
Maven常用命令(2)







mvn -Dtest package:组合使用goal命令,只打包不测试。
mvn jar:jar 只打jar包
mvn test -skipping compile -skipping test-compile 只测试而不编译,也
不测试编译
( -skipping 的灵活运用,当然也可以用于其他组合命令)
mvn eclipse:clean 清除eclipse的一些系统设置
maven是有生命周期这一概念的,也就是说如果你执行package,相应
的以前步骤,如compile,test等都会自动执行。
一般使用情况是这样,首先通过svn下载代码到本机,然后执行mvn
eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;
修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的
maven插件。
Maven的结构










定义自己的结构
新建一个 archetype 项目 :
mvn archetype:create\
-DgroupId=cn.prof\
-DartifactId=prof-archetype\
-DarchetypeArtifactId=maven-archetype-archetype
主要的模板文件 : archetype-resources/pom.xml
修改其中内容
修改 META-INF/maven/archetype.xml 中定义了相关的 sources
安装此项目 : mvn install
执行下面的命令创建新目录的项目:
mvn archetype:create -DgroupId=com.mergere.mvnbook \
-DartifactId=proficio-example\
-DarchetypeGroupId=com.xxx.mvn\
-DarchetypeArtifactId= prof-archetype \
-DarchetypeVersion=1.0-SNAPSHOT
Maven的目录说明(以maven2为例)
Maven常遇问题总结






1、在使用命令mvn eclipse:eclipse 之后,import到Eclipse,然后在
Eclipse项目上点右键,选择插件Maven>Enable Dependency
Management后,会报重复引用依赖的错误
解决办法 :先执行mvn eclipse:eclipse然后刷新Eclipse的项目,取消掉
maven插件的引用依赖,错误就会消除。
2、maven下载包的时候内存溢出:
mvn install 报错 java.lang.OutOfMemoryError: Java heap space
解决办法:
a. 修改 %M2_HOME%\bin\mvn.bat文件,增加虚拟机内存设置 set
MAVEN_OPTS= -Xms128m -Xmx512m
b. 可以在 mvn install 执行之前,先执行 set MAVEN_OPTS= Xms128m -Xmx512m
Maven常遇问题总结

3、执行mvn 时提示下面的内容:

问题分析:
在环境变量中配置了
MAVEN_OPTS=-XdebugXrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n
却没有Xdebug相关包。
解决办法:
删除环境变量中属性为MAVEN_OPTS 的变量
或者直接将MAVEN_OPTS变量的值设为空,即不设置。






Maven常遇问题总结

4、执行 mvn package 或 mvn install 命令报错:

assembling WAR: webxml attribute is required (or pre-existing WEBINF/web.xml if executing in update mode) As the WEB-INF dire。

问题分析:

错误提示的是web.xml文件缺少必要的属性。
解决办法:
在google中搜索后发现原来是mvn工程的目录有问题,web.xml 文件需要放在
main\webapp目录下,否则会找不到。将web.xml文件从WebContent\WEB-INF
目录中 移到main\webapp\WEB-INF目录下即可。


Maven常遇问题总结


当建立一个工程后,执行 mvn eclipse:eclipse ,建立一个
maven的工程,用eclipse打开后,发现报如下错误:
Unbound classpath variable:
'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project mywebapp ,这是因为在Eclipse 没有配置 M2_REPO 变量,
配置步骤:window >> preferences >> Java >> Build Path
>> Classpath Variables
新建一个 M2_REPO 的变量,变量值指向你系统的Maven
的数据仓库位置。
备注 :如果工程导入后,编译老是提示jar包找不到,则也
是此问题导致,按照上面的描述添加配置即可。
Maven插件安装





打开eclipse,找到Help->Install New SoftWare打开install
窗口,选择add Site输入Maven插件地址:
http://m2eclipse.sonatype.org/sites/m2e
Maven2完全使用手册
http://agapple.javaeye.com/blog/147304
Maven2的常用命令
http://guooo.javaeye.com/blog/280604
Maven2安装总结
http://hi.baidu.com/vhion/blog/item/7544a245b045e02ccefc
a31c.html
Maven在Tiger项目中的使用情况
---在培训时会细讲以下内容
 1.搭建公司自己的nexus插件仓库
 2.配置统一的${user.home}/.m2/setting.xml
 3.使用统一的tiger_parent/pom.xml管理版本
 4.使用filter管理开发,测试,生产机配置信息
 5.使用Profile管理个性化配置
 6.使用mavan运行单元测试
FAQ