1 基于 Maven2+Eclipse+WTP+m2eclipse 开发 Java EE 应用程序 谢超良 Jimmy.Shine@Gmail.com Sep 20,2010 一、 Maven l 什么是Maven? Maven是标准、存储格式以及一些软件用以管理和描述项目。它为构建、测试、部署项目定义了一个标准 的生命周期。它提供了一个框架,允许遵循 Maven 标准的所有项目,方便的重用的构建逻辑。Maven 项 目存在的 Apache 软件基金会,是一个开源社区,它开发的软件工具,基于一个通用的软件对象模型 (Project Object Model),也就是POM。 l 约定大于配置 Maven遵循约定大于配置的原则。 通过给项目提供默认的行为来减少不必要的配置。 l POM 在一个Maven项目中,通过声明POM来指定项目的相关信息。 Maven对于项目的唯一标识条件: Group ID, artifact ID, version(简称GAV)2 l Maven项目的结构 一个Maven的项目包括如下结构: 其中: src存放源代码,target存入的是编译后的,pom.xml是Maven用来描述项目的文件。 main中存放用来发布至生产环境的代码及配置,test中存放测试时候使用的代码及配置。 java中存放java代码,resource中存放配置文件。 一个web项目结构如下: 一个web项目中增加了一个webapp,用来存放web页面代码。 l Maven的生命周期 Maven默认的生命周期阶段包括:·validate validate the project is correct and all necessary information is available·compile compile the source code of the project3 ·test test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed·package take the compiled code and package it in its distributable format, such as a JAR.·integrationtest process and deploy the package if necessary into an environment where integration tests can be run·verify run any checks to verify the package is valid and meets quality criteria·install install the package into the local repository, for use as a dependency in other projects locally·deploy done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. Maven2.2的一个完整的阶段包括: validate,generatesources,processsources,generateresources,processreso urces,compile,processclasses,generatetestsources,processtestsources, generatetestresources,processtestresources,testcompile,test,prepare package,package,preintegrationtest,integrationtest,postintgrationtes t,verify,install,deploy 生命周期阶段 描述 validate 验证项目是否正确,以及所有为了完整构建所需要的信息是否可用 generatesources 生成所有需要包含在编译过程中的源代码 processsources 处理源代码,比如过滤一些值 generateresources 生成所有需要包含在打包过程中资源文件 processresources 复制并处理资源文件至目标目录 compile 编译项目的源代码 processclasses 后处理编译生成的文件, 例如对Java类进行一些代码增强 (bytecode) generatetestsources 生成所有包含在测试编译过程的测试源码 processtestsources 处理测试源码,比如过滤一些值 generatetestresources 生成测试需要的资源文件 processtestresources 复制并处理测试资源文件至于测试目录 testcompile 编译测试源码至测试目标目录 test 使用合适的单元测试框架运行测试 preparepackage 在真正的打包之前,执行一些准备打包必要的操作 package 将编译好的代码打包成可分发的格式,如JAR,WAR,EAR. preintegrationtest 执行一些在集成测试运行之前需要的动作,如建立执行测试需要的环境 integrationtest 处理包并发布至集成测试可以运行的环境 postintegrationtest 执行一些在集成环境运行之后需要的动作,如清理集成测试环境 Verify 执行所有的检查,验证包是有效的,符合质量规范 Install 安装包至本地仓库,以备其它的项目做为依赖使用 Deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正 式的发布相关) l 如何执行Maven 1. 安装Maven (1) 下载Maven,并解压4 (2) 在系统环境变量中设置M2_HOME (3) 将%M2_HOME%/bin;加入至系统环境变量path中。 (4) 在DOS窗口中,输入mvn –version,若显示版本号相关信息,则安装成功。 2. 配置Maven Maven的配置是通过%M2_HOME%/conf/setting.xml来进行配置。 setting.xml用来配置一些全局性的配置,包括代理服务器的地址,本地的存储库的地址等。 常用的配置包括: (1) 本地Maven存储库的地址(localRepository) 用来定义本地的 Maven 的库的存储地址,即从 Maven 仓库中下载的文件的存储的位5 置。 如: localRepositoryd:/Maven/repository/localRepository (2) Maven服务器地址(server) 在发布构件至本地的情况下需要。 如: servers server idnexusreleases/id usernameadmin/username passwordadmin123/password /server server idnexussnapshots/id usernameadmin/username passwordadmin123/password /server /servers (3) 镜像服务器(Mirror) 定义镜像服务器来替代指定的仓库,即通过匹配相关的远程的仓库的id从镜像的服务 器上查找构件,而不从远程的服务上面查找。 如: mirrors mirror idnexus/id mirrorOf*/mirrorOf nameNexus Mirror for all./name url /mirror /mirrors (4) 配置(Profile) Profile用来定义仓库的地址和插件仓库的地址,用来发布、获取构件。 如: profiles profile idnexus/id repositories repository idnexus/id name本地开发库/name url layoutdefault/layout releasesenabledtrue/enabled/releases snapshotsenabledtrue/enabled/snapshots /repository /repositories pluginRepositories pluginRepository idnexus/id url releasesenabledtrue/enabled/releases snapshotsenabledtrue/enabled/snapshots /pluginRepository /pluginRepositories /profile /profiles (5) 激活配置 指定哪些配置被激活。6 如: activeProfiles activeProfilenexus/activeProfile /activeProfiles 3. 使用Maven (1) 创建Maven项目可以通过执行相应的maven命令来进行。 执行方式包括:mvn pluginId:goalId或者是mvn phase。 mvn pluginId:goalId是执行相关的插件的目标。 如: mvn –archetype:create –DgroupId=com.vaalhaai –DartifactId=common –DpackageName=com.vaalhaai.common 将创建一个新的项目。 其中: mvn是Maven的命令。 archetype:create称为Maven的目标。 archetype实际上是一个插件id, create 称之为目标id。 Dname=value是将会传入到目标中的参数,使用D属性的形式,类似于通过命令行 向虚拟机传递系统属性。 一个Maven插件是一组或者多个目标的集合。 mvn phase是执行maven的生命周期的阶段 如: mvn package 将执行打包的操作。 可以将插件的目标绑定到Maven的生命周期上,每个阶段可以绑定零个或者是多个目 标。 Maven 在执行生命周期的时候,会有序的执行前置的所有阶段,直到命令指定的生命 周期。 l Maven的依赖管理 一个复杂项目会包含有很多的依赖,也可能是包含有依赖于其它构件的依赖。Maven 支持依赖传递 (transitive dependencies),如果你的项目依赖于一个库,而这个库又依赖于多个其它的库, 你只需要加上你依赖的库即可,Maven会自动将依赖的库的依赖加入你的项目中。 Maven中的对于项目的依赖的配置在POM.xml中,通过配置dependency来指定 如: dependenc