Ant構建Java項目之第2篇
實例1:實現自定義Ant任務
其中FileSorter文件的源碼如下:
package com.ant.test02; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.ListIterator; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class FileSorter extends Task { private File srcFile; private File destFile; public File getSrcFile() { return srcFile; } public void setSrcFile(File srcFile) { this.srcFile = srcFile; } public File getDestFile() { return destFile; } public void setDestFile(File destFile) { this.destFile = destFile; } @Override public void execute() throws BuildException { try { BufferedReader fromFile = new BufferedReader( new FileReader(srcFile)); BufferedWriter toFile = new BufferedWriter(new FileWriter(destFile)); List<String> list = new ArrayList<String>(); String line = fromFile.readLine(); while (line != null) { list.add(line); line = fromFile.readLine(); } Collections.sort(list); for (ListIterator<String> li = list.listIterator(); li.hasNext();) { String str = li.next(); toFile.write(str); toFile.newLine(); } fromFile.close(); toFile.close(); } catch (Exception ex) { ex.printStackTrace(); } } } |
實現一個文件排序的功能。
build.xml文件源碼如下:
<?xml version="1.0"?> <project name="tasks" default="main"> <property name="build.dir" location="build" /> <target name="init"> <mkdir dir="${build.dir}" /> </target> <target name="compile" depends="init"> <javac srcdir="src" destdir="${build.dir}" /> </target> <target name="simpletask" depends="compile"> <taskdef name="simpletask" classname="com.ant.test02.FileSorter" classpath="${build.dir}" /> <simpletask srcFile="input.txt" destFile="output.txt"/> </target> <target name="clean"> <delete dir="${build.dir}" /> </target> <target name="main" depends="simpletask" /> </project> |
input.txt中輸入需要排序的內容后,運行build.xml。查看output.txt,發現內容進行了排序。
實例2:模式匹配
可以對目錄執行模式匹配。例如,模式src*/*.java將匹配帶src前綴的任何目錄中的所有Java文件。
還有另一種模式結構:**,它匹配任意數量的目錄。例如,模式**/*.java將匹配當前目錄結構下的所有Java文件。
<copy todir=”archive”> <fileset dir=”src”> <include name=”*.java”/> </fileset> </copy> |
fileset默認情況下包含指定src目錄下的所有文件,因此為了僅選擇Java文件,我們對模式使用一個include元素。類似地,我們可以對另一個模式添加一個exclude元素,從而潛在地排除include指定的匹配項。甚至可以指定多個include和exclude元素;這樣將得到一組文件和目錄,它們包含include模式的所有匹配項的并集,但排除了exclude模式的所有匹配項。
<?xml version="1.0"?> <project name="tasks" default="main"> <property name="build.dir" location="build" /> <target name="main" > <copy todir="${build.dir}/dest_dir"> <!-- 只拷貝build目錄下的文件,其子目錄下的文件不做拷貝 --> <fileset dir="${build.dir}"> <include name="*.class"/> <exclude name="*.war"/> </fileset> </copy> </target> </project> |
實例3:可執行Jar文件的生成
在com.ant.test03包下新建一個Testjar.java文件,源碼如下:
package com.ant.test03; import java.awt.Color; import java.awt.Dimension; import javax.swing.JButton; import javax.swing.JFrame; public class TestJar { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(new Dimension(200, 300)); frame.setBackground(new Color(200, 200, 200)); frame.setAlwaysOnTop(true); frame.getContentPane().add(new JButton("Test Ant")); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
build.xml文件源碼如下:
<?xml version="1.0" encoding="utf-8"?> <project name="myAntProject" default="dist" basedir="."> <property name="compile" value="compile" /> <property name="dist" value="dist" /> <target name="preprocess" > <mkdir dir="${compile}" /> <mkdir dir="${dist}" /> </target> <target name="myCompile" depends="preprocess"> <javac srcdir="src" destdir="${compile}"> </javac> </target> <target name="dist" depends="myCompile"> <jar destfile="${dist}/package.jar" basedir="${compile}"> <manifest> <attribute name="Built-By" value="${user.name}" /> <attribute name="Main-Class" value="com.ant.test03.TestJar" /> </manifest> </jar> </target> </project> |
運行后刷新MyEclipse項目,就可以看到在dist文件夾下生成的package.jar文件,雙擊可以運行。
相關文章:
posted on 2014-05-22 10:16 順其自然EVO 閱讀(198) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄