Ant与批处理(win环境)学习3

此篇主要讲实践,大多数情况下是直接贴的代码了

build.properteis:
#created by myFirstAntPrj
#Sat Jan 16 14:25:56 CST 2010
debug=true
optimize=false
cvsroot=:pserver:username@ip:/usr/local/myFirstPrjdev
myFirstPrjCloudHome=myFirstPrjCloud
myFirstPrjCloudDistDir=dist
JAVA_HOME=F:/myFirstAntPrj-cloud/jdk1.6.0_16
FLEX_HOME=sdks/4.0.0
FLEX_APP_SRC_HOME=${myFirstPrjCloudHome}/console-flex/src/main/flex
CONSOLE_CONTEXT_ROOT=test
#将构建后生成的myFirstPrj-cloud.war和datacenter.war上传到测试服务器
serverIp=192.168.6.240
serverUser=root
serverPwd=123456
serverConsoleDir=/opt/myFirstAntPrj-cloud/webconsole/domains/mydomain/applications
serverDatacenterDir=/opt/myFirstAntPrj-cloud/datacenter/domains/mydomain/applications
serverConsoleDeployDir=/opt/myFirstAntPrj-cloud/webconsole/domains/mydomain/deploy
serverDatacenterDeployDir=/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 off
set ANT_OPTS=-server -Xms512m -Xmx1024m -XX:MaxPermSize=400m
F:\myFirstAntPrj-cloud\apache-ant-1.7.1\bin\ant %*
pause


[color=red]注意:[/color]其中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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值