Ant Datatype之Path
Datatype在Ant中扮演任务参数的角色,可以在一个任务内部声明,也可以在任务外部定义,并为它起个名字,再把这个名字传给任务。这样就可以在多个任务中共享一个Datatype。
Datatype可以存储大量在构建过程中使用的复杂信息,比如一个待编译的文件列表或者一个待删除的目录集。
path是一个有序的元素列表,这些元素可以是文件或目录。它的名字可能与任务相关,或者只是简单<path>。
1. 如果路径只包含一个path或location,可以简写为,其中location都可换为path:
Java文件:
package xuj.ant;
import org.apache.commons.lang.StringUtils;
public class Main
{
public static void main(String[] args){
System.out.println(StringUtils.capitalize("test"));
}
}build.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project name="datatype_path" default="execute"> <!--<path id="compile.classpath" location="lib/commons-lang-2.4.jar" />--> <path id="compile.classpath"> <pathelement location="lib/commons-lang-2.4.jar"/> </path> <target name="init" description="创建项目文件夹"> <mkdir dir="build/classes"/> </target> <target name="compile" depends="init" description="编译Java源文件"> <javac includeAntRuntime="false" srcdir="src" destdir="build/classes"> <classpath refid="compile.classpath"/> </javac> <echo level="info">compilation complete!</echo> </target> <target name="clean" description="清除项目文件夹"> <delete dir="build"/> <delete dir="dist"/> </target> <target name="execute" depends="compile" description="运行项目"> <java classname="xuj.ant.Main" classpath="build/classes"> <classpath refid="compile.classpath"/> </java> </target> </project>
输出:
>ant
Buildfile: E:\antspace\datatype\build.xml
init:
[mkdir] Created dir: E:\antspace\datatype\build\classes
compile:
[javac] Compiling 1 source file to E:\antspace\datatype\build\classes
[echo] compilation complete!
execute:
[java] Test
BUILD SUCCESSFUL
Total time: 1 second2. 如果是多个文件,可以用“;”或者“:”分隔,或一个文件集合,或单独写每个path:
Java文件:
package xuj.ant;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.Email;
public class Main
{
public static void main(String[] args){
System.out.println(StringUtils.capitalize("test"));
System.out.println(Email.MAIL_SMTP_TIMEOUT);
}
}build.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project name="datatype_path" default="execute"> <!--方法一 <path id="compile.classpath" path="lib/commons-lang-2.4.jar;lib/commons-email-1.2.jar" /> --> <!--方法二 <path id="compile.classpath"> <pathelement location="lib/commons-lang-2.4.jar"/> <pathelement location="lib/commons-email-1.2.jar"/> </path> --> <!-- 方法三 --> <path id="compile.classpath"> <fileset dir="lib"> <include name="*.jar"/> </fileset> </path> <target name="init" description="创建项目文件夹"> <mkdir dir="build/classes"/> </target> <target name="compile" depends="init" description="编译Java源文件"> <javac includeAntRuntime="false" srcdir="src" destdir="build/classes"> <classpath refid="compile.classpath"/> </javac> <echo level="info">compilation complete!</echo> </target> <target name="clean" description="清除项目文件夹"> <delete dir="build"/> <delete dir="dist"/> </target> <target name="execute" depends="compile" description="运行项目"> <java classname="xuj.ant.Main" classpath="build/classes"> <classpath refid="compile.classpath"/> </java> </target> </project>
或
<?xml version="1.0" encoding="UTF-8"?> <project name="datatype_path" default="execute"> <path id="compile.classpath1" location="lib/commons-lang-2.4.jar" /> <path id="compile.classpath2" location="lib/commons-email-1.2.jar" /> <target name="init" description="创建项目文件夹"> <mkdir dir="build/classes"/> </target> <target name="compile" depends="init" description="编译Java源文件"> <javac includeAntRuntime="false" srcdir="src" destdir="build/classes"> <classpath refid="compile.classpath1"/> <classpath refid="compile.classpath2"/> </javac> <echo level="info">compilation complete!</echo> </target> <target name="clean" description="清除项目文件夹"> <delete dir="build"/> <delete dir="dist"/> </target> <target name="execute" depends="compile" description="运行项目"> <java classname="xuj.ant.Main" classpath="build/classes"> <classpath refid="compile.classpath1"/> <classpath refid="compile.classpath2"/> </java> </target> </project>
输出:
>ant
Buildfile: E:\antspace\datatype\build.xml
init:
[mkdir] Created dir: E:\antspace\datatype\build\classes
compile:
[javac] Compiling 1 source file to E:\antspace\datatype\build\classes
[echo] compilation complete!
execute:
[java] Test
[java] mail.smtp.timeout
BUILD SUCCESSFUL
Total time: 1 second3.最终的build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_path" default="execute">
<property name="build.dir" location="build/classes"/>
<path id="compile.classpath">
<pathelement location="lib/commons-lang-2.4.jar"/>
<pathelement location="lib/commons-email-1.2.jar"/>
</path>
<target name="init" description="创建项目文件夹">
<mkdir dir="${build.dir}"/>
</target>
<target name="compile" depends="init" description="编译Java源文件">
<javac includeAntRuntime="false" srcdir="src" destdir="${build.dir}">
<classpath refid="compile.classpath"/>
</javac>
<echo level="info">compilation complete!</echo>
</target>
<target name="clean" description="清除项目文件夹">
<delete dir="build"/>
<delete dir="dist"/>
</target>
<target name="execute" depends="compile" description="运行项目">
<java classname="xuj.ant.Main" classpath="${build.dir}">
<classpath refid="compile.classpath"/>
</java>
</target>
</project>