`

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

阅读更多
   背景:最近个人附带的负责维护测试服务环境,每天早上的过程大致如下:
远程登录到主机438——进入构建目录——删除Cloud和dist两个文件夹——进入ant目录——键入build开始构建(由于系统很大一般要12分钟)——构建完成之后打开SSH File Transfer将新构建的连个文件夹上传到Rhel服务器——在Rhel中启动cloud和dc。
   刚开始还好,搞得天数多了难免不生厌,于是想如何使上述这一过程做到最大程度的自动化呢?
   想到的一种实现方式:
a、将build做成随机启动(因服务器一般都不关闭的,因此考虑做成定时的)(写.cmd脚本)
b、将删除与上传工的作放进构建脚本中(修改ant脚本)
于是开始行动, 先去系统地学习一下ant的使用... ...


————————Ant学习之简单Demo——————
一、基本概念
1、什么是Ant
2、什么是构建
3、使用Ant的优势(相对于make而言)
   .跨平台
   .使用简单
   .语法清晰
   .功能强大

二、Ant安装

1、http://ant.apache.org/bindownload.cgi下载Ant,当前最新版本为1.8.1
2、 与配置Jdk的环境类似,新建一个变量:ANT_HOME=ant所在目录
    设置Path为: %ANT_HOME%\bin
注意:如果要让Ant能够支持Junit,需要将JUnit的junit.jar放置在Ant的lib目录并记得修改ClassPath中原有关Junit的设定。
3、 进入CMD界面,键入ant -v
    若出现有关版本的提示则表明你的安装成功了。
好了,让我们开始进入Ant的编写... ...

三、Ant简单Demo
目的: 使用Ant来达成目的,完成一件事情的实例
.编写一个程序
.编译它们
.把它们打成jar包
.设定它们的存放位置
.运行它们
1、首先写一个HelloWorld.java
package test.ant;

public class HelloWorld {
	
	public static void main(String[] args) {
		System.out.println("Welcome to The Ant World");
	}

}

2、 撰写构建脚本build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="run" basedir=".">
   <property name="src" value="src"/>
   <property name="dest" value="classes"/>
   <property name="hello_jar" value="hello1.jar"/>
   <target name="init">
      <mkdir dir="${dest}"/>
   </target>
   
   <target name="compile" depends="init">
      <javac srcdir="${src}" destdir="${dest}" includeantruntime="false"/>
   </target>
   
   <target name="build" depends="compile"> 
      <jar jarfile="${hello_jar}" basedir="${dest}"/>
   </target>
   
   <target name="run" depends="build">
      <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
   </target>
   
   <target name="clean">
      <delete dir="${dest}"/>
      <delete file="${hello_jar}"/>
   </target>
   
   <target name="return" depends="clean,run">
      <ant target="clean"/>
      <ant target="run"/>
   </target>
</project>

3、解读脚本
把你想做的每一件事情写一个target,depends是它所依赖的target,在执行当前的target之前必须先执行depends中所定义的target。
  注意:上述脚本中return这个target是一个特殊的target,相当于还原
4、执行
键入ant,你会发现你所定义的一个个任务都已经完成。有时我们可能并不想执行程序,只是想执行其中的某些步骤,那么你可以采取如下的做法:
  ant targetName 即可,如我只执行clean就键入 ant clean
  ^_^ ^_^ Demo至此完工,休息一下,继续后面的学习... ...

途中遇到的问题:
1、 ant warning:'includeantruntime' was not set,defaulting to build.sysclasspath=last;set to false for repeatable builds
解决方案:在javac标签中加入属性includeantruntime="false" 便可以了

—————————Ant学习之Ant整合————————————
  背景:我们目前的项目一共分成了8个模块,共13个小工程,不同的小组负责不同的模块或者工程,为了测试,各个小组都是自己写的build.xml,而我作为测试维护人员负责把这些模块组合到一块使用。写一个build.xml,这时我就惆怅了:
   1、重新写一个build.xml?——这貌似很麻烦
   2、 尽量利用同事已经写好的build.xml,减少自己的工作
   也正因为决定采取第二种方式,现在开始学习Ant整合
———————————————————————————————————————————————————————————
  假设只有3个模块,每个小组负责一个模块,他们分别有一个src和写好的build.xml。此时你拿到他们的src,你需要做的是建立三个文件夹src1,src2,src3并分别把他们的src和build.xml合并写一个新的build.xml。
  
<?xml version="1.0" encoding="UTF-8"?>
<project name="main" default="build" basedir=".">
   <property name="bin" value="${basedir}\bin"/>
   <property name="src1" value="${basedir}\src1"/>
   <property name="src2" value="${basedir}\src2"/>
   <property name="src3" value="${basedir}\src3"/>
   <target name="init">
      <mkdir dir="${bin}"/>
   </target>
   
   <target name="run">
      <ant dir="${src1}" target="run"/>
      <ant dir="${src2}" target="run"/>
      <ant dir="${src3}" target="run"/>
   </target>
   
   <target name="clean">
      <ant dir="${src1}" target="run"/>
      <ant dir="${src2}" target="run"/>
      <ant dir="${src3}" target="run"/>
   </target>
   
   <target name="build" depends="init">
      <copy todir="${bin}">
      	<fileset dir="${src1}">
      		<include name="*.jar"/>
      	</fileset>
      		<fileset dir="${src2}">
      		<include name="*.jar"/>
      	</fileset>
      		<fileset dir="${src3}">
      		<include name="*.jar"/>
      	</fileset>
      </copy>
   </target>
   
   <target name="rebuild" depends="build,clean">
      <ant target="clean"/>
      <ant target="build"/>
   </target>
</project>
OK,你的任务完成了!

——————————Ant进阶学习——————————
如你所见,上述做法还是存在很大的问题,重点体现在重复性的东西比较多,每次修改一个目录导致要修改多处,是否能让工作做得更好一点呢?
  引入两个东西:
  1、property
  2、xml include
这两个东西都有一个功能,就是能把build.xml中</property>分离出来共同使用。
差异:
  property的特点是维护简单,只需要简单的键值对
  xml include的特点是不但可以提取出属性,连target也可以提取

——————————————————————————————————————
   继续上述例子,如我们想把src1 src2 src3这三个属性从xml中提出来,可以新建一个all.properties,里面的内容如下:
src1=文件位置...
src2=文件位置...
src3=文件位置
然后你的build.xml可以这样写,别人只需要修改你的配置文件all.properties而不需修改你的build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="main" default="build" basedir=".">
   <property name="bin" value="${basedir}\bin"/>
   <property file="all.properties"/>
   <target name="init">
      <mkdir dir="${bin}"/>
   </target>
   
   <target name="run">
      <ant dir="${src1}" target="run"/>
      <ant dir="${src2}" target="run"/>
      <ant dir="${src3}" target="run"/>
   </target>
   
   <target name="clean">
      <ant dir="${src1}" target="run"/>
      <ant dir="${src2}" target="run"/>
      <ant dir="${src3}" target="run"/>
   </target>
   
   <target name="build" depends="init">
      <copy todir="${bin}">
      	<fileset dir="${src1}">
      		<include name="*.jar"/>
      	</fileset>
      		<fileset dir="${src2}">
      		<include name="*.jar"/>
      	</fileset>
      		<fileset dir="${src3}">
      		<include name="*.jar"/>
      	</fileset>
      </copy>
   </target>
   
   <target name="rebuild" depends="build,clean">
      <ant target="clean"/>
      <ant target="build"/>
   </target>
</project>

   有时候你想给每个小组的build.xml中添加几个target,一种做法是每个build.xml中写入target,但是有一种更好的做法: 
    你可以写一个include.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
  <property name="src" value="src"/>
  <property name="dest" value="classes"/>
  <target name="test">
    <ant target="run"/>
  </target>
</xml>

然后你可以按如下方式更改你的每个build.xml,在每个build.xml中写入:
 <!-- include a xml file, it can be common property, can be also a target -->
  <!DOCTYPE project[
     <!ENTITY share-variable SYSTEM "file:../include.xml">
  ]>
   然后再在build.xml中的<project></project>之间写入 &share-variable;即可
如下:
<?xml version="1.0" encoding="UTF-8"?>
  <!-- include a xml file, it can be common property, can be also a target -->
  <!DOCTYPE project[
     <!ENTITY share-variable SYSTEM "file:../include.xml">
  ]>
<project name="HelloWorld" default="run" basedir=".">
	<!--use the include -->
	&share-variable;
	<!--define the property -->
	<!-- via include
	   <property name="src" value="src"/>
   <property name="dest" value="classes"/>
	-->
   <property name="hello_jar" value="hello1.jar"/>
	<!--define op -->
   <target name="init">
      <mkdir dir="${dest}"/>
   </target>
   
   <target name="compile" depends="init">
      <javac srcdir="${src}" destdir="${dest}" includeantruntime="false"/>
   </target>
   
   <target name="build" depends="compile"> 
      <jar jarfile="${hello_jar}" basedir="${dest}"/>
   </target>
   
   <target name="run" depends="build">
      <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
   </target>
   
   <target name="clean">
      <delete dir="${dest}"/>
      <delete file="${hello_jar}"/>
   </target>
   
   <target name="return" depends="clean,run">
      <ant target="clean"/>
      <ant target="run"/>
   </target>
</project>
分享到:
评论

相关推荐

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

    NULL 博文链接:https://sunshineyao.iteye.com/blog/996480

    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转码

    本文将深入探讨Ant如何实现批处理Unicode转码,以及这一过程中的关键知识点。 首先,我们需要理解Unicode编码的重要性。Unicode是一个国际标准,旨在统一世界上所有字符的编码,包括各种语言、符号和特殊字符。在...

    ant_学习笔记

    ### ant学习笔记:深入了解ant构建工具 #### 引言 `ant`,作为一款源自动网络的学习笔记,主要探讨了Apache Ant这一强大的构建工具。Apache Ant是一款开源的、跨平台的构建工具,专为Java应用程序设计,旨在简化并...

    Ant 1.9.1 学习笔记

    Ant 1.9.1是Ant的一个版本,学习笔记通常记录了使用该工具的基本操作和配置方法。 ### Ant的下载和安装 要使用Ant,首先需要下载并安装。在Windows系统中,通常需要配置环境变量以便于命令行中使用Ant命令。ANT_...

    Ant打包编译部署工具学习笔记2(附件中含有测试项目)

    在"Ant打包编译部署工具学习笔记2"中,我们可以预期博主分享了关于如何利用Ant进行更复杂的构建操作,例如集成测试、优化和打包。这可能包括如何配置build.xml文件,添加自定义任务,以及如何处理依赖关系。由于没有...

    ant个人学习笔记和简单示例

    总的来说,这个“ant个人学习笔记和简单示例”应该能帮助你掌握Ant的基本用法,理解构建过程的自动化,以及如何编写和维护自己的构建文件。通过学习和实践其中的示例,你将能够熟练地运用Ant来构建和管理Java项目,...

    Jenkins+SVN+Ant持续集成环境配置笔记

    ### Jenkins+SVN+Ant持续集成环境配置笔记 #### 一、引言 随着软件开发项目的日益复杂化,持续集成(Continuous Integration, CI)已成为现代软件工程中的一个重要组成部分。通过持续集成,团队能够频繁地集成代码...

    ant 学习 笔记 一个简单的java 编译部署实例

    根据提供的文件信息,这里将深入解析“ant学习笔记:一个简单的java编译部署实例”,涵盖标题、描述、标签以及部分内容中提及的关键知识点。 ### Apache Ant简介 Apache Ant是一款开源的Java环境下的自动化构建...

    Ant构建工具学习笔记

    《Ant构建工具学习指南》 Ant,作为Java领域的一个强大构建工具,它的主要作用在于将复杂的项目构建过程规范化、自动化,使得开发者能够更专注于代码的编写而非构建流程。本文将深入探讨Ant的基本概念、安装配置、...

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

    - 在Windows上设置Ant通常涉及解压这个ZIP文件,设置ANT_HOME环境变量,并将bin目录添加到PATH环境变量中。 4. **使用Ant** - 用户可以通过命令行工具运行Ant,例如使用"ant clean compile"命令来清理并编译项目...

    ant的学习笔记.doc

    ### ant的学习笔记知识点详解 #### 一、Ant的作用与特性 Ant是一款强大的自动化构建工具,主要应用于Java项目,能够高效地处理项目的编译、打包、测试等任务。它采用XML格式编写构建脚本,这使得Ant具有良好的跨...

    Jenkins+SVN+Ant持续集成环境配置笔记.pdf

    首先,Eclipse与SVN的集成是持续集成环境搭建的关键第一步。通过Eclipse提交代码到SVN,确保所有开发人员的代码更改都存储在同一个集中式仓库中,便于管理。在Eclipse中集成SVN通常需要借助于外部插件,比如...

    ant 构建环境使用

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

    Ant学习笔记

    **Ant学习笔记** Ant是一个基于Java的构建工具,它的全称是Another Neat Tool,主要应用于Java项目的构建。Ant的设计理念是通过XML配置文件来定义构建过程,而非依赖于特定平台的shell命令。每个构建任务是由实现了...

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

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

Global site tag (gtag.js) - Google Analytics