Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,当时从 Ant 移情 Maven 的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种 Report。这种方式为项目的构建带来了极大的方便,尤其是 Report 的。试想对于产生的 Junit-Report、JavaDoc、CheckStyle、PMD 等报告,如果没有一个统一的入口,每次切换目录是多么令人厌烦的事情!
Maven 无疑是相当成功的,这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven 取得成功的原因很简单:在简化构建脚本的同时,功能并没有缩水,反而有所增强;提供汇集项目信息的工具,并以相当友好的方式呈现;丰富的插件简化了工作。 如此有力的工具出现,自然是争相使用。
新特性
如今 Maven2 已经推出,Maven 的官方网站称,Maven2 相对于 Maven1 是一个相当大的转变,甚至不惜牺牲兼容性来达到这一目的。(为了 Maven1 的用户着想,Maven1 仍在继续他的使命。)如此大的变动到底换来了什么样的结果?
1. 更快、更简单
比起 Maven1 那不急不慢的运行速度,Maven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色(当然,下载不算)。除此之外,"简化工作,使用业界公认的最佳实 践"也是是 Maven2 的另一大主题,其他的新特性无处不在体现 Maven2 为简化工作而做出的努力。
2. 更少的配置文件
Maven1 和 Maven2 主要配置文件的对比:
- Maven1:project.xml、maven.xml、project.properties和build.properties。
- Maven2:pom.xml和settings.xml。
POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升级为4。对于项目,一般只需要pom.xml就行了。
在Maven2中不需要也不提倡使用maven.xml,原因如下:
- plugin的易用性的增强。
- 散布于maven.xml中的内容难以在不同项目间共享,也不利于维护。在Maven2中建议使用自定义的plugin来封装这些内容。
如果仍期望能够使用类似maven.xml的功能,如
<pregoal>,请参考Inserting non-standard build steps using preGoals and postGoals。</pregoal>
在Maven2中,配置使用settings.xml,它取代了原有的project.properties和build.properties。配置在Maven2中存在两种级别:
- 用户级,针对操作系统登录用户而言。一般在$home/.m2/,对于windows用户,就是目录:C:\Documents and Settings\用户名\.m2\settings.xml。
- 全局级:一般在%M2_HOME%/conf/settings.xml,M2_HOME是Maven2的根目录环境变量名。
在settings.xml中可以配置,如本地Repository、proxy等等,关于settings.xml的结构可以从Maven的官方网站上获取。
3. Plugin语言更换
在Maven2中,编写plugin的语言由jelly变更为Java和BeanShell。Java在速度上更有优势,而且开发人员的熟悉程度更高。对于其他的流行脚本,如groovy,Maven的官方网站的意见是,等待其更成熟时再考虑
。
4. 提供预定义的目录模板
好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:
使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例:
- src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
- src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
这些动作在 Maven1 中,是需要在 maven.xml 中使用<pregoal>或<postgoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src和 test都使用resources,方便构建和测试,这种方式本就已是前人的经验。通过使用Maven2,使这个经验在开发团队中得到普及。</postgoal></pregoal>
创建标准目录模板,可以通过如下命令:
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中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:</scope></scope></dependency>
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
<scope>的使用举例:</scope>
<dependency> <groupid>hibernate</groupid> <artifactid>hibernate</artifactid> <version>3.0.3</version> <scope>test</scope> </dependency>
|
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的解压安装目录;最后将%M2_HOME%/bin添加到path中,方便Maven在任何目录下运行。
Maven2的运行命令是mvn,使用mvn -h可以获得相关的帮助信息。常用情形:
- 创建Maven项目:mvn archetype:create
- 编译源代码:mvn compile
- 编译测试代码:mvn test-compile
- 运行测试:mvn test
- 产生site:mvn site
- 打包:mvn package
- 在本地Repository中安装jar:mvn install
- 清除产生的项目:mvn clean
或许是由于刚刚推出的缘故,Maven2目前还是有一些不尽如人意的地方。尤其是Report部分的plugin,有的是因为目前还没有,如 junit-report。有的则是一些莫名其妙的问题,如checktyle和pmd,在本地locale下都无法正常工作。以pmd举例,在产生 PMD报告时会抛出如下异常:
java.util.MissingResourceException: Can't find bundle for base name pmd-report, locale zh_CN at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle .java:839) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:808) at java.util.ResourceBundle.getBundle(ResourceBundle.java:702) ……
|
幸运的是,Maven2一出现就备受关注,要不了多长时间,诸如此类的问题应该就会很快解决。
结论
Maven2在Maven1的优势基础之上,又向前迈进了一大步。它提供的这些新特性大大地缩短了开发管理中的工作量,使得开发人员将精力集中在实际的业务问题上。而且这些新特性对于简化使用,普及最佳实践,也起到了积极的作用。
分享到:
相关推荐
Maven2 的新特性.7z 文档选项 打印本页 将此页作为电子邮件发送 级别: 初级 键 胡 (jianhgreat@hotmail.com), 西安交通大学硕士 伟红 胡 (huweih@cn.ibm.com), 工程师,IBM 区域合作伙伴支持...
**Maven2的新特性** 1. **多模块项目管理**:Maven2引入了聚合项目(Aggregation)的概念,可以管理多个子项目,使得大型项目管理更加方便。 2. **更强大的POM**:POM在Maven2中得到了增强,支持继承和依赖管理。...
标题“maven2离线安装包”指的是针对Maven 2的不依赖网络环境的安装包,主要用于在没有互联网连接或者网络环境不稳定的情况下安装和使用Maven。Maven是一个项目管理和综合工具,它简化了Java项目的构建、依赖管理和...
然而,Eclipse本身并不直接支持Maven的特性,这就需要Maven 2 Eclipse Plugin来填补这一空白。安装此插件后,Eclipse用户可以直接在IDE内创建、导入、管理和构建Maven项目,无需离开IDE进行命令行操作。 Maven 2 ...
【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...
- 设置新的环境变量`M2_HOME`,其值为`d:\maven2`。 - **验证安装**:在命令行输入`mvn -v`,如果正确显示了Maven的版本信息,则表示安装成功。 #### 三、配置Maven2 - **配置文件位置**:Maven的配置文件有两个...
maven2的eclipse插件 for eclipse 3.5+。 插件安装时,我们只需在eclipse根目录下新建一个【links】目录,然后在里面创建【.link】扩展名的文件,在里面写上类似于【path=F:\\IDE\\eclipsePlugin\\maven2】这样的...
【Maven 2 详细教程】是一份专为开发者准备的指南,旨在详细介绍Apache Maven 2的使用方法和核心概念。Maven 2是一个强大的构建工具,尤其在处理大型、多模块的Java项目时,能够简化构建过程和依赖管理。在现代软件...
maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新 maven3.5最新
maven2之m2eclipse使用手册.doc
Maven 的核心特性之一是它的构建生命周期。Maven 定义了一系列的构建阶段,这些阶段按照一定的顺序执行,每个阶段都有特定的任务和功能。主要的构建生命周期包括: - **Clean Lifecycle**: 清理项目的构建目录。 - ...
** Maven 最新版本详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。它通过标准化项目构建过程,...无论你是新手还是经验丰富的开发者,理解 Maven 的核心概念和最新特性都是至关重要的。
**Maven 3.5.2 的特性** 1. **性能提升**: Maven 3.5.2对缓存机制进行了优化,提高了构建速度,减少了不必要的网络请求。 2. **更好的错误报告**: 提供更清晰的错误信息和堆栈跟踪,帮助开发者更快地定位问题。 3...
7. **Maven 3.5.3 的新特性与改进** - Maven 3.5.3 版本可能包括对之前版本的bug修复,性能优化,以及对Java新版本的支持等。 - 它可能增强了对多模块项目和大型项目构建的处理能力,提高了构建速度和稳定性。 8....
Maven2 是一个强大的项目管理和构建工具,它主要应用于Java开发领域,尤其在Web开发中扮演着重要角色。Maven通过自动化构建过程,包括编译、测试、打包、部署等步骤,大大简化了项目的管理工作。与Eclipse中的Maven...
支持maven2 maven3 通用版本eclipse插件,在maven官网下载apache-maven-3.2.1-bin.zip,解压插件压缩包到path=D:\m2e-0.12.0.20101115-1102 在eclipse新建links文件夹,新建文件maven23.link,内容为:path=D:/m2e-...
Maven 的最新版本通常包含了最新的特性和修复,以确保开发人员可以利用最新的技术进行开发。 在描述中提到的下载链接是一个博客文章,它提供了Apache Maven的安装指南。尽管此处没有提供具体的版本信息,但一般来说...
maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包 maven2 jar包
标题 "maven2 eclipse" 暗示了我们要讨论的是如何在 Eclipse 集成管理 Maven 项目。这篇博文可能是关于如何将 Maven 2.x 集成到 Eclipse 开发环境中,以便更有效地构建和管理Java项目。Maven 是一个项目管理和综合...