JAVAEE项目中 Maven 的应用

JAVAEE项目中 Maven 的应用

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

      用maven的好处:我感觉最主要就是自动下载jar包和它所依赖的包,这样可以保证了多人开发时jar版本不同的问题。再就是文件结构清晰,java文件,资源文件,测试文件都分的很清楚。

1 .简介

        Maven作为 Apache 的一个开源项目,旨在给项目管理提供更多的支持,主页地址为 http://maven.apache.org 。它最早的意图只是为了给 apache 组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。很多伟大的事业,出发点都很简单。现在,越来越多的项目开始使用 maven。Maven 在 Java 世界的地位也逐渐加强,成为标准指日可待。

基本原理

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

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

2 项目管理

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

      常用命令:

  mvn archetype   :create 创建Maven项目

  mvn compile      :编译源代码

  mvn test-compile :编译测试源代码

  mvn test            :运行应用程序中的单元测试

  mvn site            :生成项目相关信息的网站

  mvn clean         :清除项目目录中的生成结果

  mvn package    :根据项目生成的jar

  mvn install         :在本地Respository中安装jar

  mvn eclipse:eclipse :生成eclipse项目文件

  mvn jetty:run     :启动jetty服务

  mvn tomcat:run :启动tomcat服务

  推荐书籍 目前中文版对maven介绍比较全的书籍是《Maven实战》

2.1 项目标准化

        Maven 一个重要特性是定义了项目的标准模板,官方说法是最佳实践。可以通过命令: mvnarchetype: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 就自然引入了规范,这可比费时费力的写文档,定规范有效的多了。

Maven项目标准目录结构,详细参考:http://blog.csdn.net/lengyue_wy/article/details/6718637

2.2 文档和报告

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

       而 maven 提供的针对如 junit , checkstyle , pmd 等的插件,能够方便的进行测试和检查并能直接生成报告。使用都很简单,如 mvn surefire-report:report 就能自动进行 junit 测试,并生成 junit 报告, mvnpmd: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 的老大江南白衣就是创建私服的好手)。我们就来介绍下自建私服的最快方法。

         首先需要一个 httpserver ,找台服务器装上 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安装配置及其eclipse插件的安装

Maven 的安装很简单:

详细参考,本人亲测,成功部署成功:http://dead-knight.iteye.com/blog/1841658  

3.3  基本使用流程

         在项目进程中,不必做什么配置,在 pom.xml 同级目录, cmd 使用简单的 maven 命令,就可以完成初始化 -> 开发 -> 测试 -> 发布的全过程。其中在初次使用命令 mvn eclipse:eclipse 时会下载很多的插件和 jar ,可能需要较长的时间,建议泡杯咖啡,和同事吹吹牛。如果失败,可能是网络问题,可以重新运行 mvn eclipse:eclipse ,已下载好的插件和 jar 不会再下。运行 mvn test 和 mvn package 等命令,产出物都会放在 target 目录下。如果在使用过程中有什么问题,也可以和我联系, mail:[email protected] ,我们一起来尝试解决。

总结:

         Maven作为新的项目管理工具,简单易用,能对项目的各个阶段提供大力支持,同时由于它易扩展的插件体系架构,出现了越来越多的插件,也使得其功能更加强大。

参考文档:

1. http://maven.apache.org 官方网站文档

2. http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/Maven2 的新特性

3. http://dead-knight.iteye.com/blog/1841658


你可能感兴趣的:(maven,javaee,项目,应用)