`

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
分享到:
评论

相关推荐

    Ant和批处理脚本.rar

    然而,批处理脚本的缺点在于它的功能相对有限,不适合复杂的跨平台任务,且与现代开发环境的集成不如Ant等专业构建工具。 将Ant和批处理脚本结合使用,可以在Windows环境中实现更强大的自动化流程。例如,Ant可以...

    利用ant,批处理一键打包,供大家参考

    利用ant进行批处理打包,一键打包,因项目不同,我的批处理和大家的肯定不同,大家可以借鉴、参考。

    unity3d android 使用ant打包批处理.

    标题"unity3d android 使用ant打包批处理"指的是使用Ant工具进行Unity3D Android项目的批量打包流程。这个流程旨在提高效率,尤其是在持续集成或频繁发布更新时,可以避免手动操作的繁琐和错误。 首先,你需要确保...

    Ant 的 (批处理)Bat 实现

    本篇将深入探讨如何利用批处理脚本(Batch Script,通常以.bat为扩展名)来实现Ant的部分功能,以及这种实现方式的优势与应用场景。 首先,Ant的核心在于XML格式的构建文件build.xml,它定义了构建过程中的任务和目标...

    Ant 批处理 Unicode转码

    3. 添加额外的Ant任务定义库,如`ant-contrib`。 4. 针对不同的需求,选择合适的编码转换方法,如使用Java I/O类或自定义Ant任务。 在实际开发中,根据项目的具体需求,可能还需要处理更多复杂情况,例如递归处理子...

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    3. **Windows上的Ant** - Ant可以在多种操作系统上运行,包括Windows。"apache-ant-1.6.5-bin"文件夹内包含了所有运行Ant所需的文件,包括JAR包和必要的脚本。 - 在Windows上设置Ant通常涉及解压这个ZIP文件,设置...

    xml_批处理学习 xml_批处理学习

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等场景。...在实际开发中,XML与批处理的结合广泛应用于持续集成、自动化测试、数据迁移等多个领域。

    Ant培训全套学习教程

    本教程将深入探讨Ant的环境配置、文件编写、使用技巧以及开发实例,让学习者能够快速掌握这一强大的自动化构建工具。 一、Ant环境配置 在开始Ant的学习之前,首先需要在本地环境中安装Java运行环境(JRE)和Java...

    ant 构建环境使用

    Apache Ant是一种广泛使用的Java构建工具,它以XML为基础来描述构建过程,使得构建脚本具有良好...在实际工作中,Ant通常与版本控制系统(如Git)、持续集成工具(如Jenkins)等配合使用,构建更复杂的自动化构建流程。

    Ant应用开发指南(学习ant的必备资料)

    《Ant应用开发指南》是IT领域...总之,《Ant应用开发指南》作为一份详实的学习资料,不仅系统地介绍了Ant的功能体系,还提供了丰富的实践案例与高级技巧,对于希望精通Ant构建工具的开发者来说,无疑是一份宝贵的财富。

    apache-ant-1.10.1-ant编译环境

    ant配置后提示不是内部命令也...3、验证ant环境配置。开始--&gt;运行--&gt;输入cmd,打开dos命令窗口。最后,在命令行下输入:ant -version,如果能显示版本号,就代表ant环境配置成功。ant -help可以查看帮助信息。

    Android Ant编译环境配置(Win)

    ### Android Ant编译环境配置(Win) #### 一、引言 随着移动互联网技术的快速发展,Android 应用开发已成为软件开发领域中的一个重要分支。在早期的 Android 开发过程中,Ant 工具链被广泛应用于项目的构建与管理...

    Ant权威指南(ant 学习)

    《Ant权威指南》是一本深度解析Apache Ant...通过学习《Ant权威指南》,开发者可以全面掌握Ant的使用,提升构建效率,确保项目的稳定和可维护性。无论你是初学者还是经验丰富的开发者,这本书都将为你提供宝贵的指导。

    ant处理cvs时环境安装

    5. **在Ant中集成CVS**:Ant提供了一系列与CVS交互的任务,例如`cvs`、`cvsdist`等。在build.xml文件中,可以通过这些任务执行常见的CVS操作,如checkout、commit、update等。例如: ```xml ${cvs.root}" package=...

    Ant 环境搭建

    随着你对Ant的深入学习,你会发现它是一个灵活且强大的工具,能有效地支持Java项目的构建过程。在实际工作中,结合源码管理和版本控制工具,如Git,以及持续集成工具,如Jenkins,能够进一步提升开发效率和项目质量...

    ant文档集合(自己学习ant时的资料)

    3. **Ant的任务(Task)** Ant的任务是执行特定操作的基本单元,例如编译Java源代码、复制文件、打包JAR等。常见的任务包括`javac`(编译Java代码)、`copy`(复制文件)、`jar`(创建JAR文件)等。用户也可以...

    ant ant ant ant

    "Ant ant ant antant ant ant antant ant ant ant" 这个描述可能是在强调Ant在项目构建过程中的重复性和不可或缺性,暗示着它在工程中的频繁使用和核心地位。 Ant的设计理念是“一切都是XML”,它通过XML格式的构建...

    Apache Ant 教程 - 极客学院

    然后,需要创建一个新的环境变量ANT_HOME,指向Ant安装文件夹的位置,并将Ant的批处理文件的路径添加到系统的PATH环境变量中。通过这些步骤,可以完成Ant的安装,并通过运行Ant的版本命令来验证安装是否成功。 安装...

Global site tag (gtag.js) - Google Analytics