Ant基础介绍(转载)
一、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 = "." >< span style = "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( new FileInputStream(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 >
|
Ant基础介绍(转载)相关推荐
- day23:shell基础介绍 alias及重定向
2019独角兽企业重金招聘Python工程师标准>>> 1.shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都 ...
- Zabbix 3.0 基础介绍 [一]
zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利zabb ...
- 深度学习与计算机视觉系列(1)_基础介绍
转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...
- Docker 基础介绍及配置安装 [一]
Docker 基础介绍及配置安装 [一] Docker 基础介绍及配置安装 [一] Docker 时间:2016年11月2日 Docker介绍 Docker是Docker.lnc公司开源的一个基于LX ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
1 /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成"webgl与three.js基础介绍"."面向对象的基础3D场景框架编写".&quo ...
- 【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍
最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门"计算机图形与动画(Computer Graphics & ...
- Android NDK开发之 NEON基础介绍
原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...
- python介绍和用途-Python基础介绍(一)
Python基础介绍(一) 1. python是什么编程语言 编译型与解释型 编译器吧源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以极其语言来运行此程序,速度很快 ...
- STL体系结构与内核分析-2-STL体系结构基础介绍(侯捷)--笔记
STL体系结构与内核分析(侯捷) 2.STL体系结构基础介绍 STL设计方式与OO(面向对象)不同的地方,OO鼓励数据和处理数据的方法都放在类里,而STL的数据在容器里,操作数据的方法在其他部件里(模 ...
最新文章
- SQLServer更改sa用户名
- 内存首地址为1000h_C++虚继承,菱形继承,内存分布
- 面试题40:数组中只出现一次的数字
- 关于动态修改定时器的时间间隔
- 7-8垃圾箱分布_您认为有关垃圾收集的7件事-完全错了
- 解决:VMware DHCP Service 服务无法启动
- web服务器中启用作业储存_如何在Kubernetes中启用无服务器计算
- 打造“5G+IoT”生态,共创产业繁荣沃土
- 毛骨悚然,亚马逊AI突然笑出声来
- swift中_的用法,忽略默认参数名。
- linux内核态删除文件函数,初探Linux内核态——通过proc文件系统作快速问题定位...
- 2018尚硅谷Git和GitHub视频教程
- 6-3 There is No Free Lunch (40分)
- bandicam去水印
- python的交并补_Python 集合的交差并补操作及方法
- wordpress 数据库_如何一键优化您的WordPress数据库
- LightningChart JS Crack,2D 和 3D JavaScript 图表
- 异同移动平均线原理(macd)
- 强网杯2021 ctf线上赛ezmath wp(#超详细,带逆向新手走过一个又一个小坑)
- 每日新闻:国务院印发“双创”升级版意见;北京城区禁止新建数据中心;亿元融资威客瞄准大数据和人工智能;工信部对信息通信发展四点倡议...