利用 Ant 和 Eclipse 有效地提高部署工作效率.docx
- 文档编号:6662164
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:11
- 大小:77.81KB
利用 Ant 和 Eclipse 有效地提高部署工作效率.docx
《利用 Ant 和 Eclipse 有效地提高部署工作效率.docx》由会员分享,可在线阅读,更多相关《利用 Ant 和 Eclipse 有效地提高部署工作效率.docx(11页珍藏版)》请在冰豆网上搜索。
利用Ant和Eclipse有效地提高部署工作效率
利用Ant和Eclipse有效地提高部署工作效率
内容摘要:
本文主要介绍Ant在多用户开发的情况下,如何用Eclipse,并且根据不同的目标环境编译不同的部署包。
文中首先介绍一个场景,给出在开发、编译、部署过程中遇到的问题;然后介绍如何用Eclipse来简化你的Ant开发过程;文章的最后解释如何通过编写有效的Ant脚本来提高你的工作效率。
工作场景
现在有一个web项目,是多人进行开发的,通过CVS来管理。
另外该项目还有一些测试人员,他们测试部署在测试服务器上的应用程序,发现bug后通过bug管理系统通知开发人员,在开发人员修复bug并经过本地测试后,由专门的人负责检出(checkout)代码,编译打包后部署到测试服务器上。
该项目的成员小A就是负责检出代码、编译打包,并部署到服务器上的人。
除了这个任务之外,他还是该项目的编程人员。
在项目进入测试阶段后,小A在得到组中别的成员修复了bug并且检入(checkin)了代码的消息后(也有可能是小A自己检入了代码),小A首先更新本地的代码,先在本地做测试,确认修复了bug后打成WAR包部署到测试服务器上,并通知测试人员已经修复了bug,让测试人员继续进行测试。
小A的烦恼
在该项目中,有一些为测试方便开发而写的代码和页面,比如跳过用户认证,但是在部署到测试机环境的时候,需要删除这些代码和页面;另外作为一个具有灵活性和扩展性的应用程序,又有一些配置文件,配置文件中的值会根据环境的改变而变动。
例如,在项目中使用了Log4j记录日志,需要给Log4j指定日志文件的保存路径,本地程序员开发的时候用的是Windows系统,给Log4j指定的也是Windows的文件系统,在测试阶段的时候,需要部署到Linux系统中,那么日志的保存路径也需要做相应的改动。
部署到测试服务器上的时候,除了Log4j需要改之外,还有很多别的配置项目也需要变动,并且分散在各个package中。
小A的烦恼也随之而来,每次他在做完本地测之后,就根据测试机的需要逐个找配置文件,更改相应的值,并删除那些为测试方便写的代码和页面,每天可能根据需要做好几次这样的事情,最烦的是他在快做完对测试机环境更改的时候,某开发人员突然通知小A说:
“我又改了一点代码,刚检入,你再重打一个包吧。
”,小A又不得不从头开始做新一轮的检出代码、本地测试、更改配置文件、删除不需要的文件、打包部署的工作。
另外小A在测试阶段的后期被通知要求除了每次生成一个测试环境的WAR包外还必须生成一个在产品环境下的WAR包,他做的事情就更多了。
从上面的场景可以看出,小A的工作效率低而且容易出错,甚至有可能导致整个项目的工作效率低下。
其实可以通过Ant来帮助小A快速而且有效地完成这个工作。
在Ant中,根据目标环境的需要,可以把所有要更改的配置文件的项目集中写到某个配置文件中。
这样根据不同的目标环境得到不同的配置文件,Ant在编译包时根据不同的目标环境切换不同的配置文件即可。
比如小A现在碰到的有3中环境:
开发环境、测试环境以及产品环境,根据这三种环境可以生成三个不同的配置文件:
develop_deploy.property、test_deploy.property和product_deploy.property,当小A想生成不同的包时只需在这三个配置文件之间切换就可以了。
在正式开始编写脚本之前,我们需要下载安装相应的软件。
Eclipse:
为了使Ant的开发更加简单,我们选择了Eclipse3.1作为开发环境。
当然你可以使用任何你喜欢的文本编辑工具来开发你的Ant。
Eclipse的最新版本可以在http:
//eclipse.org/上下载。
Ant:
Ant是基于Java的编译工具,它就像C/C++中的make,但是没有make那样难用。
Ant的最新版本可以在http:
//ant.apache.org/bindownload.cgi上下载。
如果你用Eclipse来开发Ant,则不用去单独下载Ant,因为在Eclipse中已经集成了Ant。
CVS客户端(cvs.exe):
CVS可以在http:
//www.nongnu.org/cvs/上下载
用Eclipse3.1来创建Ant脚本
如果你使用Eclipse来编写Ant,建议使用Eclipse3.1以后的版本。
除了以前Ant编辑器提供的语法高亮,提示语法错误等功能外,Eclipse3.1版本增加了许多新的功能。
比如:
脚本代码的折叠;快速定位某属性或者目标(target)段的定义;在同一builder文件中重构属性名和目标名(快捷方式Alt+Shift+R);调试Ant脚本等。
下面我们就来看看Eclipse3.1中对Ant的支持
打开“File”-“New”-“Project”-“Simple”-“Project”,点击“Next”,输入工程名“Ant”,然后点击直到“Finish”
在新建的Ant工程中,新建Test.xml,并且拷贝下面的脚本。
该段脚本的内容就不做介绍了,我们主要看Eclipse提供了哪些功能。
注意这时候打开的并不是Ant编辑器,将内容拷贝进去之后,关掉打开的“Test.xml”,然后再重新打开它,这样Eclipse就会用Ant编辑器打开它,并且也语法高亮了。
xmlversion="1.0"encoding="UTF-8"?
>
自动提示和代码折叠功能。
如果是Ant内置的命令或者前面已经定义的变量,编辑器会自动提示;编辑器右边的加/减号可以代码折叠。
如下所示:
快速定位目标(target)或者定义变量处。
在上图中,将鼠标移至default=”init”中的init上之后,按下ctrl键,鼠标变成手状,单击就可以定位到定义该目标的地方
快速重构目标名或者属性名。
选中目标/属性名,按下Alt+Shift+R,然后键入你要修改后的值,所有引用到的地方都会随之改动。
如下图所示,选中init后,按下快捷键,改成initial:
调试Ant脚本。
在标签“ 这是调试窗口,这里可以选择单步跟进、跳出等: 下面是运行时变量窗口。 可以看到test变量的值是“test”: 运行结果窗口: 由此可见,如果使用好EclipseAnt编辑器所提供强大的功能的话能大大提高写Ant脚本的效率。 Ant中使用property(属性)文件 刚开始写Ant的初学者可能会把所有的信息都放在build.xml中,下面就是这样的一个例子。 /temp/dest/testProj"/> /temp/src/testProj"destdir="c: /temp/dest/testProj"/> /temp/dest/testProj,successfully. 在上面的例子中,所有的路径信息都是写在build.xml中。 但是Ant脚本可能在不同的机器或者不同的系统上运行,也有可能一些值需要根据环境的不同而变化,在Ant中可以把所有这些可能变化的地方都放到一个配置文件中,然后在Ant脚本中引用这个配置文件就可以了,针对上面的例子,如下所示: build.properties的内容: dest.dir=c: /temp/dest/testProj src.dir=c: /temp/src/testProj 如果想在Ant脚本中引用值的话,只需用$符号开头,在一对"{}"中写入要引用的键值。 如上例中,需要引用编译的目标路径用"${dest.dir}"。 使用Ant任务从CVS中检出(checkout)源代码,并编译打包 Ant中提供了cvs任务(Task)可以从CVS服务器中检出资源(注意: 在使用Ant的cvs任务之前,请先将cvs.exe下载到你的机器,并且将它添加到你本地的PATH环境变量中,然后重新启动Eclipse。 否则在执行下面脚本的时候就会得到error=2的错误)。 cvs的可选用属性很多,在这里介绍经常使用到的几个属性。 从CVS中检出资源一般需要指定: CVS所在的服务器地址: 目标CVS服务器地址 用户名: 登录该CVS服务器你指定的用户名 密码: 登录该CVS服务器需要的密码 库路径(RepositoryPath): 服务器中的库路径 模块名: 当前需要检出的模块名,一般都是以工程的名字作为模块名 标签名: 需要从CVS中检出哪个标签 在介绍使用Ant的cvs之前,先说一下本地的目录结构。 在C盘的temp目录下,分别有四个目录,如下所示: build目录: 放编译后的类以及资源文件 dist目录: 放生成的jar文件或者war文件 lib目录: 放在编译过程中需要用到的jar文件 src目录: 放从cvs中检出的源文件(包括JSP等) 在Ant中这样写就可以从中检出资源: pserver: username: pwd@cvs.server: /home/testPath" package="TestProj"dest="c: /temp/src/testProj"failonerror="true"/> 这段脚本片断的意思就是从叫"cvs.server"的服务器中,用用户名是username、密码为pwd的用户检出在库路径是/home/testPath下的TestProj模块(项目),检出后的资源放入本地目录c: /temp/src/testProj中。 在上面这段脚本中,可以看到有很多值可能会根据不同的环境或者用户随之改变的,比如用户名和密码等;而且从脚本的重复可利用性来说,需要把有些值抽出来放到配置文件中,如服务器的地址和库路径等。 因此把这些可能需要更改的地方放到property文件中,效果会更好。 改完后的完整Ant脚本如下所示: xmlversion="1.0"? > tag="${cvs.tag}"dest="${src.dir}"failonerror="true"/> 对应的TestWeb.properties文件内容如下所示: base.dir=c: /temp/ src.dir=${base.dir}/src cvs.server=cvs.server cvs.user=username cvs.pw=pwd cvs.repositoryPath=/home/testPath cvs.projectName=TestProj cvs.root=: pserver: ${cvs.user}: ${cvs.pw}@${cvs.server}: ${cvs.repositoryPath} cvs.tag= 在检出了资源后,需要对其进行编译打包。 为了使Ant脚本更加具有可读性和灵活性,我们需要对上面的Ant脚本进行一些改动。 首先将Ant脚本中进行分段,如下所示: xmlversion="1.0"? > --脚本的入口点--> --做初始化属性文件和设置classpath等设置初始条件--> --删除上一次留下的没用的目录和文件--> --从CVS中检出资源--> --编译源文件并打包到指定的目录--> 上面的脚本中,总共分成了5个目标(target),脚本的入口点是"all",all按顺序调用init,clean,checkout,build。 其中: init是用来做初始化属性文件和设置classpath等设置初始条件的事情 clean用来删除上一次留下的没用的目录和文件 checkout已经介绍过了,是用来从CVS中检出资源 build用来编译源文件并打WAR包到指定的目录 详细的Ant脚本可以参见随本文所附的TestWeb.xml和TestWeb.properties。 编译过程与产生不同目标环境的脚本分开执行 在前面介绍的Ant脚本中,根据从CVS服务器中检出的资源打成了一个默认的war包,并没有考虑根据不同的目标环境来生成不同的包,从下一节开始介绍如何根据不同的环境来生成不同的部署包。 还有一个问题是: 为什么需要把从CVS中检出资源、编译的过程跟根据目标环境打包的过程分开? 这是因为本身CVS检出资源是需要花一定的时间,如果资源比较多这个过程就会花费挺长时间;另外,在多人开发的情况下必须保证在生成不同的部署包的时候是用的是同一套代码生成的,否则会出现各个服务器上运行的版本不一致,如果检出资源、编译的过程跟生成包的脚本一起执行的话就会出现这个问题(比如小A在测试服务器测试通过的时候之后,再生成一个在产品环境下的部署包,如果分两次从CVS服务器中检出资源的话,在此期间可能会有开发人员往CVS服务器中检入代码,导致生成的版本不一致),因此,必须将这两个过程分开执行。 现在我们开始建立另外一个Ant脚本文件,叫deploy.xml,专门用来生成包;另外与deploy.xml相对应的还有一个deploy.properties文件。 在deploy.xml中会引用deploy.properties文件。 另外根据在前面的场景中碰到的环境,创建三个不同的属性文件,develop_deploy.property、test_deploy.property和product_deploy.Property,在打包的时候,根据不同的目标环境,将相应属性文件中的内容拷贝至deploy.properties文件中(或者也可以直接在deploy.xml中直接切换不同的属性文件),然后在Eclipse中直接执行deploy.xml;如果在命令行中,可以用下面的命令来执行: ant–fdeploy.xml 解开WAR包 我们首先得建立一个目录(这里是unpack)用来存放解压后的文件。 Ant中提供了unzip命令用来解压ear/war/jar包。 除了这个目录外,根据不同的目标环境,在运行目录下建立一个与目标环境相对应的目录,重新打好的war包就放在这个目录下,比如针对场景中的情况,如果需要创建一个产品环境下的部署包,我们可以建立一个TestWebProduct目录,目录名写在配置文件中(${pack.base.dir})。 在init段中首先删除掉上次解压的目录和目标打包目录,然后重新建立目录;在unpack中,首先将编译好的默认war包拷贝至unpack定义的目录,解压之后把unpack下的war包删除。 下面是这时候对应的属性文件。 projectName=MTSWeb war.name=MTSWeb.war #根目录 base.dir=c: /temp #默认的war包所在的目录 dest.dir=${base.dir}/dist #解压后的目录 unpack.base.dir=${base.dir}/unpack #目标环境相对应的目录 pack.base.dir=${base.dir}/TestWebProduct 利用Ant提供的filter任务替换属性值 现在根据不同环境的需要,对某些配置文件的值做一些替换。 在Ant中,提供了filter任务,使得替换值很方便。 当然也可以使用下面介绍的正则表达式来替换属性值。 filter主要用来在同一行内容中的替换,而正则表达式一下子可以替换多行内容。 filter的使用例子: 这段脚本的意思就是在src.dir目录下的所有文件中,如果有预先定义好的"@log4j.logger@"占位符的话,在拷贝到dest.dir目录后,所有的占位符都被替换成了"INFO"。 你也可以将所有被替换的值放到某个属性文件中,filter任务将属性文件中的每一个条目读出来并且设置成一个Filter。 如下所示: 上面的脚本表示所有在deploy_env中出现的条目将被作为一个filter,在拷贝到dest.dir目录后,所有src.dir目录中存在的占位符将被替换成deploy_env中的值。 具体的例子可以参见随本文附带的deploy.xml,deploy_env.properties和Test.properties。 其中deploy.xml是ant脚本,deploy_env.properties中包含所有要替换的值,在Test.properties中是包含有占位符的资源文件。 利用正则表达式替换属性值 Ant中支持多种正则表达式,在运行Ant的时候用哪种正则表达式可以通过设置ant.regexp.regexpimpl的值来切换,Ant支持的的正则表达式有: java.util.regexpackageofJDK1.4 jakarta-regexp installationdependencies 正则表达式的例子: byline属性用来确认被替换的时候是一次替换一行还是多行;pattern属性用来指明正则表达式;substitutionexpression中是替换的值,替换的值都定义在相对应的配置文件中;fileset属性中的dir用来指定被替换文件所在的目录,includes用来指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 Ant Eclipse 有效地提高部署工作效率 有效地 提高 部署 工作效率
![提示](https://static.bdocx.com/images/bang_tan.gif)