官网:https://ant.apache.org/,task介绍:https://ant.apache.org/manual/index.htmlhtml
Ant的构建文件当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每一个人使用。Ant构建文件默认命名为build.xml,也能够取其余的名字。只不过在运行的时候把这个命名看成参数传给Ant。构建文件能够放在任何的位置。通常作法是放在项目顶层目录中,这样能够保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布之后的代码。
Ant构建文件是XML文件。每一个构建文件定义一个惟一的项目(Project元素)。每一个项目下能够定义不少目标(target元素),这些目标之间能够有依赖关系。当执行这类目标时,须要执行他们所依赖的目标。每一个目标中能够定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务能够为3类。
(1) 核心任务。核心任务是Ant自带的任务。
(2) 可选任务。可选任务实来自第三方的任务,所以须要一个附加的JAR文件。
(3) 用户自定义的任务。用户自定义的任务实用户本身开发的任务。java
说白了,ANT就是经过XML执行一些任务,能够简化操做,好比:编译Java,执行Java命令,打Jar包,打War包等操做。接下来会慢慢研究这些操做。git
ant -help 查看帮助信息便可web
C:\Users\XXX\Desktop\antProject>ant -help ant [options] [target [target2 [target3] ...]] Options: -help, -h print this message and exit -projecthelp, -p print project help information and exit -version print the version information and exit -diagnostics print information that might be helpful to diagnose or report problems and exit -quiet, -q be extra quiet -silent, -S print nothing but task outputs and build failures -verbose, -v be extra verbose -debug, -d print debugging information -emacs, -e produce logging information without adornments -lib <path> specifies a path to search for jars and classes -logfile <file> use given file for log -l <file> '' -logger <classname> the class which is to perform logging -listener <classname> add an instance of class as a project listener -noinput do not allow interactive input -buildfile <file> use given buildfile -file <file> '' -f <file> '' -D<property>=<value> use value for given property -keep-going, -k execute all targets that do not depend on failed target(s) -propertyfile <name> load all properties from file with -D properties taking precedence -inputhandler <class> the class which will handle input requests -find <file> (s)earch for buildfile towards the root of -s <file> the filesystem and use it -nice number A niceness value for the main thread: the default -nouserlib Run ant without using the jar files from -noclasspath Run ant without using CLASSPATH -autoproxy Java1.5+: use the OS proxy settings -main <class> override Ant's normal entry point
一个简单的build.xmlapache
<project name="HelloWorld" default="test" basedir="">
<target name="test">
<echo message="Hello, world"/>
<echo message="This is info message." level="info" />
</target>
</project>
运行上面的build.xml:(直接ant就能够了)api
C:\Users\liqiang\Desktop\antProject>ls build.xml C:\Users\liqiang\Desktop\antProject>ant Buildfile: C:\Users\liqiang\Desktop\antProject\build.xml test: [echo] Hello, world [echo] This is info message. BUILD SUCCESSFUL Total time: 1 second
例如:文件的名字是buildXX.xmltomcat
C:\Users\liqiang\Desktop\antProject>ls buildXX.xml C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml test: [echo] Hello, world [echo] This is info message. BUILD SUCCESSFUL Total time: 2 seconds
其实查看标签有什么属性,去task官网查看该task有什么属性即该标签有什么属性。下面只是介绍部分标签以及其重要属性,更全的标签参考官网 :https://ant.apache.org/manual-1.9.x/index.htmlapp
每一个构建文件对应一个项目。<project>标签时构建文件的根标签。它能够有多个内在属性,就如代码中所示,其各个属性的含义分别以下。
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每一个构建文件都对应于一个项目,可是大型项目常常包含大量的子项目,每个子项目均可以有本身的构建文件。 less
一个项目标签下能够有一个或多个target标签。一个target标签能够依赖其余的target标签。例如,有一个target用于编译程序,另外一个target用于声称可执行文件。在生成可执行文件以前必须先编译该文件,所以可执行文件的target依赖于编译程序的target。Target的全部属性以下。
(1) name表示标明,这个属性是必须的。
(2) depends表示依赖的目标。
(3) if表示仅当属性设置时才执行。
(4) unless表示当属性没有设置时才执行。
(5) description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每一个target。在执行以前,首先须要执行它所依赖的targeteclipse
message:须要打印的信息,能够用${}取变量
file:将message写入到文件中
append:是否已追加模式写入文件
level:级别,相似于日志级别(在开发工具中不能级别显示的信息不一样)
encoding:使用的编码格式
force:是否强制写入到一个只读的文件中
例如:
<project name="HelloWorld" default="" basedir=""> <echo file="test.log" message="测试1" level="debug" append="true" encoding="utf-8"/> <echo file="test.log" message="测试2" level="info" append="true" encoding="utf-8"/> <echo file="test.log" message="测试3" level="warning" append="true" encoding="utf-8"/> <echo file="test.log" message="测试4" level="error" append="true" encoding="utf-8"/> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml BUILD SUCCESSFUL Total time: 1 second C:\Users\liqiang\Desktop\antProject>cat ./test.log 测试1测试2测试3测试4
该标签用于建立一个目录,它有一个属性dir用来指定所建立的目录名,以下:
<project name="HelloWorld" default="test" basedir=""> <target name="test"> <mkdir dir = "tttt"/> </target> </project>
或者:
<project name="HelloWorld" default="" basedir=""> <mkdir dir = "tttt"/> </project>
执行上面脚本:
C:\Users\liqiang\Desktop\antProject>ls buildXX.xml C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml test: [mkdir] Created dir: C:\Users\liqiang\Desktop\antProject\tttt BUILD SUCCESSFUL Total time: 1 second C:\Users\liqiang\Desktop\antProject>ls buildXX.xml tttt
该标签用于删除一个文件或一组文件,属性以下:
(1).file表示要删除的文件。
(2).dir表示要删除的目录。
(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
(4).failonerror 表示指定当碰到错误是否中止,默认值是自动中止。
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。
例如删除一个文件夹:
<project name="HelloWorld" default="" basedir=""> <delete dir="ttt"/> </project>
该标签用于文件或文件集的拷贝,其属性以下。
(1).file 表示源文件。
(2).tofile 表示目标文件。
(3).todir 表示目标目录。
(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。
(5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。
(6).failonerror 表示指定如目标没有发现是否自动中止,默认值是中止。
(7).verbose 表示制定是否显示详细信息,默认值不显示。
例如:复制文件
<project name="HelloWorld" default="" basedir=""> <copy file="buildXX.xml" tofile="./build.xml"/> </project>
批量复制的脚本:
<copy todir="${basedir}/dist/examBuildClass"> <fileset dir="${basedir}/src"> <include name="**/**.xml" /> </fileset> </copy>
<include name="**/**.xml" />是包含本目录以及子目录的xml文件
<include name="**.xml" />是本目录的xml文件,不包含子目录
两个标签都有最基本的属性:src和dest表示源文件和目的文件
<project name="HelloWorld" default="" basedir=""> <copyfile src="buildXX.xml" dest="./build.xml"/> </project>
该标签用于编译一个或一组java文件,其属性以下:
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动中止。
例如:编译本目录下的一个java文件
public class Test { public Test() { } public static void main(String[] args) { System.out.print("1"); } }
编译脚本
<project name="HelloWorld" default="" basedir=""> <javac srcdir="./" destdir="./" fork="true" source="1.2" target="1.2" /> </project>
测试:
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [javac] C:\Users\liqiang\Desktop\antProject\buildXX.xml:7: warning: 'include uild.sysclasspath=last; set to false for repeatable builds [javac] Compiling 1 source file to C:\Users\liqiang\Desktop\antProject [javac] 警告: [options] 未与 -source 1.3 一块儿设置引导类路径 [javac] 警告: [options] 源值1.3已过期, 将在将来全部发行版中删除 [javac] 警告: [options] 目标值1.2已过期, 将在将来全部发行版中删除 [javac] 警告: [options] 要隐藏有关已过期选项的警告, 请使用 -Xlint:-options。 [javac] 4 个警告 BUILD SUCCESSFUL Total time: 6 seconds C:\Users\liqiang\Desktop\antProject>javap -c -v Test.class | grep major major version: 46
该标签用来执行编译生成的.class文件,其属性以下。
(1).classname 表示将执行的类名。
(2).jar表示包含该类的JAR文件名。
(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中运行该类。
(5).failonerror表示当出现错误时自动中止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。
例如运行上面的class文件:(必须指定classpath包含当前路径)
<project name="HelloWorld" default="" basedir=""> <java classname="Test" classpath="./;${classpath}"> </java> </project>
补充:此标签也能运行Jar文件,相似于java -jar命令:
例如,运行下面9打的jar包(必须制定fork参数,maxmemory制定JVM大小)
<project name="HelloWorld" default="" basedir=""> <java jar="app.jar" fork="true" failonerror="true" maxmemory="128m"/> </project>
该标签用来生成一个JAR文件,其属性以下。
(1) destfile表示JAR文件名。
(2) basedir表示被归档的文件名。
(3) includes表示别归档的文件模式。
(4) exchudes表示被排除的文件模式。
例如打包上面的class文件:(下面命令会生成主菜单清单,也就是生成MANIFEST.MF,而且写入主函数入口,能够经过java -jar运行)
<project name="HelloWorld" default="" basedir=""> <jar destfile="./app.jar" basedir="./" includes="**/*.class" excludes="**/Test11111111111.class" > <manifest> <attribute name="Main-Class" value="Test"/> </manifest> </jar> </project>
结果:
关于此task在weblogic编译JSP的时候就研究过,参考:http://www.javashuo.com/article/p-aygnbvzp-cv.html
zip用于压缩,打zip包,以下:
<project name="HelloWorld" default="" basedir=""> <zip destfile="./manual.zip" basedir="./"/> </project>
结果:
unzip用于解压缩
<project name="HelloWorld" default="" basedir=""> <zip destfile="./manual.zip" basedir="./"/> </project>
有时候咱们但愿读取一个的内容到某个属性中,例如:
<project name="HelloWorld" default="" basedir=""> <loadfile property="test" srcFile="./buildXX.xml" encoding="GBK"/> <echo message="${test}"/> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [echo] <project name="HelloWorld" default="" basedir=""> [echo] <loadfile property="test" srcFile="./buildXX.xml" encoding="GBK"/> [echo] <echo message="${test}"/> [echo] </project> BUILD SUCCESSFUL Total time: 2 seconds
loadproperties标签,会加载properties文件中的内容为本文件的properties变量,经过${varname}能够获取变量的值,例如:
<project name="HelloWorld" default="" basedir=""> <loadproperties srcFile="log4j.properties"/> <echo message="${log4j.rootLogger}"/> </project>
结果:
C:\Users\liqiang\Desktop\antProject>cat log4j.properties | grep rootLo log4j.rootLogger=debug, stdout C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [echo] debug, stdout BUILD SUCCESSFUL Total time: 2 seconds
例如:获取某个http的源码。property是读取回来的property的变量,encoding指定解析的编码。
<project name="HelloWorld" default="" basedir=""> <loadresource property="indexresource" encoding="utf-8"> <url url="http://qiaoliqiang.cn/"/> </loadresource> <echo message="${indexresource}"/> </project>
例如,一个txt文件中的原来的内容为123,咱们用ant脚本将1换为3
<project name="HelloWorld" default="" basedir=""> <replace file="./1.txt" token="1" value="3"/> </project>
结果:
C:\Users\liqiang\Desktop\antProject>cat 1.txt 123 C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml BUILD SUCCESSFUL Total time: 3 seconds C:\Users\liqiang\Desktop\antProject>cat 1.txt 323
补充:学习了读取文件与替换文件,咱们就能够用ant脚本写一个文件的内容替换另外一个文件的指定内容
例如 1.txt内容是"321" 2.txt内容是"123 456" ,咱们的需求是将2.txt中的123替换为1.txt中的内容。脚本以下:
<project name="HelloWorld" default="" basedir=""> <loadfile property="test" srcFile="./1.txt" encoding="GBK"/> <replace file="./2.txt" token="123" value="${test}"/> </project>
结果:
C:\Users\liqiang\Desktop\antProject>cat 1.txt 321 C:\Users\liqiang\Desktop\antProject>cat 2.txt 123 456 C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml BUILD SUCCESSFUL Total time: 3 seconds C:\Users\liqiang\Desktop\antProject>cat 2.txt 321 456
设置一个本地变量, 能够经过${}屡次调用。
<project name="HelloWorld" default="" basedir=""> <property name="var1" value="dist"/> <echo message="${var1}"/> </project>
补充:其file属性也能够引入另外一个properties文件,此种方式相似于咱们项目中使用properties文件:
ant.properties
name=username
password=userpassword
build.xml:
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="test" basedir=""> <property file="ant.properties"></property> <target name="test"> <echo message="${name}" /> <echo message="${password}" level="info" /> </target> </project>
结果:
Buildfile: E:\xiangmu\MavenProject\build.xml
test:
[echo] username
[echo] userpassword
BUILD SUCCESSFUL
Total time: 1 second
import用于合并多个build.xml,能够简单理解为将另外一个xml中project中的内容引入当前xml的project中。两个xml的project的name不能相同。
例如:buildXX.xml
<project name="HelloWorld" default="default" basedir=""> <import file="./buildXX1.xml"/> <target name="default" depends="t1"> <antcall target="t1"></antcall> </target> </project>
buildXX1.xml
<project name="HelloWorld1" default="" basedir=""> <property name="var1" value="dist"/> <target name="t1"> <echo message="${var1}"/> </target> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml t1: [echo] dist default: t1: [echo] dist
有时咱们在指定位置但愿调用其余target,target的depends属性会在执行本target前就执行另外一个target,antcall能够在指定位置调用另外一个target
<project name="HelloWorld" default="t3" basedir=""> <target name="t1"> <echo message="=====1===="/> </target> <target name="t2"> <echo message="=====2===="/> </target> <target name="t3" depends="t1"> <echo message="=====3===="/> <antcall target="t2"/> </target> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml t1: [echo] =====1==== t3: [echo] =====3==== t2: [echo] =====2==== BUILD SUCCESSFUL Total time: 1 second
目录结构:
原来文件内容:
exam.1.txt
111
exam.2.txt
222
exam.3txt
333
exam.txt
444
(1)简单的合并文件,将文件内容合并到文件中:(是以覆盖的方式进行合并)
<project name="exam" default="default" basedir="."> <!-- import properties file--> <echo message="basedir = ${basedir}"/> <target name="default"> <concat destfile="${basedir}/exam.txt">Hello, World!</concat> </target> </project>
控制台:
Buildfile: E:\xiangmu\Exam\build.xml
[echo] basedir = E:\xiangmu\Exam
default:
BUILD SUCCESSFUL
Total time: 314 milliseconds
查看exam.txt:
Hello, World!
(2)简单的合并文件,将文件内容合并到文件中:(以追加的方式进行合并-----append属性)
<project name="exam" default="default" basedir="."> <!-- import properties file--> <echo message="basedir = ${basedir}"/> <target name="default"> <concat destfile="${basedir}/exam.txt" append="true">Hello, World!</concat> </target> </project>
查看exam.txt:
Hello, World!Hello, World!
(3)合并多个文件,以覆盖的方式进行合并
<project name="exam" default="default" basedir="."> <!-- import properties file--> <echo message="basedir = ${basedir}" /> <target name="default"> <concat destfile="${basedir}/exam.txt"> <filelist dir="${basedir}" files="exam.1.txt,exam.2.txt" /> <fileset dir="${basedir}" includes="exam.*.txt" excludes="exam.txt" /> </concat> </target> </project>
查看exam.txt:
111222111222333
追加只用append=true
前提是自定义的task的类要有public xxx execute()方法,例如:
public class Test { public Test() { } public void execute(){ System.out.println("11111111"); } }
编译以后生成成class文件:
编写自定义task并调用的脚本:
<project name="HelloWorld" default="test" basedir="">
<taskdef name="mytask" classpath="./" classname="Test"/>
<mytask/>
<echo message="======================"/>
<target name="test">
<mytask/>
</target>
</project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [mytask] 11111111 [echo] ====================== test: [mytask] 11111111 BUILD SUCCESSFUL Total time: 1 second
在构建文件中为了标识文件或文件组,常常须要使用数据类型。数据类型包含在 org.apache.tool.ant.types 包中。其实查看这些标签有哪些属性能够查看官网:http://ant.apache.org/manual-1.9.x/api/
下面简单介绍构建文件中一些经常使用的数据类型。
由Ant构建文件调用的程序,能够经过<arg>元素向其传递命令行参数,如apply,exec和java任务都可接受嵌套<arg>元素,能够为各自的过程调用指定参数。如下是<arg>的全部属性。
(1)value 是一个命令参数。若是参数中有空格,但又想将它做为单独一个值,则使用此属性。
(2)file表示一个参数的文件名。在构建文件中,此文件名相对于当前的工做目录。
(3)line表示用空格分隔的多个参数列表。
(4)path表示路径。
例如:对于以下一段程序:
public class Mytest { public static void main(String[] args) { for(String s:args){ System.out.println(s); } } }
咱们能够经过line传递参数:(空格分隔的多个参数列表)
<project name="HelloWorld" default="" basedir=""> <java classname="Mytest" classpath="./;${classpath}"> <arg line="1 2 3 '4'"/> </java> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [java] 1 [java] 2 [java] 3 [java] 4 BUILD SUCCESSFUL Total time: 1 second
咱们也能够用value传递单个参数,会当作一个字符串元素处理:
<project name="HelloWorld" default="" basedir=""> <java classname="Mytest" classpath="./;${classpath}"> <arg value="1 2 3 '4'"/> </java> </project>
结果:
C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml [java] 1 2 3 '4' BUILD SUCCESSFUL Total time: 2 seconds
Path元素用来表示一个类路径,不过它还能够用于表示其余的路径。在用做揖个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中全部的路径分隔符,其拥有的属性以下。
(1).location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
(2).refid 是对当前构建文件中某处定义的一个path的引用。
(3).path表示一个文件或路径名列表。
例如:(经过下面方法定义path路径,并在classpathref引入path的id便可)
<project name="HelloWorld" default="" basedir=""> <path id="myclass.classpath" path="./"></path> <java classname="Mytest" classpathref="myclass.classpath" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
与上面等价功能的XML以下:
<project name="HelloWorld" default="" basedir=""> <path id="myclass.classpath" location="./"></path> <java classname="Mytest" classpathref="myclass.classpath" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
<project name="HelloWorld" default="" basedir=""> <path id="myclass.classpath" location="./"></path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
(1).dir是用于计算绝对文件名的目录。
(2).files 是用逗号分隔的文件名列表。 (若是是class文件不用写后缀,其余文件须要后缀,支持*通配符匹配)
(3).refid 是对某处定义的一个<filelist>的引用。
注意 dir 和 files 都是必要的,除非指定了refid(这种状况下,dir和files都不容许使用)。
例如:(filelist中通配符要用*,好像不支持xx*,或者*.xxx的用法,另外files引入class文件的时候不能写后缀.class,只能写文件名字)
<project name="HelloWorld" default="" basedir=""> <filelist id="filelist1" dir="C:/Users/liqiang/Desktop" files="*"></filelist> <path id="myclass.classpath"> <filelist refid="filelist1"></filelist> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
与之等价的XML:
<project name="HelloWorld" default="" basedir=""> <filelist id="filelist1" dir="C:/Users/liqiang/Desktop" files="Mytest"></filelist> <path id="myclass.classpath"> <filelist refid="filelist1"></filelist> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
若是是jar文件须要写文件后缀
<project name="HelloWorld" default="" basedir=""> <filelist id="filelist1" dir="C:/Users/liqiang/Desktop/antProject" files="tt.jar"></filelist> <path id="myclass.classpath"> <filelist refid="filelist1"></filelist> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
Fileset 数据类型定义了一组文件,并一般表示为<fileset>元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持全部的fileset属性和嵌套元素。如下为fileset 的属性列表。
(1).dir表示fileset 的基目录。
(2).casesensitive的值若是为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true。
(3).defaultexcludes 用来肯定是否使用默认的排除模式,默认为true。
(4).excludes 是用逗号分隔的须要派出的文件模式列表。
(5).excludesfile 表示每行包含一个排除模式的文件的文件名。
(6).includes 是用逗号分隔的,须要包含的文件模式列表。
(7).includesfile 表示每行包括一个包含模式的文件名。
例如:引入class文件
<project name="HelloWorld" default="" basedir=""> <fileset id="fileset1" dir="./"> <include name="Mytest" /> </fileset> <path id="myclass.classpath"> <fileset refid="fileset1"></fileset> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
与之等价的脚本:
<project name="HelloWorld" default="" basedir=""> <fileset id="fileset1" dir="./" includesfile="Mytest.class"></fileset> <path id="myclass.classpath"> <fileset refid="fileset1"></fileset> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
id:定义惟一的ID
refid:引用其余的dirset的id
dir:表示目录的位置
例如:(下面定义了dirset与path,用经过refid引入了其余dirset与path)
<project name="HelloWorld" default="" basedir=""> <dirset id="basedirset" dir="./"></dirset> <path id="myclass.classpath"> <dirset refid="basedirset"></dirset> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
例以下面脚本将桌面的class文件包含到 basedirset 中:
<project name="HelloWorld" default="" basedir=""> <dirset id="basedirset" dir="C:/Users/liqiang/Desktop/"> <include name="*.class"/> </dirset> <path id="myclass.classpath"> <dirset refid="basedirset"></dirset> </path> <path id="myclass.classpath1" refid="myclass.classpath"></path> <java classname="Mytest" classpathref="myclass.classpath1" fork="true"> <arg value="1 2 3 '4'"/> </java> </project>
任何工具都会集成到开发工具中,像SVN,maven,git都与eclipse集成,固然ant也不例外。下面会在eclipse中使用ant。
通常版本直接集成了ant,因此直接使用便可。
工程结构以下:
输入如下脚本进行测试:
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="test" basedir=""> <target name="test"> <echo message="Hello, world"/> <echo message="This is info message." level="info" /> </target> </project>
Buildfile: E:\xiangmu\MavenProject\build.xml
test:
[echo] Hello, world
[echo] This is info message.
BUILD SUCCESSFUL
Total time: 1 second
ant.properties
name=username
password=userpassword
build.xml脚本:
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="test" basedir=""> <property file="ant.properties"></property> <target name="test"> <echo message="${name}" /> <echo message="${password}" level="info" /> </target> </project>
结果:
Buildfile: E:\xiangmu\MavenProject\build.xml test: [echo] username [echo] userpassword BUILD SUCCESSFUL Total time: 1 second
(1)打包ant视图: window->show view
(2)空白处右击而后add buildfiles
(3)选中咱们的build.xml
(4)直接双击test运行该target便可。
能够设置须要执行的target以及JRE等参数:(能够选择多个target进行执行)
上面配置至关于设置了快捷方式,运行的时候点击下面便可:(至关于运行指定build.xml的默认target)
eclipse选中如图位置:External xxx....
配置ant的jre版本:
在运行时修改ant 的运行时输出编码,咱们添加(<sysproperty key="file.encoding" value="UTF-8" />) 后,控制台就能够正常显示中文了,以下:
<!-- =================================
target: precompile
================================= -->
<target name="precompile" description="--> description">
<!--compile JSP-->
<java classname="weblogic.jspc" classpathref="wls.classpath" fork="true" failonerror="yes" maxmemory="1028m">
<sysproperty key="file.encoding" value="utf-8"/>
<arg line="-advanced" />
</java>
</target>
<path id="wls.classpath"> <fileset dir="${wls_home}/server/lib"> <include name="*.jar" /> </fileset> <dirset dir="./build/classes"> </dirset> </path>
上面dirset等同于下面配置:(fileset能够jar能够class)
<fileset dir="E:/xiangmu/WebTest/WebContent/WEB-INF/classes"
includes="*.class">
</fileset>
补充:build.xml中basedir能够定义一个全局的位置变量,.表明当前位置,例如
<project name="exam" default="default" basedir="."> <target name="default"> <echo message="${basedir}"/> </target> </project>
结果:
Buildfile: E:\xiangmu\Exam\build.xml
default:
[echo] E:\xiangmu\Exam
BUILD SUCCESSFUL
Total time: 358 milliseconds
补充:好像ant1.10.5须要JDK8支持,而ant1.9.13支持JDK7