使用ant <build.xml>编译,打包java项目,build.xml如下:
<project name="seleniumWebDriver" default="build" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src" />
<property name="build" location="target" />
<property name="selenium" location="selenium" />
<target name="init">
<!-- Create the time stamp -->
<tstamp />
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}" />
<mkdir dir="${build}/classes" />
</target>
<target name="compile" depends="init" description="compile the source ">
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}/classes" includeantruntime="false">
<classpath>
<fileset dir="${hadoop.home}/share/hadoop">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
</target>
<target name="build" depends="compile" description="generate the distribution">
<!-- Build the jar file -->
<jar jarfile="${build}/lib/WordCount.jar" basedir="${build}/classes" />
</target>
<target name="clean" description="clean up">
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}" />
</target>
</project>
build.xml ant基本常用元素讲解
Project元素
Project元素是Ant文件的根元素,Ant构建文件中至少应该包含一个project元素,否则会发生错误,在每个project元素下面可以包含多个target元素。project的属性包括:
name : 项目名称
default:当调用时没有指定target时,此project的默认targe 当ant命令没有指定要执行的target ,则将执行默认的target
basedir:用于指定基路径的位置,改属性没有指定时,使用Ant的构建文件的父目录作为基路径
target元素
name: target的名称,这个属性在一个project中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。
depends:用来描述target间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target 。被依赖的 target 会先执行。
if:用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。
unless:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
description:该属性是关于 target 功能的简短描述和说明。
property元素
property元素可看作变量或者参数的定义
例如<property name ="name" value ="philander"/>
若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入<property file="build.properties"/>。
Ant常用命令:
tstamp 时间格式化
<tstamp>
<format property="time" pattern="yyyyMMddHHmmss" />
</tstamp>
执行那些任务
<target name="run">
<antcall target="test"/>
<antcall target="report"/>
</target>
copy 拷贝文件
复制单个文件
<copy file="original.txt" tofile="copied.txt"/>
对文件目录进行复制:
<copy todir="${jmeter.result.html.dir2}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
<exclude name="**/*.class"/>
</fileset>
</copy>
将文件复制到另外的目录:
<copy file="source.txt" todir="../target/"/>
delete 删除文件
对文件或目录进行删除
删除某个文件:
<delete file="/home/photos/philander.jpg"/>
删除某个目录:
<delete dir="/home/photos"/>
删除所有的备份目录或空目录:
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
mkdir 创建目录
<mkdir dir="/home/test"/>
move 移动文件或者目录
<move file="sourcefile" tofile="destfile"/>
移动单个文件到另一个目录:
<move file="sourcefile" todir="movedir"/>
移动某个目录到另一个目录:
<move todir="newdir"> <fileset dir="olddir"/></move>
echo 命令
该任务的作用是根据日志或监控器的级别输出信息
它包括 message 、 file 、 append 和 level 四个属性,举例如下
<echo message="Hello,ANT" file="/home/logs/ant.log" append="true">
javac 编译
<javac srcdir="${basedir}/src" destdir="${basedir}/WebRoot/WEB-INF/classes" target='1.7' source="1.7" encoding="utf-8" debug="true"
includeantruntime="false">
<!-- <compilerarg line="-encoding UTF-8 "/> -->
<classpath>
<fileset dir="${basedir}/WebRoot/WEB-INF/lib">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
java命令执行Java程序
<java classname ="HelloWorld">
<classpath>
<pathelement path="${basedir}/build/classes"/>
</classpath>
</java>
使用war命令打包JavaEE项目
<target name ="war" depends ="compile">
<war destfile ="${build}/WebTest.war" webxml ="${basedir}/WebContent/WEB-INF/web.xml">
<!-- 拷贝WebRoot 下除了WEB-INF 和META-INF 的两个文件夹-->
<fileset dir ="${basedir}/WebContent" includes ="**/*.jsp"/>
<!-- 拷贝lib 目录下的jar 包-->
<lib dir ="${lib}"/>
<!-- 拷贝build/classes 下的class 文件-->
<classes dir ="${classes}"/>
</war>
</target>