`

用 Maven 做项目管理

阅读更多

本文转载于:http://www.blogjava.net/pesome/archive/2006/09/21/71045.html

如有侵权,请及时告知,谢谢

Java世界中我们很多的开发人员选择用 Ant来构建项目,一个 build.xml能够完成编译、测试、打包、部署等很多任务,但我们也碰到了很多的问题,如 jar文件管理混乱,各个项目结构和 build.xml相差很大等等。而 Maven的出现,给项目提供了更多的支持。

1        简介

Maven 作为 Apache 的一个开源项目,旨在给项目管理提供更多的支持,主页地址为 http://maven.apache.org 。它最早的意图只是为了给 apache 组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。很多伟大的事业,出发点都很简单, ebay 就是很好的例证。而 maven 的成功又一次验证了这一点,越来越多的项目开始使用 maven

基本原理

Maven 的基本原理很简单,采用远程仓库和本地仓库以及一个类似 build.xml pom.xml ,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar ,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝 jar 。如图 1 。同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以 maven 下载很小( 1.1M ),在执行 maven 任务时,才会自动下载需要的插件。

这个基本原理与 Pear ――PHP扩展与应用库( the PHP Extension and Application Repository )的原理非常相似,都有一个官方的仓库,都是微内核,通过网络将需要的文件下载到本地,通过官方仓库将相应的类库进行统一管理。 Pear 已经成为 PHP 开发事实上的标准,而 Maven Java 世界的地位也逐渐加强,成为标准指日可待。

另外由于插件的易开发性,现在有了非常多的可供选择的插件,如与 eclipse 结合的插件,与 test 相关的插件,后面我们结合 maven 在项目中的使用进行详细介绍。


1

2        项目管理

Maven 官方把 maven 定义为一个项目管理工具,我们不妨看看 maven 能给我们的项目提供哪些好的支持。

2.1       项目标准化

Maven 一个重要特性是定义了项目的标准模板,官方说法是最佳实践。可以通过命令: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app 创建一个单一的 maven 项目。创建好的项目,具有了特定的项目结构。这个项目结构是参考业界的最佳实践而成,为后面使用统一的 maven 命令打下了基础,如测试 mvn test 、打包 mvn package 等,无需写一行脚本,就可以方便的实现众多功能。 Maven 还提供其它一些类型模板,可以通过添加 -DarchetypeArtifactId= type }创建,如 -DarchetypeArtifactId=maven-archetype-site ,生成 site 类型的项目。

同时一些好的开源软件使用了 maven ,也能作为很好的项目模板,如 Equinox Appfuse 的简化版),它的 pom 定义了对 hiberante,spring… 的依赖,可以通过 ant new -Dapp.name=NAME 快速生成项目原型,然后对 pom 文件进行裁减,以符合自身项目的需要。

有了这个标准,项目间能方便的进行交流,你也很容易了解其它使用 maven 项目的结构。对于企业来说,引入 maven 就自然引入了规范,这可比费时费力的写文档,定规范有效的多了。

2.2       文档和报告

使用 mvn site 可以快速生成项目站点, apache 很多开源项目站点都采用 maven 生成,会出现 built by maven 字样的图标。

maven 提供的针对如 junit checkstyle pmd 等的插件,能够方便的进行测试和检查并能直接生成报告。使用都很简单,如 mvn surefire-report:report 就能自动进行 junit 测试,并生成 junit 报告, mvn pmd:pmd 生成 pmd 报告。具体使用可以在 http://maven.apache.org/plugins/index.html 找到。

2.3       类库管理

Maven 一个很重要的特色就是类库管理。通过在 pom.xml 中定义 jar 包版本和依赖,能够方便的管理 jar 文件。以下是一个简单的 jar 定义片断:

<dependency>                                                                      

      <groupId>org.hibernate</groupId>

      <artifactId>hibernate</artifactId>

      <version>3.1</version>

      <type>jar</type>

      <scope>runtime</scope>

  </dependency>

这个片断告诉我们,依赖的 jar groupId org.hibernate artifactId hibernate ,版本为 3.1 scope runtime 。在实际项目中,会将 M2_REPO(maven 本地仓库地址 )/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar 放入 classpath

同时 maven 会通过 pom.xml 管理 jar 包间的依赖。比如上面的 hibernate-3.1.jar 同级目录肯定会有一个 hibernate -3.1.pom ,在这个 pom 文件中指定了这个 jar 对其它一些 jar 的依赖。而这个 pom 文件是远程仓库提供,无需进行修改,执行 maven 相关命令就会自动根据相关依赖去下载 jar 包。这样只需定义对 hibernate 的依赖而无需关心相关 jar ,在构建项目上方便了很多。

因为 pom 文件对 jar 的管理,也产生了一个很吸引人的特性:项目文件很小。以往一个 web 项目中, jar 文件都要放入 WEB-INF/lib 下,并放入 cvs(svn) 中,很容易就达到几十 M 。而通过 maven ,只需一个 pom.xml ,在执行 mvn eclipse:eclipse 时再去远程仓库下载,项目文件一般只需几百 K

2.4       发布管理

使用 maven 可以方便的进行项目发表管理。在项目开发到一定阶段,可以使用 mvn package 打包,它会自动先运行 mvn test ,跑所有的 testcase ,只有全部通过才能正确打包。生成的 war 包(如果项目的 packaging war )在 target 目录下。这个 war 包与使用 ant 脚本生成一样,但无需一行脚本,这也是 maven 对比 ant 的优势之一。使用 mvn install 将编译和打包好的文件发布到 distributionManager 指定的远程 repository 。使用 mvn deploy 可以自动管理项目版本。

 

3         使用 maven

Maven 使用简单,插件丰富且经过大量项目考验,在项目中引入的风险很小。笔者在项目中使用 maven ,新进员工在半小时内就能成功使用 maven 构建项目,并很快掌握几个常用的命令。 Maven 也不需要什么特殊的设施。如果项目全部使用开源软件,并且不需要 maven 管理项目版本,只需要一个 SCM 环境( CVS SVN ),共享开发源码就可以。把 pom.xml 中的 repository 设为官方地址就行,配置如下:

<repository>

      <id>central</id>

      <url>http://www.ibiblio.org/maven2</url>

</repository>

这个官方 remote repository 上有非常多的开源软件,应该能满足大部分项目的需要。如果有项目需要而它上面暂时还没有的软件,或者希望使用公司内部的软件,那么就需要自己配置一个 repository 了。

3.1       自建私服

传奇私服大家应该都听过,一个网吧自己搞个私服,一伙人免费在上面砍杀。官方因此少赚了很多钱,因此总想打击。而 maven 官方却对自建私服很是支持,我们总算可以正正当当搞把私服了( Springside 的老大江南白衣就是创建私服的好手)。我们就来介绍下自建私服的最快方法。

首先需要一个 http server ,找台服务器装上 apache 就行。放一个空的 maven 目录到 htdocs 下,假设服务器 ip 192.168.0.1 ,确认能用 http://192.168.0.1/maven 访问到。然后在自己机器上装好 maven2 ,初始化好项目,在 pom.xml 放入需要的 jar 定义,运行如 mvn eclipse:eclipse 就自动从官方下载 jar 到本地,如果不做配置,默认本地 repository ${user.home}/.m2/ 。对于 windows xp 来说一般在 C:\Documents and Settings\ username%\.m2 下,其中% username %为操作系统登录用户名。这时你可以看到 ${user.home}/.m2/ 下多了个 repository 目录,里面有很多的项目相关 jar ,目录按 groupId/ artifactId/version 排好。把 repository 目录整个拷贝到 apache 服务器的 maven 目录下,如果需要官方缺少的 jar 或公司内部 jar ,仿照这个目录结构,做好 jar 放到 maven 目录下。自建私服成功!

要使用私服,只需修改 pom.xml ,在 repository 配置后加上:

<repository>

      <id>companyName</id>

      <url>http:// ${ip}/maven</url>

</repository>

这样需要下载 jar 时,会先到本地 repository 查看,没有下载过再到官方搜索,没有找到再到后面的 repository 查找。

3.2       安装配置

Maven 的安装很简单:

1.         apache 网站上下载 maven 安装包,实际上就是个压缩文件。将其解压到你想要存放 maven 的目录中。在这里假设你将 maven 解压到 C:\Program Files\Apache Software Foundation\maven-2.0.4 中。

2.       C:\Program Files\Apache Software Foundation\maven-2.0.4\bin 设到你的系统环境变量%PATH%中。

3.       同时确保你已经将你的JDK安装目录设为java_home系统变量。

4.         打开个命令行窗口,运行 mvn –version 验证是否安装成功。

5.         如果使用 eclipse ,在运行 mvn eclipse:eclipse 生成 eclipse 项目文件后,需加入 M2_REPO Classpath Variables 中,指向 本地 repository ,例如: C:/Documents and Settings/Owner/.m2/repository

3.3       基本使用流程

在项目进程中,不必做什么配置,在 pom.xml 同级目录, cmd 使用简单的 maven 命令,就可以完成初始化 -> 开发 -> 测试 -> 发布 的全过程。 Maven 的基本使用流程如下图:

 

其中在初次使用命令 mvn eclipse:eclipse 时会下载很多的插件和 jar ,可能需要较长的时间,建议泡杯咖啡,和同事吹吹牛。如果失败,可能是网络问题,可以重新运行 mvn eclipse:eclipse ,已下载好的插件和 jar 不会再下。运行 mvn test mvn package 等命令,产出物都会放在 target 目录下。如果在使用过程中有什么问题,也可以和我联系, mail:pesome@gmail.com ,我们一起来尝试解决。

 

总结:

Maven 作为新的项目管理工具,简单易用,能对项目的各个阶段提供大力支持,同时由于它易扩展的插件体系架构,出现了越来越多的插件,也使得其功能更加强大。短短一篇文章,实在很难把其特点一一尽述, maven 还有很多好用的功能和插件等待我们去使用和开发。而学习新技术的最好方式就是实践,大家如果有兴趣,尽快下载一个最新版,开始你的 maven 之旅吧!

 

作者简介:张俊,网名 pesome ,上海交大软件工程硕士, 2 JavaEE 开发经验,资历尚浅。去年下半年开始接触 spring ; mso-hansi-font-fa

分享到:
评论

相关推荐

    maven项目管理工具

    一个Maven项目可以包含多个子项目,通过设置parent POM,可以实现子项目共享公共配置,便于大型项目的管理。 Maven的缺点也值得提及,例如,其配置文件POM.xml可能会变得复杂,特别是当项目依赖关系繁多时。另外,...

    idea使用maven创建web项目详细教程

    本教程将指导您使用 IDEA 创建一个 Maven Web 项目,从安装 Maven 到配置 Maven 环境、创建 Maven 工程、pom.xml 文件配置、依赖管理等。 1. 安装 Maven 在 IDEA 中使用 Maven 之前,需要先安装 Maven。在 Maven ...

    Maven项目管理软件

    ** Maven项目管理软件详解 ** Maven是一款强大的Java项目管理工具,由Apache Software Foundation开发并维护,它在软件开发领域中扮演着至关重要的角色。Maven通过自动化构建过程,简化了项目的构建、依赖管理和...

    Apache Maven是一个软件项目管理和综合工具

    Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。 本教程将介绍如何使用Maven在Java开发,或任何其他的编程语言的任何项目。

    基于maven创建web项目

    maven是一种基于项目对象模型(Project Object Model,POM)的项目管理工具,由Apache软件基金会开发和维护。maven提供了一种标准化的方式来构建、打包和部署项目,它可以帮助开发者简化项目的构建、测试和部署过程...

    maven项目转换WEB项目

    然而,对于习惯于使用Eclipse IDE开发Web项目的开发者来说,Maven项目可能会显得较为复杂。本文将详细介绍如何将一个Maven项目转换为Eclipse中的Web项目,并解释Maven的基本目录架构。 首先,让我们了解Maven项目的...

    项目管理工具Maven

    项目管理工具Maven,包括一些maven的基础知识,内容还算详细.

    基于SSM框架+mysql,Maven项目管理实现的在线记账系统项目源码.zip

    基于SSM框架+mysql,Maven项目管理实现的在线记账系统项目源码 基于SSM框架+mysql,Maven项目管理实现的在线记账系统项目源码 基于SSM框架+mysql,Maven项目管理实现的在线记账系统项目源码 基于SSM框架+mysql,...

    Maven-项目管理利器

    Maven 是一个由 Apache 软件基金会开发并维护的项目管理工具,专门针对 Java 平台的项目构建和依赖管理。它的名字来源于英文单词 'maven',意味着专家或内行。Maven 的设计目标是简化项目构建过程,通过项目对象模型...

    maven管理的web项目

    【标题】:“Maven管理的Web项目” 在Java Web开发中,Maven是一个强大的构建工具,它通过自动化构建过程,简化了项目的管理。Maven基于项目对象模型(Project Object Model,POM),能够处理编译、测试、文档生成...

    maven项目管理工具包

    **正文** Maven是Java开发领域中广泛使用的项目管理和综合工具,它可以帮助开发者...这个"Maven项目管理工具包"中的Maven.3.3.9.包,正是这样一个最新版本的Maven安装包,供开发者下载使用,以便在项目开发中受益。

    maven 安装包用于项目管理

    4. **使用Maven进行项目管理** - 创建Maven项目:使用`mvn archetype:create`命令快速生成基本项目结构。 - 编译项目:运行`mvn compile`命令,Maven会根据POM配置编译源代码。 - 打包项目:`mvn package`命令会...

    Maven-项目管理工具软件详解

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

    maven2 java项目管理 工具 测试 框架

    Maven 2 是一个广泛使用的Java项目管理工具,它极大地简化了构建、管理和部署Java应用程序的过程。Maven 使用一种标准化的方法来组织项目结构,并通过依赖管理和项目信息管理来自动化构建流程。这个工具的核心概念是...

    maven web项目 Demo

    Maven是一个强大的项目管理工具,它自动化构建过程,包括编译、测试、打包、部署等,使得开发更加高效。 在创建一个Maven Web项目时,我们通常会遵循以下步骤: 1. **初始化项目结构**:Maven的默认项目结构包括`...

    maven项目管理培训

    maven是一个用于java项目管理和自动构建的软件工具。协同开发的基本规范,为大家提供方便的协作的模式,能增加代码的复用,提高生产率。 提供方便,规范化的打包方法,是公司完成自动构建系统的核心部分,能帮助提高...

    Maven构建项目文档

    总之,Maven 是一个强大的项目管理工具,它使得构建、测试和部署 Java 项目变得更加简单。通过理解并熟练运用 Maven 的基本概念和命令,开发者可以更高效地管理工作流程。在 MyEclipse 中,Maven 的集成使得这些操作...

Global site tag (gtag.js) - Google Analytics