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 }
上面是本身定義的文件按照每行排序的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>