全自动的使用ANT编译,打包EJB项目,并且部署到Websphere服务器上面。收藏
全自动的使用ANT编译,打包EJB项目,并且部署到Websphere服务器上面。
题外话,刚发现JAVAEYE没有EJB和WebSphere的板块,有点小郁闷。
首先我们可以在build.properties上面定义在编译部署过程中使用到的变量。
包括项目名,项目路径,部署路径等等
然后是项目的CLASS_PATH。
然后是Websphere相关的Lib的路径
在这些变量设置好了之后,我们就可以开始编译了。
在build.xml里面,
引用build.properties里面设置好的变量。
设置CLASS_PATH
然后进行必要的文件目录的初始化。
从cvs上面下载更新代码
编译,注意配置好项目目的依赖关系就好了
打包
然后把打好的jar包还有web项目的文件都放到同一个目录的正确的位置,准备打成ear包
打ear包
然后就需要部署到websphere服务器上面去了。
先要利用websphere的部署工具生成服务器的部署代码
这个完成了之后,我们就得到了一个可以直接部署到服务器上面的ear文件
然后,我们可以利用websphere提供的命令完成很多的工作。
停止服务器
启动服务器
部署EAR
reDeploy.jacl
这样的一套ant文件和jacl文件完成以后,我们就可以设定为定时任务。然后服务器就可以每天定时进行自动部署了。
当然,其实在部署的时候,如果你的项目还在BUG修正的时期,可能需要修改了bug然后到测试环境很快的验证一下,上面的工作全部都做完大概要花上30分钟,很不划算,我们可以
跳过打EAR包的过程,直接将编译后的文件和相关的修改过jar包COPY到部署后的目录,重启服务器就好了,这个也可以做成target,稍微修改一下上面的ant代码,省略几个步骤
就可以了。
题外话,刚发现JAVAEYE没有EJB和WebSphere的板块,有点小郁闷。

首先我们可以在build.properties上面定义在编译部署过程中使用到的变量。
包括项目名,项目路径,部署路径等等
- app.name=XXXXX
- dist.home=C:/antoutput
- encoding=UTF-8
- project.home=C:/CVSROOT/src/XXXXX
- deploy.path=C:/ProgramFiles/IBM/SDP70/runtimes/base_v61/profiles/AppSrvWSFP01/installedApps/D1N4GGBXNode02Cell
- .
- .
- .
- .
- project.class.path=
- XXX1_LIB=XXXXXXXX1
- XXX2_LIB=XXXXXXXX2
- XXX1_LIB.dir=${project.home}/${XXX1_LIB}
- XXX2_LIB.dir=${project.home}/${XXX2_LIB}
然后是Websphere相关的Lib的路径
- websphere.base_v61.runtime.dir=C:/ProgramFiles/ibm/SDP70/runtimes/base_v61
- websphere.runtime.lib.dir=${websphere.base_v61.runtime.dir}/lib
- websphere.runtime.plugins.lib.dir=${websphere.base_v61.runtime.dir}/plugins
- websphere.runtimes.webservice.lib.dir=${websphere.base_v61.runtime.dir}/runtimes
在这些变量设置好了之后,我们就可以开始编译了。
在build.xml里面,
引用build.properties里面设置好的变量。
- <propertyfile="build.properties"/>
- <pathid="XXX1_LIB.classpath">
- <filesetdir="${XXX1_LIB.dir}">
- <includename="**/*.jar"/>
- </fileset>
- </path>
- <pathid="XXX2_LIB.classpath">
- <filesetdir="${XXX2_LIB.dir}">
- <includename="**/*.jar"/>
- </fileset>
- </path>
- <pathid="project.class.path">
- <pathelementpath="${project.class.path}"/>
- </path>
- <pathid="websphere.runtime.classpath">
- <filesetdir="${websphere.runtime.lib.dir}">
- <includename="**/*.jar"/>
- </fileset>
- <filesetdir="${websphere.runtime.plugins.lib.dir}">
- <includename="**/*.jar"/>
- </fileset>
- <filesetdir="${websphere.runtimes.webservice.lib.dir}">
- <includename="**/*.jar"/>
- </fileset>
- </path>
然后进行必要的文件目录的初始化。
- <targetname="clean">
- <deletedir="${dist.home}"/>
- .
- .
- .
- .
- </target>
- <targetname="init">
- <mkdirdir="${dist.home}"/>
- .
- .
- .
- .
- .
- </target>
从cvs上面下载更新代码
- <targetname="deleteCvsHome">
- <deletedir="C:/cvstest"/>
- </target>
- <targetname="cvsCheckout">
- <mkdirdir="C:/cvstest"/>
- <propertyname="cvsroot"value=":pserver:user:passwd@IP:/cvsroot/data/XXX"/>
- <propertyname="projectName"value="XXXXXXXXXXX"/>
- <tstamp>
- <formatproperty="today"pattern="yyyy-MM-ddhh:mm:ss"/>
- </tstamp>
- <echomessage="${today}"/>
- <cvscvsRoot="${cvsroot}"dest="C:/cvstest"package="${projectName}"/>
- </target>
- <targetname="cvsUpdate">
- <propertyname="cvsroot"value=":pserver:user:passwd@IP:/cvsroot/data/XXX"/>
- <propertyname="projectName"value="XXXXXXXXXXX"/>
- <tstamp>
- <formatproperty="today"pattern="yyyy-MM-ddhh:mm:ss"/>
- </tstamp>
- <echomessage="${today}"/>
- <cvscvsRoot="${cvsroot}"command="update"dest="C:/cvstest"package="${projectName}"/>
- </target>
编译,注意配置好项目目的依赖关系就好了
- <targetname="buildxxxxDto"depends="init">
- <mkdirdir="${xxxx.dto.classes}"/>
- <javacsrcdir="${xxxx.dto.src}"destdir="${xxxx.dto.classes}"encoding="${encoding}"debug="true"deprecation="true"nowarn="false">
- <classpathrefid="project.class.path"/>
- <classpathrefid="websphere.runtime.classpath"/>
- <classpathrefid="XXX1_LIB.classpath"/>
- <classpathrefid="XXX2_LIB.classpath"/>
- </javac>
- </target>
- <targetname="buildxxxxEjbClient"depends="init,buildxxxxDto">
- <mkdirdir="${xxxx.ejbclient.classes}"/>
- <javacsrcdir="${xxxx.ejbclient.src}"destdir="${xxxx.ejbclient.classes}"encoding="${encoding}"debug="true"deprecation="true"nowarn="false">
- <classpathrefid="project.class.path"/>
- <classpathrefid="websphere.runtime.classpath"/>
- <classpathrefid="XXX1_LIB.classpath"/>
- <classpathrefid="XXX2_LIB.classpath"/>
- </javac>
- <copytodir="${xxxx.ejbclient.classes}">
- <filesetdir="${xxxx.ejbclient.resources}">
- <includename="**/*.properties"/>
- <includename="**/*.xml"/>
- </fileset>
- </copy>
- </target>
- <targetname="buildxxxxEjb"depends="init,buildxxxxDto,buildxxxxEjbClient">
- <mkdirdir="${xxxx.ejb.classes}"/>
- <javacsrcdir="${xxxx.ejb.src}"destdir="${xxxx.ejb.classes}"encoding="${encoding}"debug="true"deprecation="true"nowarn="false">
- <classpathrefid="project.class.path"/>
- <classpathrefid="websphere.runtime.classpath"/>
- <classpathrefid="XXX1_LIB.classpath"/>
- <classpathrefid="XXX2_LIB.classpath"/>
- </javac>
- </target>
- <targetname="buildxxxxSrvBizImpl"depends="init,buildxxxxEjbClient">
- <mkdirdir="${xxxx.srv.classes}"/>
- <javacsrcdir="${xxxx.srv.src}"destdir="${xxxx.srv.classes}"encoding="${encoding}"debug="true"deprecation="true"nowarn="false">
- <classpathrefid="project.class.path"/>
- <classpathrefid="websphere.runtime.classpath"/>
- <classpathrefid="XXX1_LIB.classpath"/>
- <classpathrefid="XXX2_LIB.classpath"/>
- </javac>
- <copytodir="${xxxx.srv.classes}">
- <filesetdir="${xxxx.srv.resources}">
- <includename="**/*.properties"/>
- <includename="**/*.xml"/>
- </fileset>
- </copy>
- </target>
- <targetname="buildxxxxweb"depends="init,buildxxxxEjbClient">
- <mkdirdir="${xxxx.web.classes}"/>
- <javacsrcdir="${xxxx.web.src}"destdir="${xxxx.web.classes}"encoding="${encoding}"debug="true"deprecation="true"nowarn="false">
- <classpathrefid="project.class.path"/>
- <classpathrefid="websphere.runtime.classpath"/>
- <classpathrefid="XXX1_LIB.classpath"/>
- <classpathrefid="XXX2_LIB.classpath"/>
- </javac>
- <copytodir="${xxxx.web.classes}">
- <filesetdir="${xxxx.web.resources}">
- <includename="**/*.properties"/>
- <includename="**/*.xml"/>
- </fileset>
- </copy>
- <copytodir="${xxxx.web.content}">
- <filesetdir="${project.home}/xxxx_WEB/WebContent">
- <excludename="WEB-INF/classes/**/*.*"/>
- </fileset>
- </copy>
- </target>
打包
- <targetname="jarxxxxDto"depends="buildxxxxDto">
- <jardestfile="${dist.home}/XXXXXXXXXX/xxxx_SrvDTO.jar"
- basedir="${xxxx.dto.classes}"
- manifest="${xxxx.dto.src}/META-INF/MANIFEST.MF">
- <filesetdir="${xxxx.dto.src}">
- <includename="**/*.java"/>
- </fileset>
- </jar>
- </target>
- <targetname="jarxxxxsrv"depends="buildxxxxSrvBizImpl">
- <jardestfile="${dist.home}/XXXXXXXXXX/xxxx_SrvBizImpl.jar"
- basedir="${xxxx.srv.classes}"
- manifest="${xxxx.srv.src}/META-INF/MANIFEST.MF">
- <filesetdir="${xxxx.srv.src}">
- <includename="**/*.java"/>
- </fileset>
- </jar>
- </target>
- <targetname="jarxxxxejb"depends="buildxxxxEjb">
- <jardestfile="${dist.home}/XXXXXXXXXX/xxxx_EJB.jar"
- basedir="${xxxx.ejb.classes}"
- manifest="${xxxx.ejb.src}/META-INF/MANIFEST.MF">
- <metainfdir="${xxxx.ejb.src}/META-INF">
- <includename="**/*.*"/>
- </metainf>
- <filesetdir="${xxxx.ejb.src}">
- <includename="**/*.java"/>
- </fileset>
- </jar>
- </target>
- <targetname="jarxxxxejbclient"depends="buildxxxxEjbClient">
- <jardestfile="${dist.home}/XXXXXXXXXX/xxxx_EJB_Client.jar"
- basedir="${xxxx.ejbclient.classes}"
- manifest="${xxxx.ejbclient.src}/META-INF/MANIFEST.MF">
- <filesetdir="${xxxx.ejbclient.src}">
- <includename="**/*.java"/>
- </fileset>
- </jar>
- </target>
然后把打好的jar包还有web项目的文件都放到同一个目录的正确的位置,准备打成ear包
- <targetname="forEar"depends="clean,init,buildAll,jarAll">
- <copytodir="${dist.home}/XXXXXXXXXX">
- <filesetdir="${jcm.ear}">
- <includename="**/*.properties"/>
- <includename="**/*.xml"/>
- <includename="**/*.MF"/>
- <includename="**/*.dtd"/>
- <includename="**/.compatibility"/>
- <excludename=".settings/**/*.*"/>
- </fileset>
- <filesetdir="${dist.home}">
- <includename="xxxx_WEB.war/**/*.*"/>
- </fileset>
- <filesetdir="${XXX1_LIB.dir}">
- <includename="asm-2.2.1.jar"/>
- .
- .
- .
- .
- .
- </fileset>
- <filesetdir="${XXX2_LIB.dir}">
- <includename="log4j-1.2.14.jar"/>
- .
- .
- .
- .
- .
- </fileset>
- </copy>
- </target>
- <targetname="createEar"depends="forEar">
- <deletedir="${dist.home}/XXXXXXXXXX/temp"/>
- <deletedir="${dist.home}/temp"/>
- <mkdirdir="${dist.home}/XXXXXXXXXX/temp"/>
- <mkdirdir="${dist.home}/temp"/>
- <wardestfile="${dist.home}/XXXXXXXXXX/temp/xxxx_WEB.war"webxml="${dist.home}/XXXXXXXXXX/xxxx_WEB.war/WEB-INF/web.xml">
- <filesetdir="${dist.home}/XXXXXXXXXX/xxxx_WEB.war/">
- <includename="**/*.*"/>
- <excludename="WEB-INF/web.xml"/>
- </fileset>
- </war>
- <eardestfile="${dist.home}/temp/XXXXXXXXXX"appxml="${dist.home}/XXXXXXXXXX/META-INF/application.xml">
- <filesetdir="${dist.home}/XXXXXXXXXX">
- <includename="**/*.jar"/>
- <includename="**/*.xml"/>
- <includename="**/*.properties"/>
- <includename="**/*.xsl"/>
- <excludename="xxxx_WEB.war/**/*.*"/>
- <excludename="**/application.xml"/>
- </fileset>
- <filesetdir="${dist.home}/XXXXXXXXXX/temp">
- <includename="*.war"/>
- </fileset>
- </ear>
- </target>
然后就需要部署到websphere服务器上面去了。
先要利用websphere的部署工具生成服务器的部署代码
- <targetname="ForDeploy">
- <execdir="C:/ProgramFiles/IBM/SDP70/runtimes/base_v61/bin"executable="cmd">
- <argline="/cejbdeploy.bat-complianceLevel5.0C:/antoutput/temp/XXXXXXX.earC:/antoutput/tempC:/anttest/XXXXXXXX.ear"/>
- </exec>
- </target>
这个完成了之后,我们就得到了一个可以直接部署到服务器上面的ear文件
然后,我们可以利用websphere提供的命令完成很多的工作。
停止服务器
- <targetname="stopServer">
- <execdir="C:/ProgramFiles/IBM/SDP70/runtimes/base_v61/bin"executable="cmd">
- <argline="/cstopServer.batserver1-profileNameAppSrv01"/>
- </exec>
- </target>
- <targetname="startServer">
- <execdir="C:/ProgramFiles/IBM/SDP70/runtimes/base_v61/bin"executable="cmd">
- <argline="/cstartServer.batserver1-profileNameAppSrv01"/>
- </exec>
- </target>
部署EAR
- <targetname="installEar">
- <execdir="C:/ProgramFiles/IBM/SDP70/runtimes/base_v61/bin"executable="cmd">
- <argline="/cwsadmin.bat-processserver1-profileNameAppSrvWSFP01-freDeploy.jacl"/>
- </exec>
- </target>
reDeploy.jacl
- #这是我们要发布的应用的存放路径
- setEARDIRC:/antoutput/temp/XXXXX.ear
- #这是我们要发布的应用的名称
- setAPPNAMEXXXXX
- setNODE[$AdminControlgetNode]
- puts"--stopingApp--"
- setAPPMANAGER[$AdminControlqueryNamestype=ApplicationManager,node=D1N4GGBXNode02,process=server1,*]
- $AdminControlinvoke$APPMANAGERstopApplicationXXXXX
- puts"--stopedApp--"
- puts"--uninstallingApp--"
- $AdminAppuninstallXXXXX
- puts"--uninstalledApp--"
- puts"--saveingconfig--"
- $AdminConfigsave
- puts"--savedconfig--"
- puts"--InstallingApp--"
- $AdminAppinstall$EARDIR{-appnameXXXXX}
- puts"--InstalledApp--"
- puts"--saveingconfig--"
- $AdminConfigsave
- puts"--savedconfig--"
- puts"--startingapp--"
- setAPPMANAGER[$AdminControlqueryNamestype=ApplicationManager,node=D1N4GGBXNode02,process=server1,*]
- $AdminControlinvoke$APPMANAGERstartApplicationXXXXX
- puts"--startedapp--"
当然,其实在部署的时候,如果你的项目还在BUG修正的时期,可能需要修改了bug然后到测试环境很快的验证一下,上面的工作全部都做完大概要花上30分钟,很不划算,我们可以
跳过打EAR包的过程,直接将编译后的文件和相关的修改过jar包COPY到部署后的目录,重启服务器就好了,这个也可以做成target,稍微修改一下上面的ant代码,省略几个步骤
就可以了。