转载:http://www.ibm.com/developerworks/cn/opensource/os-maven2/
从 Ant 移情 Maven 的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种 Report。
试想对于产生的 Junit-Report、JavaDoc、CheckStyle、PMD 等报告,如果没有一个统一的入口,多么令人厌烦!
Maven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色。
"简化工作,使用业界公认的最佳实践"也是是 Maven2 的另一大主题
2. 更少的配置文件Maven1 和 Maven2 主要配置文件的对比:Maven1:project.xml、maven.xml、project.properties和build.properties。 Maven2:pom.xml和settings.xml。
配置在Maven2中存在两种级别:
用户级,针对操作系统登录用户而言。一般在$home/.m2/,对于windows用户,就是目录:C:/Documents and Settings/用户名/.m2/settings.xml。
全局级:一般在%M2_HOME%/conf/settings.xml,M2_HOME是Maven2的根目录环境变量名。 在settings.xml中可以配置,如本地Repository、proxy等等。
3. Plugin语言更换在Maven2中,编写plugin的语言由jelly变更为Java和BeanShell。
4. 提供预定义的目录模板好的目录结构可以使开发人员更容易理解项目
创建标准目录模板,可以通过如下命令:mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons groupId和artifactId的含义与Maven1中的含义一样,参数artifactId的值会作为项目根目录的名字。Maven2还会创建缺省的pom.xml。Maven2也考虑到:不同类型的项目需要拥有不同的目录结构。如创建web项目,可以使用命令:mvn archetype:create -DgroupId=com.mycompany.app-DartifactId=my-webapp-DarchetypeArtifactId=maven-archetype-webapp
5. 生命周期的引入在Maven2中有了明确的生命周期概念。主要的生命周期阶段:
validate,验证工程是否正确,所有需要的资源是否可用。
compile,编译项目的源代码。
test-compile,编译项目测试代码。
test,使用已编译的测试代码,测试已编译的源代码。
package,已发布的格式,如jar,将已编译的源代码打包。
integration-test,在集成测试可以运行的环境中处理和发布包。
verify,运行任何检查,验证包是否有效且达到质量标准。
install,把包安装在本地的repository中,可以被其他工程作为依赖来使用 deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
generate-sources,产生应用需要的任何额外的源代码,如xdoclet。 如果要执行项目编译,那么直接输入:mvn compile即可,。
阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。
6. 新增Dependency Scope在POM 4中,。目前可以使用5个值:compile,缺省值,适用于所有阶段,会随着项目一起发布。 provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 的使用举例:hibernatehibernate3.0.3test 7. 传递依赖,简化依赖管理在Maven1中,需要把依赖所需要的包也一并列出。这对于使用类似如Hibernate的用户来说所操的心太多了,而且也不方便。在Maven2中实现了传递依赖,如此对于Hibernate所依赖的包,Maven2会自动下载,开发人员只需关心Hibernate即可。注意:只有得到Maven支持的依赖,通常是plugin形式出现,才能获得这个特性。而且对于一些老的plugin,可能由于时间的关系不支持传递依赖。如至少在Maven 2.0.1中,对于Hibernate 2.1.2,仍然需要显式列出Hibernate 2.1.2所依赖的包。
简介安装Maven2的步骤非常简单:
首先从Maven官方网站下载相应的软件包,目前是Maven 2.0.1;然后解压,并设置环境变量M2_HOME
Maven2的运行命令是mvn,使用mvn -h可以获得相关的帮助信息。
常用情形:创建Maven项目:mvn archetype:create
尤其是Report部分的plugin,有的是因为目前还没有,如junit-report。有的则是一些莫名其妙的问题,如checktyle和pmd,在本地locale下都无法正常工作。