Ant与批处理(win环境)学习3
此篇主要讲实践,大多数情况下是直接贴的代码了build.properteis:
#created by myFirstAntPrj#Sat Jan 16 14:25:56 CST 2010debug=trueoptimize=falsecvsroot=:pserver:username@ip:/usr/local/myFirstPrjdevmyFirstPrjCloudHome=myFirstPrjCloudmyFirstPrjCloudDistDir=distJAVA_HOME=F:/myFirstAntPrj-cloud/jdk1.6.0_16FLEX_HOME=sdks/4.0.0FLEX_APP_SRC_HOME=${myFirstPrjCloudHome}/console-flex/src/main/flexCONSOLE_CONTEXT_ROOT=test#将构建后生成的myFirstPrj-cloud.war和datacenter.war上传到测试服务器serverIp=192.168.6.240serverUser=rootserverPwd=123456serverConsoleDir=/opt/myFirstAntPrj-cloud/webconsole/domains/mydomain/applicationsserverDatacenterDir=/opt/myFirstAntPrj-cloud/datacenter/domains/mydomain/applicationsserverConsoleDeployDir=/opt/myFirstAntPrj-cloud/webconsole/domains/mydomain/deployserverDatacenterDeployDir=/opt/myFirstAntPrj-cloud/datacenter/domains/mydomain/deploy
build.xml:
<?xml version="1.0"?><project name="com.myFirstAntPrj.cloud.build" default="build" basedir="."><property file="build.properties" /><taskdef resource="org/apache/maven/artifact/ant/antlib.xml"><classpath path="${basedir}/lib/maven-ant-tasks-2.1.1.jar"></classpath></taskdef><taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" /><taskdef resource="net/sf/antcontrib/antlib.xml"><classpath><pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar" /></classpath></taskdef>哌<path id="boot.classpath"><fileset dir="${JAVA_HOME}/jre/lib"><include name="**/*.jar" /></fileset></path><target name="prepare"><mkdir dir="${myFirstPrjCloudDistDir}" /><mkdir dir="${myFirstPrjCloudDistDir}/console-web" /><mkdir dir="${myFirstPrjCloudDistDir}/datacenter" /></target><target name="build" depends="prepare,cvscheckout,builddatacenter,buildconsole-web"></target><target name="cvscheckout"><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/common" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/console-core" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/console-flex" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/console-web" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/datacenter" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/datacenter-pojo" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/ovf" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/ovf-pojo" dest="${basedir}" /><cvs cvsRoot="${cvsroot}" package="myFirstPrjCloud/virtual" dest="${basedir}" /><delete dir="${myFirstPrjCloudHome}/common/target/"/><delete dir="${myFirstPrjCloudHome}/console-core/target/"/><delete dir="${myFirstPrjCloudHome}/console-flex/target/"/><delete dir="${myFirstPrjCloudHome}/console-web/target/"/><delete dir="${myFirstPrjCloudHome}/datacenter/target/"/><delete dir="${myFirstPrjCloudHome}/datacenter-pojo/target/"/><delete dir="${myFirstPrjCloudHome}/ovf/target/"/><delete dir="${myFirstPrjCloudHome}/ovf-pojotarget/"/><delete dir="${myFirstPrjCloudHome}/virtual/target/"/></target><target name="buildcommon"><java-compile project="common"/><mvn pom="${myFirstPrjCloudHome}/common/pom.xml"><arg value="install" /></mvn></target><target name="buildconsole-core" depends="buildcommon"><java-compile project="console-core"/><mvn pom="${myFirstPrjCloudHome}/console-core/pom.xml"><arg value="install" /></mvn></target><target name="buildconsole-flex" depends="wrapper"><flex-compile file="module/MainFrameModule" /><!--<flex-compile file="Main"/>--><flex-compile file="module/AppPlatformModule" /><flex-compile file="module/DatacenterModule" /><flex-compile file="module/EventManagementModule" /><flex-compile file="module/HomeModule" /><flex-compile file="module/MainFrameModule" /><flex-compile file="module/MonitorCenterModule" /><flex-compile file="module/ResourceManagementModule" /><flex-compile file="module/SystemConfigurationModule" /><flex-compile file="module/UserManagementModule" /><flex-compile file="module/VitrualApplianceModule" /><copydir dest="${myFirstPrjCloudHome}/console-web/WebContent/resource/swf" src="${myFirstPrjCloudDistDir}/flex" forceoverwrite="true"><include name="**/*.swf" /><include name="history/**"/><include name="*.js"/><include name="*.html"/></copydir><copydir dest="${myFirstPrjCloudHome}/console-web/WebContent/resource/swf" src="${myFirstPrjCloudHome}/console-flex/src/main/flex" forceoverwrite="true"><include name="assets/**" /><include name="config/**" /><include name="locale/**" /></copydir></target><target name="buildconsole-web" depends="prepare,buildconsole-core,buildconsole-flex" ><delete dir="${myFirstPrjCloudHome}/console-web/WebContent"><include name="config/**" /></delete><java-compile project="console-web"/><delete dir="${myFirstPrjCloudHome}/console-web/target" includes="**/CVS" /><mvn pom="${myFirstPrjCloudHome}/console-web/pom.xml"><arg value="package" /></mvn><copyfile dest="${myFirstPrjCloudDistDir}/console-web/myFirstAntPrj-cloud.war" src="${myFirstPrjCloudHome}/console-web/target/console-web-1.0-SNAPSHOT.war" /><!--<delete dir="${serverUser}:${serverPwd}@${serverIp}:${serverConsoleDeployDir}"/>--><scp file="${myFirstPrjCloudDistDir}/console-web/myFirstAntPrj-cloud.war" todir="${serverUser}:${serverPwd}@${serverIp}:${serverConsoleDir}" trust="true" /></target><target name="builddatacenter" depends="prepare,buildcommon,builddatacenter-pojo,buildovf-pojo,buildvirtual"><java-compile project="datacenter"/><mvn pom="${myFirstPrjCloudHome}/datacenter/pom.xml"><arg value="package" /></mvn><copyfile dest="${myFirstPrjCloudDistDir}/datacenter/datacenter.war" src="${myFirstPrjCloudHome}/datacenter/target/datacenter-1.0-SNAPSHOT.war" /><!--<delete dir="${serverUser}:${serverPwd}@${serverIp}:${serverDatacenterDeployDir}"/>--><scp file="${myFirstPrjCloudDistDir}/datacenter/datacenter.war" todir="${serverUser}:${serverPwd}@${serverIp}:${serverDatacenterDir}" trust="true" /></target><target name="builddatacenter-pojo" depends="buildcommon"><java-compile project="datacenter-pojo"/><mvn pom="${myFirstPrjCloudHome}/datacenter-pojo/pom.xml"><arg value="install" /></mvn></target><target name="buildovf" depends="buildcommon"><java-compile project="ovf"/><mvn pom="${myFirstPrjCloudHome}/ovf/pom.xml"><arg value="install" /></mvn></target><target name="buildovf-pojo" depends="buildcommon,buildovf"><java-compile project="ovf-pojo"/><mvn pom="${myFirstPrjCloudHome}/ovf-pojo/pom.xml"><arg value="install" /></mvn></target><target name="buildvirtual" depends="buildcommon"><java-compile project="virtual"/><mvn pom="${myFirstPrjCloudHome}/virtual/pom.xml"><arg value="install" /></mvn></target><target name="clean"><delete dir="${myFirstPrjCloudHome}" /><delete dir="${myFirstPrjCloudDistDir}" /></target><target name="allclean"><mvn pom="${myFirstPrjCloudHome}/common/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/console-core/pom.xml"><arg value="clean" /></mvn><delete file="${myFirstPrjCloudHome}/console-flex/src/main/flex/Main.swf" /><mvn pom="${myFirstPrjCloudHome}/console-web/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/datacenter/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/datacenter-pojo/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/ovf/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/ovf-pojo/pom.xml"><arg value="clean" /></mvn><mvn pom="${myFirstPrjCloudHome}/virtual/pom.xml"><arg value="clean" /></mvn><antcall target="clean"></antcall></target><path id="datacenter.src.lib"><fileset dir="${myFirstPrjCloudHome}/datacenter/src/main/webapp/WEB-INF/lib/"><include name="*.jar" /></fileset></path><target name="compileMxml"><mxmlc services="${myFirstPrjCloudHome}/console-web/WebContent/WEB-INF/flex/services-config.xml"file="${FLEX_APP_SRC_HOME}/Main.mxml" actionscript-file-encoding="UTF-8"keep-generated-actionscript="false" incremental="true" context-root="${CONSOLE_CONTEXT_ROOT}" locale="zh_CN" strict="true"output="${myFirstPrjCloudDistDir}/flex/Main.swf" debug="${debug}" ><load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" /><source-path path-element="${FLEX_HOME}/frameworks" /><compiler.library-path dir="${FLEX_HOME}/frameworks" append="true"><include name="libs" /><include name="../bundles/{locale}" /></compiler.library-path><compiler.library-path dir="${myFirstPrjCloudHome}/console-flex" append="true"><include name="libs" /></compiler.library-path><compiler.source-path path-element="${myFirstPrjCloudHome}/console-flex/src/main/flex" /></mxmlc></target> <target name="wrapper" depends="compileMxml"> <html-wrapper file="Main.html" title="test" application="console-flex" bgcolor="#ffffff" width="100%" height="100%" swf="Main" history="true" version-major="10.0" output="${myFirstPrjCloudDistDir}/flex" /> </target><macrodef name="java-compile"><attribute name="project" description="maven project name" /><sequential><mkdir dir="${myFirstPrjCloudHome}/@{project}/target/classes"/><pom id="@{project}.maven.project" file="${myFirstPrjCloudHome}/@{project}/pom.xml" /><dependencies pathId="@{project}.maven.classpath" filesetid="@{project}.maven.fileset"><pom refid="@{project}.maven.project" /></dependencies><javac srcdir="${myFirstPrjCloudHome}/@{project}/src/main/java" destdir="${myFirstPrjCloudHome}/@{project}/target/classes" debug="${debug}" optimize="${optimize}" classpathref="@{project}.maven.classpath" encoding="UTF-8"><bootclasspath refid="boot.classpath"></bootclasspath><classpath refid="datacenter.src.lib" /></javac><copydir dest="${myFirstPrjCloudHome}/@{project}/target/classes"src="${myFirstPrjCloudHome}/@{project}/src/main/java" excludes="**/*.java"></copydir><delete dir="${myFirstPrjCloudHome}/@{project}/target/classes" includes="**/CVS" /><delete dir="${myFirstPrjCloudHome}/@{project}/target/classes" includes="**/*.java" /></sequential></macrodef><macrodef name="flex-compile"><attribute name="file" description="flex file path" /><sequential><mxmlc services="${myFirstPrjCloudHome}/console-web/WebContent/WEB-INF/flex/services-config.xml"file="${FLEX_APP_SRC_HOME}/@{file}.mxml" actionscript-file-encoding="UTF-8"keep-generated-actionscript="false" incremental="true" context-root="${CONSOLE_CONTEXT_ROOT}" locale="zh_CN" strict="true"output="${myFirstPrjCloudDistDir}/flex/@{file}.swf" debug="${debug}" ><load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" /><source-path path-element="${FLEX_HOME}/frameworks" /><compiler.library-path dir="${FLEX_HOME}/frameworks" append="true"><include name="libs" /><include name="../bundles/{locale}" /></compiler.library-path><compiler.library-path dir="${myFirstPrjCloudHome}/console-flex" append="true"><include name="libs" /></compiler.library-path><compiler.source-path path-element="${myFirstPrjCloudHome}/console-flex/src/main/flex" /></mxmlc><!--删除缓存文件<delete file="${myFirstPrjCloudDistDir}/flex/@{file}.swf.cache" /> --></sequential></macrodef></project>
build.bat:
@echo offset ANT_OPTS=-server -Xms512m -Xmx1024m -XX:MaxPermSize=400mF:\myFirstAntPrj-cloud\apache-ant-1.7.1\bin\ant %*pause
注意:其中scp需要特定jar包支持
Scp task是Ant的一个optional task, 所以要运行这个task, 首先需要解决dependencies — jsch(java对ssh2的实现). 注: jsch需要0.1.29以上版本. 可以去Jsch主页下载.
*************************待整理东东*************************
ant可以使用扩展SCP标签实现远程部署及上传,但是如果使用ANT远程删除Linux上的文件夹,应该如何操作呢?
远程上传(需要特定的jar包支持):
<scp file="${ApusicCloudDistDir}/console-web/apusic-cloud.war" todir="${serverUser}:${serverPwd}@${serverIp}:${serverConsoleDir}" trust="true" />
++++++Ant删除文件夹++++++++++++
<delete>
<fileset dir= ". " includes= "**/*.class "/>
</delete>
# <!-- 删除文件夹 -->
# <target name="delete">
# <delete dir="${class.root}" />
# </target>
在执行Delete Task时使用文件过滤的实例
(1)删除单个文件的实例:
<delete file="/lib/ant.jar"/>
这个例子的作用是删除lib目录下的ant.jar文件。
(2)删除目录的实例:
<delete dir="lib"/>
这个例子的作用是删除lib目录,包括这个目录的所有子目录及文件,可以通过include或exclude类型指定删除的部分文件,而不是目录下的所有文件。
(3)删除所有备份文件和空的目录的例子:
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
参考网址:
http://soft-app.iteye.com/blog/928871
http://blackbaby.iteye.com/blog/904045
http://thiner.iteye.com/blog/975040
http://nstar.iteye.com/blog/129653
http://chenjumin.iteye.com/blog/425404
2: http://topic.csdn.net/t/20060617/13/4827140.html
3、*************************************************
CruiseContorl
http://cruisecontrol.sourceforge.net/
可以定时根据ant脚本构建
提供E-mail通知
还有一个web界面
****************************************************
采用日构建很有效,但持续集成会更有效的多。
更详细的信息,请参见:
http://hyysguyang.iteye.com/admin/show/38610
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
嗯,的确是。常用两个功能:Macro,Import。特别是Import,可以做到定制一个通用模板,然后每个子项目都import进来,override抽象的target。就像模板模式一样,用来简化构建脚本还是很不错的。
这篇文章不错:
http://www.oracle.com/technology/pub/articles/bodewig_ant1.6.html
页:
[1]