结合Maven2进行J2EE项目构建
一.背景
Maven2 的基本原理很简单,采用远程仓库和本地仓库以及 pom(project object model).xml ,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar ,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝 jar 。如图 1 。同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以在执行 maven 任务时,才会自动下载需要的插件。这个特性也为客户系统的升级带来的很大的方便,客户每次升级的时候可以使用maven的远程部署功能自动下载最新的系统组件(jar),并重新打包部署,很大程度的减少的系统升级的工作量。
理解Maven的原理,可以参考 Pear ――PHP扩展与应用库( the PHP Extension and Application Repository ),其原理非常类似,都有一个官方库,都是微内核,通过网络将需要的文件下载到本地,通过官方仓库将相应的类库进行统一管理。
Maven2的基本安装方法网上很多,就到http://maven.apache.org下载一个最新版,解压后即可,如果需要在命令行运行,还需要设置一些环境变量,网上的资料很多,这里就不多说了。总之,安装成功后当你在命令行下执行maven -version后正确显示当前maven的版本即可。
我们在项目中结合maven的进行开发的主要思路:
1.建立支持Maven2的开发框架,框架中结合了一些项目功能和工具类,并且此框架本身是一个eclipse工程,支持使用eclipse IDE的开发,并通过CVS可进行团队协作。
2.在Maven2的pom.xml中制定开发框架的依赖包,并建立依赖包的团队管理本地服务器,使团队中的包依赖得到统一管理。
3.每日下班后,在构建服务器上每日从cvs上下载各个团队开发人员的代码,统一进行集成构建和测试。由于是每日构建,所以发现的bug可及时反馈给开发人员进行修正,避免了一般开发过程中的bug长时间遗留的情况。
二.实施过程
为了实现上述思路,我们分几步实施:
1.首先需要构建一个系统的开发框架,
我们有两种方式构建,
其一是从零开始构建全新的框架,进入commond line,cd 到一个目录 ,执行
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
执行完毕后接下来cd 到项目目录my-webapp下,执行
mvn package
mvn eclipse:eclipse
之后,打开eclipse,到其目录下导入项目,并手动编辑pom.xml文件,设定指定的jar包,比如加入一个 jwebunit的jar包,我们需要在pom中添加一段:
<dependency>
<groupId>jwebunit</groupId>
<artifactId>jwebunit</artifactId>
<version>1.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
</exclusion>
</exclusions>
</dependency>
其中指定了包的名称,版本,使用的范围域等,pom.xml设置方式网上也是一堆一堆的,具体的可以自己搜搜。同时我们也可以使用maven2在 eclipse中的插件进行编辑,很方便,就不用记住那些该死的标签了。插件下载地址 http://m2eclipse.codehaus.org /update,将这个url填入到eclipse的Help-》Software Updates->find&install中新建一个插件下载地址的对话框中即可下载。
这种方式是完全自定义一个全新的工程后再进行框架搭建,比较累,尤其是添加依赖包的时候,需要根据自己的项目需要一个一个添加,很烦人,所以我们使用的第二个方法就直接找了一个现成的,到 Appfus 的网站http://appfuse.org/ 根据项目需要下载了一个项目框架作为原型,我们使用的是appfuse-light-webwork-ibatis- 1.8.2(webwork2.26,spring2.0,ibatis2.0),如果你使用的是其他的的技术,如 struts2,hibernate....直接到网站上下载一个相应的框架即可。appfuse框架使用maven2作为基本构建工具,其中自带的 pom.xml也替开发人员写好了,中所定义的依赖包可满足一般的开发需要,如需要自己指定的包,那么直接在其pom.xml中添加即可。要将这个框架作为eclipse工程使用,需要在解压后的框架目录下执行:
mvn eclipse:eclipse -DdownloadSources=true
这个命令会将工程将框架转换为eclipse工程,并从远程下载jar包到本地仓库(window下是 (C:\Documents and Settings\${username}\.m2\repository),之后执行:
mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo
其中path-to-eclipse-workspace是本机的eclipse的worksapce的路径。执行后 maven会在eclipse中建立一个M2_REPO环境变量,并将其中所有的jar包引入到工程中,完全自动化,十分方便。
打开eclipse修改开发中的环境变量(我们项目中使用了Myeclipse插件),找到相应的工程,发现框架中已有一些代码,这是appfuse提供给开发人员的示例代码,我们可以按照自己以前项目的积累进行对框架进行完善,形成一套自己的开发框架,之后设置工程环境变量,在该项目中右键 ->Myeclipse->add web capabilities->指定该工作空间下的Src/main/webapps作为WEB工程的根路径,并指定修改JAVA Build Path中
src/main/java
src/main/resource
src/test/java
的三个soucrefolder的outputpath 为scr/main/webapp/WEB-Inf/class,这样设置的目的是便于开发人员在本地进行部署测试,否则按照appfuse原有的工程设置是不能进行顺利部署的。
至此,我们已经将Maven2结合到项目中,一开始可能对目录结构有些不适应,毕竟这是maven提供的项目框架格式,可以修改为自己习惯的,但是不建议这样做。设置完成后,cd到项目路径下,运行
mvn test
mvn package
mvn install
<