`

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


注意:其中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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics