Ant

ant——Apache Ant,是一個將軟件編譯、測試、部署等步驟聯繫在一塊兒加以自動化的一個工具,大多用於Java環境中的軟件開發。由Apache軟件基金會所提供。java

這裏就附上我學習過程當中的一個例子,裏面有很好的註釋。查看註釋就基本上知道沒個目標target的做用目的了。
apache

 

  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 ide

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中使用它。ui

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>
相關文章
相關標籤/搜索