首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ant 应用

2012-12-21 
ant 使用build.xml?xml version1.0?project defaultdist nametest_antproperty namesrcDi

ant 使用

build.xml

<?xml version="1.0"?><project default="dist" name="test_ant"><property name="srcDir" location="src" /><property name="buildDir" location="build" /><property name="distDir" location="dist" /><target name="init"><tstamp /><mkdir dir="${buildDir}" /><mkdir dir="${distDir}" /></target><target name="compile" depends="init"><javac srcdir="${srcDir}" destdir="${buildDir}" /></target><target name="dist" depends="compile"><jar destfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}"><manifest><attribute name="Built-By" value="${user.name}" /><attribute name="Main-Class" value="package.Main" /></manifest></jar><jar destfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}" /></target><target name="clean"><delete dir="${buildDir}" /><delete dir="${distDir}" /></target></project>
一、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文件,整体结构为:

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结构

?

六、模式匹配

在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文件夹下;

举例:复制文件;

[java] view plaincopy
  1. package?org.tools;????
  2. import?java.io.BufferedReader;??import?java.io.File;??
  3. import?java.io.FileInputStream;??import?java.io.FileWriter;??
  4. import?java.io.IOException;??import?java.io.InputStreamReader;??
  5. import?java.io.PrintWriter;????
  6. import?org.apache.tools.ant.BuildException;??import?org.apache.tools.ant.Task;??
  7. public?class?SimpleTask?extends?Task{??????private?File?file;??
  8. ????private?File?tofile;??????public?File?getFile()?{??
  9. ????????return?file;??????}??
  10. ????public?void?setFile(File?file)?{??????????this.file?=?file;??
  11. ????}??????public?File?getTofile()?{??
  12. ????????return?tofile;??????}??
  13. ????public?void?setTofile(File?tofile)?{??????????this.tofile?=?tofile;??
  14. ????}??????@Override??
  15. ????public?void?execute()?throws?BuildException?{??????????try?{??
  16. ????????????PrintWriter?out?=?new?PrintWriter(new?FileWriter(tofile));??????????????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(new?FileInputStream(file)));??
  17. ????????????String?line?=?null;??????????????while((line=in.readLine())!=null){??
  18. ????????????????out.println(line);??????????????}??
  19. ????????????out.close();??????????????in.close();??
  20. ????????}?catch?(IOException?e)?{??????????????e.printStackTrace();??
  21. ????????}????????????
  22. ????}????????
  23. }??

build.xml

[html] view plaincopy
  1. <taskdef?name="MyCopy"?classname="org.tools.SimpleTask"?classpath="bin"></taskdef>??????<target?name="mycopy">??
  2. ????????<MyCopy?file="2.txt"?tofile="output.txt"/>??????</target>?

摘自http://blog.csdn.net/xiazdong/article/details/7038851

?

?

热点排行