一、Ant介绍

Ant是Java的生成工具,是Apache的核心项目;直接在apache官网下载即可;

Ant类似于Unix中的Make工具,都是用来编译、生成;

Ant是跨平台的,而Make不能;

Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目;

下载地址: http://ant.apache.org/bindownload.cgi

二、Ant配置

在Ant安装之前需要安装好JDK,并配置好JAVA_HOME;

Ant配置:

1.新建环境变量ANT_HOME:值为ANT的主目录;

2.在path中配置%ANT_HOME%/bin;

配置完成之后,打开命令行,输入ant,当出现:

Buildfile: build.xml does not exist!
Build failed

时说明配置完成;

三、Ant入门

ant的默认生成文件为build.xml;输入ant后,ant会在当前目录下搜索是否有build.xml,如果有,则执行;当然也可以自定义生成文件,通过ant -f a.xml即可指定a.xml为生成文件;

ant的生成文件是xml文件,整体结构为:

1 <?xml version="1.0" encoding="GBK"?>
2 <project default=" targetname">
3     <target name="name">
4     </target>
5 </project>

project是生成文件的根元素,表示一个工程;

target是project的子元素,表示一个任务;一个project中可以定义多个target元素,表示多个任务;

default属性表示默认执行的target,如果ant命令没有指定target,则执行default的target;

ant targetname;则会执行此target,而忽略default设置的target;

注意:不能有两个相同的targetname;

代码举例:创建并删除hello目录;

01 <?xml version="1.0" encoding="gbk"?>
02 <project default="delete">
03     <property name="name" value="xiazdong"/>
04     <target name="delete" depends="mkdir">
05         <delete dir="${name}"/>
06     </target>
07     <target name="mkdir">
08         <mkdir dir="${name}"/>
09     </target>
10 </project>

四、Ant的XML元素详解

1.<project>元素

是Ant生成文件的根元素;一般形式如:

<project default="    "[ basedir="." ] [name="projectname"]>

default的值是默认执行的target名;

basedir是指定基准目录,一般都是basedir="."

name是指工程名字;

2.<target>元素

是project元素的子元素,在project元素中能够有多个target;一般形式如下:

<target name="    "  [ depends="  A  "]  [ if ="  prop1 "] [ unless=" prop2"]>

</target>

name表示target的名称;

depends中填写其他target名称(可以有多个名称,用逗号分割),表示只有targetA完成之后才能够做此target,如果执行此target,则会先执行A;

if的值表示一个属性名,只有设置了该属性名,才能执行此target;

unless的值表示一个属性名,只有没有设置该属性名,才能执行此target;

3.<property>元素

是project的子元素;property用于定义属性,一般形如:

(1)<property name="  pname  "   value="  pvalue   "/>

如果要使用此property,则需要${pname};类似于表达式语言;

(2)<property file="a.properties"/> 通过此属性文件导入属性;

如果单纯想使用$,则通过$$表示;

五、Task介绍

在Ant中Task是target的子元素,即一个target中可以有多个task;而Task分为:

(1)核心Task;

(2)可选Task;

(3)自定义Task;

下面介绍一些常用的核心Task;

1.<echo>

用于单纯输出,一般形如:

<echo>      </echo>

举例:<echo>hello</echo>

2.<javac>

用于编译java文件,一般形式如下:

<javac srcdir="  src   "       destdir="  class   "  [classpath="     "]/>;

srcdir是编译此文件夹下或子文件夹下的全部java文件;

destdir是编译后的class文件放置路径;

classpath指定第三方类库;

3.<java>

运行java类,一般形式如下:

<java classname="    " fork="yes">

【<arg line="param1   param2   param3"/>】

</java>

classname用于指定运行的类名称;

fork="yes"表示另起一个JVM来执行java命令,而不是中断ANT命令,因此fork必须为yes;

4.<jar>

打包成jar包;一般形式如下:

<jar destfile="  main.jar" basedir="    ">

<manifest>

<attribute name="Main-Class"   value="classname"/>    <!--指定主类-->

</manifest>

</jar>

destfiie的值为jar包的名称;一般为${dest}/main.jar;

basedir的值是需要打成jar包的目录;一般为${classes}

manifest表示设置META-INF;

5.<mkdir>

创建目录,可以多层创建,比如a\b\c,则可以连续创建,一般形式如下:

<mkdir dir="a\b"/>

6.<delete>

删除目录,一般形式如下:

<delete dir="a\b"/> 可以删除a目录下的b目录;

<delete file="1.txt"/>可以删除文件;

7.<tstamp>

时间戳,一般形式如下:

<tstamp />

接下来可以使用${DSTAMP}进行调用当前时间;

8.<copy>

复制文件,一般形式如下:

<copy file="file1" tofile="file2"/>

file是源文件;

tofile是目标文件;

9.<move>

移动文件,一般形式如下:

<move file="file1" tofile="file2"/>

file是源文件;

tofile是目标文件;

10.<replace>

用于替换字符串,类似于String的replace操作,一般形式如下:

<replace file="filename" token="old" value="new"/>

file表示要执行替换的文件;

token表示被替换的字符串;

value表示替换的字符串;

代码举例:一般项目中的ant结构

01 <project default="init">
02     <property name="src" value="src"/>
03     <property name="classes" value="classes"/>
04     <property name="dest" value="dest"/>
05     <path id="classpath">
06         <pathelement path="${classes}"/>
07     </path>
08     <target name="help">
09         <echo>help -打印帮助信息</echo>
10         <echo>compile -编译java源文件</echo>
11         <echo>run -运行程序</echo>
12         <echo>build -打成jar包</echo>
13         <echo>clean -清楚全部编译生成文件</echo>
14     </target>
15     <target name="compile">
16         <delete dir="${classes}"/>
17         <mkdir dir="${classes}"/>
18         <javac srcdir="${src}" destdir="${classes}"/>
19     </target>
20     <target name="run" depends="compile">
21         <java classname="org.xiazdong.Test" fork="yes">
22             <classpath path="${classes}"/>
23         </java>
24     </target>
25     <target name="build" depends="run">
26         <delete dir="${dest}"/>
27         <mkdir dir="${dest}"/>
28         <jar destfile="${dest}/Test.jar" basedir="${classes}">
29             <manifest>
30                 <attribute name="Main-Class" value="org.xiazdong.Test"/>
31             </manifest>
32         </jar>
33     </target>
34     <target name="clean">
35         <delete dir="${classes}"/>
36         <delete dir="${dest}"/>
37     </target>
38 </project>

总结一下:

01 <?xml version "1.0" encoding="GBK"?>
02 <project name="Test" default="" basedir=".">
03     <property name="src" value="${basedir}\src"/>
04     <property file="${basedir}\a.properties"/>
05     <!--
06     path用法
07         1.id属性表示编号,用于被引用
08     -->
09     <path id="classpath">
10     <!--
11     pathelement的用法
12         1.path表示多个目录,用“;”隔开目录  
13         2.location表示一个目录
14     -->
15         <pathelement path="lib;src"/>
16         <pathelement location="lib"/>
17     <!--
18     dirset的用法
19         1.dir属性指定根目录
20         2.子元素<include name="    "/>表示包含的目录
21         3.子元素<exclude name="    "/>表示不包含的目录
22     -->
23         <dirset dir="lib">
24             <include name="**/*Test*"/>
25             <exclude name="**/class"/>
26         </dirset>
27     <!--
28     filelist的用法
29         1.dir属性指定根路径
30         2.files属性指定文件名的列表,用","隔开
31     -->
32         <filelist dir="lib" files="a.xml,b.xml"/>
33     <!--
34     fileset用法
35         1.dir属性指出根路径
36         2.子元素<include name="   "/>指定包含的文件名
37     -->
38         <fileset dir="lib">
39             <include name="**/*.jar"/>
40         </fileset>
41     </path>
42     <!--
43     target用法
44         1.表示任务,子元素为各种task的集合;
45     -->
46     <target name="target1">
47     <!--
48     javac用法
49         1.srcdir表示java文件的目录
50         2.destdir表示class文件的保存目录
51     -->
52         <javac srcdir="src" destdir="bin">
53     <!--
54     classpath用法
55         1.refid引用前面的path指定的路径
56     -->
57             <classpath refid="classpath"/>
58         </javac>
59     <!--
60     java用法
61         1.classname表示要运行的类
62         2.fork="yes"一定要写上!!
63     -->
64         <java classname="Test" fork="yes">
65             <classpath refid="classpath"/>
66     <!--
67         arg表示指定的参数
68     -->
69             <arg value="a b c"/>
70         </java>
71     <!--
72     echo表示输出
73     -->
74         <echo>Hello world</echo>
75     <!--
76     copy表示复制文件
77     delete表示删除文件
78     mkdir表示创建目录
79     move表示移动文件
80     -->
81         <copy file="src.txt" tofile="dest.txt"/>
82         <delete dir="src"/>
83         <mkdir dir="src"/>
84         <move file="src.txt" tofile="dest.txt"/>
85     </target>
86 </project>

五、在Eclipse中使用Ant

在Eclipse中虽然没有内置创建Ant的生成文件,但是可以通过配置完成;

(1)点击  window-->preferences-->editors-->file associations;

(2)在File types中创建一个build.xml,并将associated editor的默认项设置为ant editor即可;

当在项目中创建一个build.xml时,这个文件就是ant的生成文件;

六、模式匹配

在Ant中有一些基本的模式匹配的功能,比如:

*表示任意字符串,**表示任意数量的目录;

(1)*.java,表示任意的java文件;

(2)*/*.java表示当前目录的任意java文件;

(3)**/*.java表示当前目录结构下的任意java文件;

<fileset dir="   src  ">

<include name="**/*.java"/>

<include name="**/*.txt"/>

<exclude name="**/*Test*"/>

</fileset>

表示包含src目录下的所有java和txt文件,排除文件名包含Test的文件;

举例:将java文件拷贝到dest文件夹下;

1 <copy todir="dest"><span style="white-space:pre;">    </span><fileset dir="."><spanstyle="white-space:pre;">       </span><include name="**/*.java"/><span style="white-space:pre;"> </span></fileset>
2 </copy>

七、自定义任务

自定义任务类似于JSP中的自定义标签;

步骤:

(1)继承org.apache.tools.Task;

(2)覆写public void execute()throws BuildException;

(3)在类中添加的属性即为任务标签的属性;

(4)在build.xml中声明任务<taskdef name="   "   classname="    "   classpath="bin"/>

举例:复制文件;

01 package org.tools;
02  
03 import java.io.BufferedReader;
04 import java.io.File;
05 import java.io.FileInputStream;
06 import java.io.FileWriter;
07 import java.io.IOException;
08 import java.io.InputStreamReader;
09 import java.io.PrintWriter;
10  
11 import org.apache.tools.ant.BuildException;
12 import org.apache.tools.ant.Task;
13 public class SimpleTask extends Task{
14     private File file;
15     private File tofile;
16     public File getFile() {
17         return file;
18     }
19     public void setFile(File file) {
20         this.file = file;
21     }
22     public File getTofile() {
23         return tofile;
24     }
25     public void setTofile(File tofile) {
26         this.tofile = tofile;
27     }
28     @Override
29     public void execute() throws BuildException {
30         try {
31             PrintWriter out = new PrintWriter(new FileWriter(tofile));
32             BufferedReader in = new BufferedReader(new InputStreamReader(newFileInputStream(file)));
33             String line = null;
34             while((line=in.readLine())!=null){
35                 out.println(line);
36             }
37             out.close();
38             in.close();
39         catch (IOException e) {
40             e.printStackTrace();
41         }
42          
43     }
44      
45 }

build.xml

查看源码 打印?
1 <taskdef name="MyCopy" classname="org.tools.SimpleTask" classpath="bin"></taskdef>
2     <target name="mycopy">
3         <MyCopy file="2.txt" tofile="output.txt"/>
4     </target>
原文diz

Ant基础介绍(转载)相关推荐

  1. day23:shell基础介绍 alias及重定向

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都 ...

  2. Zabbix 3.0 基础介绍 [一]

    zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利zabb ...

  3. 深度学习与计算机视觉系列(1)_基础介绍

    转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...

  4. Docker 基础介绍及配置安装 [一]

    Docker 基础介绍及配置安装 [一] Docker 基础介绍及配置安装 [一] Docker 时间:2016年11月2日 Docker介绍 Docker是Docker.lnc公司开源的一个基于LX ...

  5. Web3D编程入门总结——WebGL与Three.js基础介绍

    1 /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成"webgl与three.js基础介绍"."面向对象的基础3D场景框架编写".&quo ...

  6. 【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍

    最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门"计算机图形与动画(Computer Graphics & ...

  7. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  8. python介绍和用途-Python基础介绍(一)

    Python基础介绍(一) 1. python是什么编程语言 编译型与解释型 ​编译器吧源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以极其语言来运行此程序,速度很快 ...

  9. STL体系结构与内核分析-2-STL体系结构基础介绍(侯捷)--笔记

    STL体系结构与内核分析(侯捷) 2.STL体系结构基础介绍 STL设计方式与OO(面向对象)不同的地方,OO鼓励数据和处理数据的方法都放在类里,而STL的数据在容器里,操作数据的方法在其他部件里(模 ...

最新文章

  1. SQLServer更改sa用户名
  2. 内存首地址为1000h_C++虚继承,菱形继承,内存分布
  3. 面试题40:数组中只出现一次的数字
  4. 关于动态修改定时器的时间间隔
  5. 7-8垃圾箱分布_您认为有关垃圾收集的7件事-完全错了
  6. 解决:VMware DHCP Service 服务无法启动
  7. web服务器中启用作业储存_如何在Kubernetes中启用无服务器计算
  8. 打造“5G+IoT”生态,共创产业繁荣沃土
  9. 毛骨悚然,亚马逊AI突然笑出声来
  10. swift中_的用法,忽略默认参数名。
  11. linux内核态删除文件函数,初探Linux内核态——通过proc文件系统作快速问题定位...
  12. 2018尚硅谷Git和GitHub视频教程
  13. 6-3 There is No Free Lunch (40分)
  14. bandicam去水印
  15. python的交并补_Python 集合的交差并补操作及方法
  16. wordpress 数据库_如何一键优化您的WordPress数据库
  17. LightningChart JS Crack,2D 和 3D JavaScript 图表
  18. 异同移动平均线原理(macd)
  19. 强网杯2021 ctf线上赛ezmath wp(#超详细,带逆向新手走过一个又一个小坑)
  20. 每日新闻:国务院印发“双创”升级版意见;北京城区禁止新建数据中心;亿元融资威客瞄准大数据和人工智能;工信部对信息通信发展四点倡议...

热门文章

  1. 关于高阶导数的一个不等式估计
  2. 深度学习(二十四)矩阵分解之基于k-means的特征表达学习
  3. LeetCode18.四数之和 JavaScript
  4. Mysql Oracle 工具推荐
  5. 科沃斯旺宝与阿里云联合参加通信展
  6. 微信支付报错:统一下单和拉起支付的appid不一致(原创)
  7. css - Position定位属性与层级关系
  8. 生成建表脚本up_CreateTable
  9. IOS开发之sqlite封装
  10. Servlet一次乱码排查后的总结