实例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文件,双击可以运行。
最新内容请见作者的GitHub页:http://qaseven.github.io/