<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.1</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
|
<repository>
<id>central</id>
<url>http://www.ibiblio.org/maven2</url>
</repository>
|
<repository>
<id>companyName</id>
<url>http:// ${ip}/maven</url>
</repository>
|
Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,当时从 Ant 移情 Maven 的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种 Report。这种方式为项目的构建带来了极大的方便,尤其是 Report 的。试想对于产生的 Junit-Report、JavaDoc、CheckStyle、PMD 等报告,如果没有一个统一的入口,每次切换目录是多么令人厌烦的事情!
Maven 无疑是相当成功的,这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven 取得成功的原因很简单:在简化构建脚本的同时,功能并没有缩水,反而有所增强;提供汇集项目信息的工具,并以相当友好的方式呈现;丰富的插件简化了工作。如此有力的工具出现,自然是争相使用。
如今 Maven2 已经推出,Maven 的官方网站称,Maven2 相对于 Maven1 是一个相当大的转变,甚至不惜牺牲兼容性来达到这一目的。(为了 Maven1 的用户着想,Maven1 仍在继续他的使命。)如此大的变动到底换来了什么样的结果?
比起 Maven1 那不急不慢的运行速度,Maven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色(当然,下载不算)。除此之外,"简化工作,使用业界公认的最佳实践"也是是 Maven2 的另一大主题,其他的新特性无处不在体现 Maven2 为简化工作而做出的努力。
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。
在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的官方网站上获取。
在Maven2中,编写plugin的语言由jelly变更为Java和BeanShell。Java在速度上更有优势,而且开发人员的熟悉程度更高。对于其他的流行脚本,如groovy,Maven的官方网站的意见是,等待其更成熟时再考虑
。好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。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,使这个经验在开发团队中得到普及。
创建标准目录模板,可以通过如下命令:
|
groupId和artifactId的含义与Maven1中的含义一样,参数artifactId的值会作为项目根目录的名字。除了建立相应的目录之外,Maven2还会创建缺省的pom.xml。
Maven2也考虑到:不同类型的项目需要拥有不同的目录结构。如创建web项目,可以使用命令:
|
在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。
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
<scope>的使用举例:
|
在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报告时会抛出如下异常:
|
幸运的是,Maven2一出现就备受关注,要不了多长时间,诸如此类的问题应该就会很快解决。
Maven2在Maven1的优势基础之上,又向前迈进了一大步。它提供的这些新特性大大地缩短了开发管理中的工作量,使得开发人员将精力集中在实际的业务问题上。而且这些新特性对于简化使用,普及最佳实践,也起到了积极的作用。
|
- Inserting non-standard build steps using preGoals and postGoals http://docs.codehaus.org/display/MAVEN/Maven2+Goal+Decoration
- Maven官方网站 http://maven.apache.org/
- Maven支持的依赖列表 http://www.ibiblio.org/maven2
- 在 Eclipse 中利用 Maven
-
项目管理: Maven 让事情变得简单
|
胡键,西安交通大学硕士,2000年毕业后一直从事软件开发。2002年开始使用Java,在平时的项目开发中经常采用OpenSource的工具,如Ant、Maven、Hibernate、Struts等,目前正在研究信息集成方面的规范和技术。可以通过jianhgreat@hotmail.com与他取得联系,或访问个人blog:http://blog.donews.com/foxgem/。 |
|
胡伟红,西安交通大学硕士,目前就职于IBM 区域合作伙伴支持中心。主要负责Websphere产品的支持。对开源的项目有很大的兴趣。可通过 huweih@cn.ibm.com 与她联系 |
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/it_man/archive/2006/10/23/1346604.aspx
相关推荐
Maven是Java开发中的一款强大的构建工具,它管理项目依赖、构建生命周期和工件发布。这里我们关注的是Maven 3.1和3.2版本的安装包和源码,以及...通过理解Maven的工作原理和熟练使用插件,你可以更有效地进行Java开发。
3. **README.txt**:提供了关于如何安装、配置和使用 Maven 的基本指南,是新用户快速上手的重要文档。 4. **boot**:这个目录包含了用于启动 Maven 的小型内嵌 Jetty 服务器,主要用于插件的自动下载和更新。 5. ...
Spring Boot 2带来了性能提升、新特性和对最新技术栈的支持,例如Spring Framework 5和Java 11。 ### 2. Maven 概述 Maven 是一个项目管理工具,用于构建、依赖管理和项目信息管理。它通过使用项目对象模型(POM)...
Maven是Java开发中的一个关键工具,它是一款项目管理和综合工具,极大地简化了构建、依赖管理和项目的生命周期管理。...通过理解和掌握Maven的工作原理及使用方法,可以显著提高开发效率,降低项目的维护成本。
本指南首先会介绍Maven的基本架构和安装步骤,让读者了解Maven的工作原理和环境配置。接着,将详细阐述POM的概念,包括POM的组成、依赖管理和继承、聚合等特性,帮助读者理解如何通过POM来管理项目配置和依赖关系。 ...
在本文中,我们将深入探讨Maven 3.6.3版本的关键特性、工作原理以及如何利用它进行项目构建。 **一、Maven 3.6.3 版本特点** 1. **性能提升**:Maven 3.6.3对内部算法进行了优化,提高了依赖解析和构建速度,降低...
### Windows环境下Maven...通过上述步骤,你不仅能够成功安装和配置Maven,还能深入了解Maven的基本工作原理及其在项目构建中的重要作用。如果遇到任何问题或有更深入的需求,欢迎继续探索Maven的相关文档或社区资源。
该版本修复了一些已知的问题,提升了稳定性和性能,同时也包含了一些新特性。尽管在发布时,Maven 已经更新到了3.8.1版本,但选择3.6.3版本的原因可能是考虑到与现有集成开发环境(IDE)如 IntelliJ IDEA 或 Eclipse...
本"maven分模块小demo"旨在展示如何利用Maven的多模块特性进行项目结构的组织和管理。下面将详细阐述相关知识点: 1. Maven多模块项目结构: Maven的多模块项目允许我们将大型项目分解为更小、更易于管理的部分,...
2. **错误修复**:解决了多个已知问题,提高了Maven的稳定性和兼容性。 3. **插件更新**:更新了内置插件,增强了其功能和错误处理能力。 4. **POM解析改进**:对POM文件的解析逻辑进行了优化,能更好地处理复杂的...
MAVEN包和插件是Java开发中的重要工具,主要用于项目构建和依赖管理。Maven是一个自动化构建工具,它遵循约定优于配置的原则,大大简化了Java项目的构建过程。在这个压缩包中,包含了几个与Maven相关的PDF文件,这些...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。Maven 使用一种标准化的项目对象...虽然现在已经有更新的版本,但对于学习和理解Maven的基本工作原理,3.2.3版本仍然是一个不错的选择。
了解和掌握 Maven 的基本概念和操作,可以帮助开发者更高效地管理 Java 项目,提升开发效率。如果你的项目依然依赖于这个版本,你可以继续使用提供的 `apache-maven-3.2.3` 压缩包,但请注意可能错过一些新版本带来...
总结,Apache Maven 3.9.6作为一款强大的项目构建工具,通过其POM、依赖管理和生命周期等特性,极大地简化了Java开发过程。无论是个人学习还是团队协作,Maven都是一个不可或缺的工具,值得深入了解和熟练掌握。
在“apache-maven-3.5.0”压缩包中,用户可以找到Maven的核心组件、插件和文档,以及源代码,这对于理解Maven的工作原理和进行定制化开发非常有帮助。下面将详细介绍Maven的一些关键知识点: 1. **POM (Project ...
`apache-maven-2.2.1.rar` 包含的是Maven 2.2.1版本的安装资源,这个版本发布于2009年,虽然相对较旧,但对于学习Maven的基本概念和工作原理仍然很有帮助。 MyEclipse 是一个集成开发环境(Integrated Development ...
在使用Maven 2.2.1时,需要注意的是,此版本可能存在已知的问题和安全漏洞,因此在新项目中推荐使用更现代的Maven版本,以获取更好的性能和更多的特性。不过,对于理解Maven的工作原理以及如何与旧项目兼容,这个...
内容概要:本文详细介绍了 Maven 的基本原理及其高级特性,包括构建工具的功能、依赖管理、项目信息聚合、坐标系统、生命周期、仓库管理、插件机制、多模块构建、属性配置、资源过滤和构建 profile。通过具体的 XML ...
### Maven 使用文档详解 #### Maven 简介与特点 ...对于初学者来说,理解 Maven 的工作原理及其命令行用法是非常重要的。随着对 Maven 的深入了解,开发者能够更好地利用 Maven 来优化项目构建流程,提升开发效率。