Ant

ant——Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。

这里就附上我学习过程中的一个例子,里面有很好的注释。查看注释就基本上知道没个目标target的作用目的了。

 

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project name="myAntProject" default="prepross" basedir=".">
  3     <description> basedir="." 定义的是默认目录为当前目录</description>
  4     <description> ant 也是可以调试的</description>
  5     <property name="hello" value="pro"/>
  6     <property name="mk" value="my"/>
  7     
  8     <target name="init">
  9         <mkdir dir="${hello}"/>
 10     </target>        
 11     
 12     <target name="second" depends="init">
 13         <mkdir dir="${mk}"/>
 14     </target>
 15     
 16     <target name="prepross" depends="init,second">
 17         <delete dir="${hello}"/>
 18         <delete dir="${mk}"/>
 19     </target>
 20     
 21     
 22     
 23     <target name="myCompile" description="编译文件" depends="second">
 24         <javac srcdir="src" destdir="${mk}" includeAntRuntime="false"></javac>
 25     </target>
 26     
 27     <description>
 28         创建jar文件
 29         destfile="${hello}/package.jar" 存放的位置
 30         basedir="${mk}" 编译好的文件来源
 31     </description>
 32     
 33     <target name="dist" depends="myCompile">
 34         <jar destfile="${hello}/package.jar" basedir="${mk}"></jar>
 35     </target>
 36     
 37     
 38     
 39     
 40     <description>
 41         value="${user.name}" ant 提供的属性  可以直接用
 42         attribute name="Main-Class" value="package1.JframeTest.java"/>
 43         指定jar的主类 name="Main-Class"固定的要大写
 44     </description>
 45     
 46     <target name="mkjarrun" depends="myCompile">
 47         <tstamp description="时间戳 这里先获得时间 后面再使用 ${DSTAMP}"></tstamp>
 48         <jar destfile="${hello}/package-${DSTAMP}.jar" basedir="${mk}">
 49             <manifest>
 50                 <attribute name="Built-By" value="${user.name}"/>
 51                 <attribute name="Main-Class" value="package1.JframeTest"/>
 52             </manifest>
 53         </jar>
 54     </target>
 55     
 56     
 57     <target name="deltefile" description="删除文件"> 
 58         <delete file="${hello}/package.jar"></delete>
 59     </target>
 60     
 61     <description>
 62         复制和移动问文件以及目录 move copy
 63         tofile="C://A2.java"可以冲命名
 64         todir="c://"  不可以重新命名 拷贝到目录下
 65     </description>
 66     
 67     <target name="copyfile">
 68         <copy file="src/package1/A.java" tofile="C://A2.java" ></copy>
 69     </target>
 70     
 71     
 72     <target name="movefile" description="相当于文件的剪切功能">
 73         <move file="src/package1/A.java" tofile="c://ss.java"></move>
 74     </target>
 75     
 76     
 77     <target name="zipfile">
 78         <zip destfile="${hello}/package.zip"  basedir="${mk}"></zip>
 79     </target>
 80     
 81     <property name="new" value="newpackage"></property>
 82     <target name="mknew">
 83         <mkdir dir="${new}"/>
 84     </target>
 85     <description>
 86         解压文件  src="${hello}/package.zip"指定文件的位置  dest="${new}" 指定解压到哪个目录下
 87     </description>
 88     <target name="unzipfile" depends="mknew">
 89         <unzip dest="${new}" overwrite="true" src="${hello}/package.zip" ></unzip>
 90     </target>
 91     
 92     <property name="replacefile" value="input.txt"></property>
 93     <description>
 94         summary="on" 属性设置为true或者on 就可以输出找到和替换字符串实例的数目
 95     </description>
 96     <target name="replacewords" description="替换文件中替换字符串">
 97         <replace file="${replacefile}" token="l" value="替换" summary="on"></replace>
 98     </target>
 99     
100     
101     
102     
103     
104     <description>
105         模式匹配 
106 (当前目录)        src*/*.java 将匹配带src前缀的任意数目的目录的所有java文件
107 (当前目录包括其子目录)        还有一种模式结构:**,它匹配任意数目的目录 例如模式 **/*.java将匹配当前目录下的所有java文件
108     </description>
109     <property name="dangqian" value="src"></property>
110     <target name="copyjavafile" description="把src目录下的所有java文件全都拷贝到pro目录下">
111         <copy todir="${hello}">
112             <fileset dir="${dangqian}">
113                 <include name="**/*.java"/>
114             </fileset>
115         </copy>
116         
117     </target>
118     
119     
120     <description>
121         ant自定义任务
122     </description>
123     <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
124     </taskdef>
125     
126     <target name="FileSort">
127         <myFileSortExamole srcFile="input.txt" destFile="output.txt">
128         </myFileSortExamole>
129     </target>
130     
131     
132     
133     
134 </project>

关于ant的介绍其实百度百科介绍相当全面,比课本上都好。 ANT 

http://baike.baidu.com/link?url=7GfHJUNFHIeVvEdz_I69_3fnnM429F-Xf2x3YWirkqKO_12xKm4ui0PEttmPyS-Mi2Z6zQMMlya2a3buA-bJG_

自定义ant任务,首先要把ant.jar这个jar包引用到工程目录里,之后编写自己的ant任务类的时候只需要继承 org.apache.tools.ant.Task;

之后Overwrite  它的execute方法即可。这要注意自己的task类中的成员变量就好似再ant  build.xml中的各个属性名,使用的时候也一样,属性再xml中赋值之后方法会自动调用set方法。

 1 package MyOwn;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileReader;
 7 import java.io.FileWriter;
 8 import java.util.ArrayList;
 9 import java.util.Collections;
10 import java.util.List;
11 import java.util.ListIterator;
12 
13 import org.apache.tools.ant.BuildException;
14 import org.apache.tools.ant.Task;
15 /**
16  * @author Tai
17  * 自定义ant功能,文件中的没一行排序
18  * srcFile destFile 再ant中定义好之后会自动掉set方法 这里就会有值了
19  */
20 public class FileSorter extends Task
21 {
22     
23     private File srcFile;
24     private File destFile;
25     public File getSrcFile()
26     {
27         return srcFile;
28     }
29     public void setSrcFile(File srcFile)
30     {
31         this.srcFile = srcFile;
32     }
33     public File getDestFile()
34     {
35         return destFile;
36     }
37     public void setDestFile(File destFile)
38     {
39         this.destFile = destFile;
40     }
41     
42     @Override
43     public void execute() throws BuildException
44     {
45         try
46         {
47             BufferedReader fromFile = new BufferedReader(new FileReader(srcFile));
48             BufferedWriter toFile = new BufferedWriter(new FileWriter(destFile));
49             String line = fromFile.readLine();
50             List<String> list = new ArrayList<String>();
51             while(line != null)
52             {
53                 list.add(line);
54                 line = fromFile.readLine();
55             }
56             Collections.sort(list);
57             
58             for (ListIterator<String> li = list.listIterator();li.hasNext();)
59             {
60                 String str = li.next();
61                 toFile.write(str);
62                 toFile.newLine();
63             }
64             
65             toFile.close();
66             fromFile.close();
67             
68         } catch (Exception e)
69         {
70             e.printStackTrace();
71         }
72         
73     }
74     
75     
76 }
FileSorter

上面是自己定义的文件按照每行排序的task  下面是再XML中使用它。

120     <description>
121         ant自定义任务
122     </description>
123     <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
124     </taskdef>
125     
126     <target name="FileSort">
127         <myFileSortExamole srcFile="input.txt" destFile="output.txt">
128         </myFileSortExamole>
129     </target>

 

posted @ 2014-05-26 09:05  Mauiie_娢  阅读(596)  评论(0编辑  收藏  举报