<?xml version="1.0"?>
<project name="Hello World Project" default="info">
<target name="info">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
<property name="test" value="shit" />
//引用的时候这么引用${test}
//depends依赖info的target
<target name="compile" depends="info">
<!--other command-->
</target>
复制代码 代码如下:
< copy file="old.txt" tofile="new.txt"/>
● 对文件目录进行复制
< copy todir="../dest_dir"> <fileset dir="src_dir"/> < /copy>
● 将文件复制到另外的目录:
< copy file="src.txt" todir="c:/base"/>
● 删除某个文件:
< delete file="/res/image/cat.jpg"/>
● 删除某个目录:
< delete dir="/res/image"/>
● 删除所有的jar文件或空目录:
< delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.jar"/>
< /delete>
创建目录
< mkdir dir="/home/philander/build/classes"/>
移动文件或目录,举例如下:
● 移动单个文件:
< move file="sourcefile" tofile=”destfile”/>
● 移动单个文件到另一个目录:
< move file="sourcefile" todir=”movedir”/>
● 移动某个目录到另一个目录:
< move todir="newdir">
<fileset dir="olddir"/>
< /move>
在执行名为build的target任务时,由于target中含有if的标签,所以需要判断名为check的条件语句的值,
但是istrue=false的语句表示条件不符合,echo并不会执行。
<condition property="check">
<istrue value="false" />
</condition>
<target name="build" if="check">
<echo>build running...</echo>
</target>
该标签用来生成一个JAR文件,其属性如下。
● destfile表示JAR文件名。
● basedir表示被归档的文件名。
● includes表示别归档的文件模式。
● exchudes表示被排除的文件模式。
● compress表示是否压缩。
<jar destfile="${webRoot}/${ash_jar}" level="9" compress="true" encoding="utf-8" basedir="${dest}">
<manifest>
<attribute name="Implementation-Version" value="Version: 2.2"/>
</manifest>
</jar>
<!-- 创建zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!-- 建立war包 -->
<war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
<exclude name="WEB-INF/classes/**"/>
<exclude name="WEB-INF/lib/**"/>
<exclude name="WEB-INF/work/_jsp/**"/>
<lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
<exclude name="${webRoot}\${helloworld_jar}"/>
</lib>
<lib file="${webRoot}/${helloworld_jar}"/>
<classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
</war>
javac 标签节点元素
该标签用于编译一个或一组java文件,其属性如下。
● srcdir表示源程序的目录。
● destdir表示class文件的输出目录。
● include表示被编译的文件的模式。
● excludes表示被排除的文件的模式。
● classpath表示所使用的类路径。
● debug表示包含的调试信息。
● optimize表示是否使用优化。
● verbose 表示提供详细的输出信息。
● fileonerror表示当碰到错误就自动停止。
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
java 标签节点元素
该标签用来执行编译生成的.class文件,其属性如下。
● classname 表示将执行的类名。
● jar表示包含该类的JAR文件名。
● classpath所表示用到的类路径。
● fork表示在一个新的虚拟机中运行该类。
● failonerror表示当出现错误时自动停止。
● output 表示输出文件。
● append表示追加或者覆盖默认文件。
<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
<java fork="false" classname="org.apache.tools.ant.Main" taskname="-">
<arg value="-projecthelp"/>
<arg value="-f"/>
<arg value="${ant.file}"/>
</java>
zookeeper中的java标签
<java classname="org.apache.jute.compiler.generated.Rcc" fork="true" dir="${src_generated.dir}">
<arg value="-l" />
<arg value="java" />
<arg value="../../zookeeper.jute" />
<classpath>
<pathelement path="${build.classes}" />
<pathelement path="${jute_javacc.dir}" />
</classpath>
</java>
arg 数据参数元素
由Ant构建文件调用的程序,可以通过<arg>元素向其传递命令行参数,如apply,exec和java任务均可接受嵌套<arg>元素,可以为各自的过程调用指定参数。以下是<arg>的所有属性。
● values 是一个命令参数。如果参数中有空格,但又想将它作为单独一个值,则使用此属性。
● file 表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。
● line 表示用空格分隔的多个参数列表。
● 表示路径,一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。
● pathref 引用的path(使用path元素节点定义path)的id
● prefix 前缀
● suffix 后缀
<arg value="-l -a"/>
ervironment 类型
由Ant构建文件调用的外部命令或程序,<env>元素制定了哪些环境变量要传递给正在执行的系统命令,<env>元素可以接受以下属性。
● file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。
● path表示环境变量的路径。Ant会将它转换为一个本地约定。
● value 表示环境变量的一个直接变量。
● key 表示环境变量名。
注意 file path 或 value只能取一个。
filelist 文件集合列表
filelist 是一个支持命名的文件列表的数据类型,包含在一个filelist类型中的文件不一定是存在的文件。以下是其所有的属性。
● dir是用于计算绝对文件名的目录。
● files 是用逗号分隔的文件名列表。
● refid 是对某处定义的一个<filelist>的引用。
注意 dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。
<filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml"/>
文件集合 ${doc.src}/foo.xml和${doc.src}/bar.xml. 这些文件也许还是不存在的文件.
<filelist id="docfiles" dir="${doc.src}" files="foo.xml bar.xml"/>
<filelist refid="docfiles"/>
<filelist id="docfiles" dir="${doc.src}">
<file name="foo.xml"/>
<file name="bar.xml"/>
</filelist>
path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥有的属性如下。
● location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
● refid 是对当前构建文件中某处定义的一个path的引用。
● path表示一个文件或路径名列表。
<path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
</path>
<path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src/**/*.java"/>
</fileset>
</path>
exec:
用来执行系统命令,或者指定环境的命令。
比如:
<target name="test">
<exec executable="cmd.exe">
<arg line="/c dir"/>
</exec>
</target>
parallel:并行执行多个子任务。
<parallel failonany="true">
<antcall target="sync_module_corp"/>
<antcall target="sync_module_main"/>
<antcall target="sync_module_teach"/>
<antcall target="sync_module_backend"/>
<antcall target="sync_module_passport"/>
<antcall target="sync_module_business"/>
<antcall target="sync_module_k12_teach"/>
<antcall target="sync_module_k12_backend"/>
<antcall target="build_style"/>
</parallel>
<!-- 一个完整的ant应用例子-->
<!-- property类似于程序中定义简单的变量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!--
target是一个事件、事情、任务, name是当前事情的名称,depends是依赖的上一件或是多件事情
如果所依赖的事情没有执行,ant会先运行依赖事情,然后再运行当前事情
-->
<!-- 初始化 -->
<target name="init">
<!-- 建立classes目录 -->
<mkdir dir="${dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
</target>
<!-- 建立jar包 -->
<target name="build" depends="compile">
<!--
<jar jarfile="${hello_jar}" basedir="${dest}"/>
创建一个名称是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="${hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加内容 -->
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 复制jar文件 todir="复制到目录"-->
<copy file="${hello_jar}" tofile="${dest}\temp.jar"/>
<copy todir="temp">
<!-- 不按照默认方式 defaultexcludes="" -->
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</copy>
<copy todir="temp2">
<fileset dir="src">
<and>
<contains text="main"/>
<size value="1" when="more"/>
</and>
</fileset>
</copy>
<!-- 移动jar文件 -->
<move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 创建zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--替换input.txt内容中的old为new
<replace file="input.txt" token="old" value="new"/>
-->
</target>
<!-- 运行 -->
<target name="run" depends="build">
<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
</target>
<!-- 清除 -->
<target name="clean">
<!-- 删除生成的文件 -->
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
<!-- 重新运行 -->
<target name="rerun" depends="clean,run">
<echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
<!--项目demo2 -->
<description>projectName系统发布</description>
<!--属性设置-->
<property environment="env" />
<property name="src.dir" value="${basedir}/src" />
<property name="jar.file" value="projectName.jar" />
<property name="java.lib.dir" value="${env.JAVA_HOME}/lib" />
<property name="build.dir" value="${basedir}/build" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="dist.dir" value="D:/contrib" />
<!-- 基本编译路径设置 定义多个classpath-->
<path id="compile.classpath">
<fileset dir="${java.lib.dir}">
<include name="tools.jar" />
</fileset>
<fileset dir="D:/contrib">
<include name="*.jar" />
</fileset>
</path>
<!-- 运行路径设置 -->
<!--path id="run.classpath">
<path refid="compile.classpath" />
<pathelement location="${classes.dir}" />
</path-->
<!-- 排除java源文件的模式集 -->
<patternset id="no.java">
<exclude name="**/*.java" />
</patternset>
<!-- 初始化,建立目录,将多个src目录复制到同一src目录,编译,打包完成后自动清除 -->
<target name="init" description="初始化,建立目录,复制文件">
<mkdir dir="${classes.dir}" />
<mkdir dir="${dist.dir}" />
<mkdir dir="${src.dir}" />
<copy todir="${src.dir}">
<fileset dir="${basedir}/path1/src">
<include name="**/*.java" />
</fileset>
</copy>
<copy todir="${src.dir}">
<fileset dir="${basedir}/path2/src">
<include name="**/*.java" />
</fileset>
</copy>
<copy todir="${src.dir}">
<fileset dir="${basedir}/path3/src">
<include name="**/*.java" />
</fileset>
</copy>
<copy todir="${src.dir}">
<fileset dir="${basedir}/path4/src">
<include name="**/*.java" />
</fileset>
</copy>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<patternset refid="no.java" />
</fileset>
</copy>
</target>
<!-- 编译源文件-->
<target name="compile" depends="init" description="编译源文件">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.5" target="1.5">
<classpath refid="compile.classpath" />
</javac>
</target>
<!-- 打包类文件 -->
<target name="jar" depends="compile" description="打包类文件">
<jar jarfile="${dist.dir}/${jar.file}" >
<fileset dir="${classes.dir}" includes="**/*.*" />
</jar>
</target>
<!-- 清理,删除临时目录 -->
<target name="clean" depends="jar" description="清理,删除临时目录">
<delete dir="${build.dir}" />
<delete dir="${basedir}/.settings" />
<delete dir="${src.dir}" />
<delete dir="${basedir}/bin" />
<echo level="info">清理完毕</echo>
</target>
<!-- 从打包后jar的文件里运行 -->
<!--target name="runjar" depends="jar" description="运行jar">
<java jar="${dist.dir}/${jar.file}" fork="yes" dir="${basedir}" />
</target-->
<!-- 运行 -->
<!--target name="run" depends="compile" description="运行">
<java classname="powerwind.Sample" fork="yes" dir="${basedir}">
<classpath refid="run.classpath" />
<arg line="${param.msg}" />
</java>
</target-->
<!-- demo2 end-->
</project>
Ant之build.xml语法案例
最新推荐文章于 2021-06-07 18:34:46 发布