Ant 默认的构建文件为 build.xml

 
第一章: Getting Started
l          Ant 默认的构建文件为 build.xml
l          Ant 构建文件中的根 XML 元素为 project , project 可用属性为:
Attribute
Description
Required
name
Defines the project name
No
default
The target to invoke if no target is explicitly specified
Yes
basedir
The base directory from which all relative paths are resolved
No

 
l          Ant 工程 (project) 中由若干个构建目标 (target) 组成,构建目标是一组相关任务 (Tasks) 的集合,如编译文件、创建目录、打包等,构建目标之间可以建立依赖关系,构建目标执行之前必须先执行所有所依赖的构建目标。 Ant 工程通过 project 的 default 属性指定默认的构建目标名称。构建目标的 XML 元素为 target ,其可用的属性为:
Attribute
Description
Required
name
Defines the target name
Yes
depends
Comma-separated list of targets to execute before this target
No
if
Name of a property needed to run this task
No
unless
Name of a property that can not be set before running this task
No
description
Description of this target's purpose
No

 
l          构建任务 (Tasks) 是构建目标 (target) 的基本组成部分,是 Ant 构建的基本执行单元。 Ant 中存在很多内建的构建任务,如下表所示:
Task Name
Description
ant
Executes Ant
antcall
Executes a target from the current build file
antstructure
From a given build file, creates a DTD reflecting all of the tasks Ant currently knows about
apply [execon]
Invokes a native executable
available
Sets a Boolean value in a property according to the availability of desired resource
basename
Sets a property to the last element of a specified path in an effort to determine a file's name without directory structure
buildnumber
Manages build numbers
bunzip2
Expands GZip or BZip2 archives
bzip2
Packs GZip or BZip2 archives
checksum
Creates checksums for one or more files
chmod
Modifies file permissions on Unix
concat
Concatenates multiple files
condition
Checks the result of a condition and sets the result to in a property
copy [copydir, copyfile]
Copies files
cvs
Interacts with a CVS repository
cvschangelog
Converts a series of CVS change logs into an XML report
cvspass
Adds entries to a .cvspass file
cvstagdiff
Creates an XML report highlighting the differences between tags
cvsversion
Finds the CVS software version
defaultexcludes
Modifies the list of default exclude patterns, affecting which files are automatically excluded from processing by file-related tasks
delete [deltree]
Delete files and folders
dependset
Deletes target files that are older than new source files
dirname
Assigns a file's directory path to a property
ear
Extends the jar task to support handling files for an Enterprise Application archive (EAR)
echo
Echoes text to System.out or to a file
exec
Invokes a native executable
fail
Halts and exits a build by throwing a BuildException
filter
Sets a token filter that can be used by filter-related tasks such as copy
fixcrlf
Adds or remove tabs, carriage returns, linefeeds, and EOF characters from a set of files
genkey
Adds a new key to a given keystore
get
Retrieves files using FTP, HTTP, and more from a URL
gunzip
Unpacks a GZip file
gzip
Packs a GZip file
import
Allows the use of other Ant files
input
Displays a message and reads a line of input from the console, allowing for user input during the build process
jar
Creates a JAR archive similar to Java's jar command
java
Executes the Java interpreter to run a class or application
javac
Compiles the specified source file(s)
javadoc [javadoc2]
Invokes the javadoc tool to create documentation
loadfile
Sets a property file to the entire contents of a text file
loadproperties
Loans an entire property file into Ant properties
macrodef
Defines a new task as a macro built-up upon other tasks
mail
Sends SMTP mail messages
manifest
Creates an archive's manifest file
mkdir
Makes a new directory
move [rename]
Moves a file to another directory
parallel
Contains other Ant tasks that can be run simultaneously by multiple Java threads
patch
Uses the patch command (assuming it is on the path) to apply diff files to a source file (or files)
pathconvert
Converts paths between platforms
presetdef
Defines a new task based on an existing task with certain options preset as defaults
property
Sets one or more properties to new values
record
Runs a listener that records the logging output of the build process to a file
replace
Replaces a string with another in all files in a directory
rmic
Invokes the rmic compiler
sequential
A container task that can contain other Ant tasks and run them in sequence
signjar
Uses the JarSigner to securely sign ZIP and JAR archives
sleep
Suspends execution for a specified period of time
sql
Runs SQL statements against a database
subant
Runs Ant within all subdirectories of the project directory
sync
Synchronizes two directory trees
tar
Makes a new TAR archive
taskdef
Creates a new task definition and adds it to the current project
tempfile
Sets a temporary filename to an Ant property
tstamp
Sets time-based properties to the current time
typedef
Creates a new task or data type for use in the current project
unjar
Unpacks a JAR file
untar
Unpacks a TAR file
unwar
Unpacks a WAR file
unzip
Unpacks a ZIP file
uptodate
Sets a property value to true if a given target file is newer than a set of source files
waitfor
Halts a build and continues when specified conditions are met
war
Creates WAR archive files (an extension of the jar task)
whichresource
Locates a class or resource, either on the current class path or the system class path
xmlproperty
Loads Ant properties from an XML property file
xslt [style]
Transforms a set of documents via XSLT
zip
Creates and packs a new ZIP archive

 
Ant 除了核心任务 (Core Tasks) 之外还可以使用可选任务,但使用可选任务时需要额外的 jar 库文件的支持,这些库文件需要存放在 Ant 的 lib 目录下。有了这些可选任务 Ant 可以做更多的事情,如 ftp 、编译 .Net 工程,使用 ClearCase 等。

 
l          工程属性 (properties) 是除了构建目标 (target) 、构建任务 (tasks) 之外的另一个 Ant 支柱,工程属性其实是一个名称 - 值对,可以在构建任务的 XML 元素中使用,使用方式为: ${property-name} 。工程属性的 XML 元素为 property ,其可用的 XML 属性为:
Attribute
Description
Required
classpath
The classpath to use when looking for a resource.
No
classpathref
The classpath to use when looking for a resource, which can then be given as a reference to a path element later in the build file.
No
environment
The prefix to use when retrieving environment variables. For example, if you specify environment="env", you will be able to access operating-system-specific environment variables as property names like ${env.PATH}.
A resource, file, url, or environment attribute is required when not using the name attribute.
file
The name of a property file to load values from.
A resource, file, url, or environment attribute is required when not using the name attribute.
location
Sets the property to the absolute filename of the given file. If an absolute path is supplied, it's left unchanged (with / and / characters converted for the current platforms). Otherwise, the supplied filename is taken as a path relative to the project's base directory and then expanded.
A value, location, or refid element is required when using the name attribute.
name
The name of the property to set.
No
prefix
The prefix to add to properties loaded from a file or a resource. A . is appended to the prefix if none is specified.
No
refid
A reference to a (previously) defined object.
A value, location, or refid element is required when using the name attribute.
resource
The resource name of the property file, used for searching the classpath.
A resource, file, url, or environment attribute is required when not using the name attribute.
url
The URL from which to read properties.
A resource, file, url, or environment attribute is required when not using the name attribute.
value
The value of this property.
A value, location, or refid element is required when using the name attribute.

 
l          Ant 的内建属性:
ant.file
Contains the absolute path of the build file
ant.java.version
Contains the JVM version Ant is using (can hold only 1.1, 1.2, 1.3, 1.4 and [as of Ant 1.6] 1.5)
ant.project.name
Holds the name of the project that is executing (set with the name attribute of project)
ant.version
Contains the version of Ant running
basedir
Holds the absolute path of the project's base directory (set with the basedir attribute of project)
l          Ant 的运行: ant [options] [target [target2 [target3] ...]] ,在 options 中可以指定要执行的构建文件,默认为 build.xml ,如果构建文件为 project.xml ,则相应用 ant 命令为 : ant –f project.xml , target 可以指定多个,之间用空格分隔,如果未指定则使用构建文件中的默认目标。

 

 

 

 

 

 
第二章: Using Properties and Types
l          Condition 任务用于控制其他任务的执行:在 Condition 任务中设置属性值,而在其他任务中根据这些属性值的内容决定是否执行,如:
<condition property="all.set">
        <and>
            <available file="file1.java"/>
             <available file="file2.java"/>
        </and>
</condition>
这个任务用于判断 file1.java 和 file2.java 是否存在,如果都存在,则设置 all.set 属性为 true ,否则为 false;
除了示例中出现的 condition 和 and 条件任务外还有 available 、 or 、 equals 等其他条件任务。
l          在任务中添加 if 或 unless 可以决定任务是否执行,继上例:
														<target name="buildModule" if="all.set"/>
												
														
																        . . .
												
														</target>
												
这个任务当 all.set 为 true 时执行,否则不执行。
l          fail 任务用于中断构建,如:
														
																<fail message="Could not find all files." unless="all.set" />
														
												
当 all.set 为 false 时中断构建,并输出 ” Could not find all files.”
l          从文件装入属性: <property file="build.properties" />
l          将文件内容作为单个属性装入:
<loadfile property="message" srcFile="message.txt"/>
l          属性可以设置多次,后页的属性会覆盖前页的属性值。
l          通过命令行设置属性值:使用 -D 选项
ant -Dmessage="Compiling and compressing"
l          使用环境变量作为属性值,如:
<property environment="env" />
加上这句以后可以使用如下方式获取环境变量 JAVA_HOME 的值:
${env.JAVA_HOME} ,其他环境变量也通过类似方式获得。
l          fileset 用于指定文件集,并设置到属性中用于其他任务的构建,如文件复制、编译等, fileset 的示例如下:
<fileset dir="${source}">
    <include name="**/*.java"/>
    <exclude name="**/*test*"/>
</fileset>
include 用于包含文件, exclude 用于排除文件,通配符 ** 表示当前目录或当前目录下的所有子目录。除了使用 include 和 exclude 之外还可以使用 filename 来指定加入文件集的特定文件,如:
<fileset dir="${source}">
    <filename name="**/*.java"/>
    <filename name="test.cpp"/>
</fileset>
l          使用 fileset 的示例 :
<copy todir="../dest">
    <fileset dir="src">
        <exclude name="**/*.java"/>
    </fileset>
</copy>
这个任务将 fileset 中的文件复制到 ../dest 目录下
l          相对于 fileset 还可以使用 dirset 表示目录集,使用与 fileset 类同。

 

 

 

 

 
第三章: Building Java Code
l          javac 任务用于编译 java 源代码,如:
<javac srcdir="${src}"
    debug="on"
    destdir="${bin}"
    classpath="common.jar"
/>
l          input 任务可接收用户输入,如:
<target name="init">
    <input
        message="Deleting bin directory OK?"
        validargs="y,n"
        addproperty="do.delete"
    />
    <condition property="do.abort">
        <equals arg1="n" arg2="${do.delete}"/>
   </condition>
    <fail if="do.abort">Build aborted.</fail>
    <delete dir="${output}" />
    <mkdir dir="${output}" />
</target>
l          在同一构建文件中可以使用 antcall 任务执行另一个构建任务,并可指定构建参数作为构建属性,如:
<target name="main" depends="init, compile, compress">
   <antcall target="displayMessage">
       <param name="msg" value="${message}"/>
   </antcall>
</target>
<target name="displayMessage">
    <echo message="msg=${msg}"/>
</target>
在本例中 main 任务调用了 displayMessage 任务,并设置 msg 参数作为调用属性,在 displayMessage 任务中可以通过 ${msg} 获取该属性值。
l          使用 ant 任务执行另一 Ant 构建文件,如:
<ant antfile="subproject/subbuild.xml">
    <property name="parameter" value="4096"/>
    <property file="config/subproject/build.properties"/>
</ant>
本例中执行了另一以 subproject/subbuild.xml 为构建文件的 Ant 构建,将指定了构建的属性值,除此之外还可指定构建目标等其他选项。
l          使用 import 导入其他构建文件的内容,如:
<import file="shared.xml"/>
l          使用 javadoc 任务创建 java 文档,如:
<javadoc
     sourcefiles="${src}/Project.java"
     destdir="${docs}"
     author="true"
     version="true"
     use="true"
     windowtitle="Project API">
     <doctitle><![CDATA[<h1>Project API</h1>]]></doctitle>
     <bottom><![CDATA[<i>Copyright &#169; 2005</i>]]></bottom>
</javadoc>
l          使用 jar 任务创建 jar 包,如 :
<jar destfile="${output}/Project.jar" basedir="${output}"
     includes="*.class" >
     <manifest>
         <attribute name="Author" value="${user.name}"/>
         <section name="Shared">
             <attribute name="Title" value="Example"/>
             <attribute name="Vendor" value="MegaAntCo"/>
         </section>
         <section name="Copyright">
             <attribute name="Copy" value="(C) MegaAntCo 2005"/>
         </section>
     </manifest>
</jar>
l          使用 buildnumber 任务读取并创建构建序号, buildnumber 从文件 ( 默认为 build.number) 中读取原构建序号并存到 build.number 属性中,在成功构建后加 1 写回到文件中。 Buildnumber 的 file 属性用于指定存放构建序号的文件。
l          使用 tstamp 任务设置时间属性,有 3 个属性被设置,分别为 DSTAMP ,格式为 ” yyyyMMdd” ; TSTAMP ,格式为 ”hhmm” ; TODAY ,格式为 ”MM dd yyyy” 。 Tstamp 的子任务 format 可以设置时间的格式,如:
<tstamp>
   <format property="timestamp" pattern="MM/dd/yyyy hh:mm:ss"/>
</tstamp>

 

 
第四章: Deploying Builds
l          使用 tar 任务创建 tar 文件,如:
<tar
     destfile="${output}/Project.tar.gz"
     basedir="${output}"
     includes="*.class"
    compression="gzip"/>
l          删除已存在的文件: <delete file="/lib/Project.jar"/>
l          删除已存在的目录: <delete dir="${dist}"/>
l          创建目录: <mkdir dir="${dist}"/>
l          copy 任务用于复制文件或目录。
l          move 任务用于移动文件或目录。
l          使用 ftp 发送或接收文件,如:
<ftp server="xxx.xxx.xxx.xxx" binary="true" verbose="true"
            userid="${name}" password="${password}"
           remotedir="/cgi-bin" action=”send” >
    <fileset dir="${output}">
       <exclude name="*.java"/>
       <exclude name="*.class"/>
       <exclude name="*.txt"/>
   </fileset>
</ftp>
ftp 的 action 包括: put, get, del, list, chmod, mkdir and rmdir
l          使用 telnet ,如:
<telnet userid="steven" password="let_me_in"
                  server="xxx.xxx.xxx.xxx">
     <read>/home/steven</read>
     <write>ls</write>
</telnet>
l          使用 SSH ,如 :
<sshexec host="xxx.xxx.xxx.xxx"
    username="${name}"
    password="${password}"
    command="touch index.html"/>
l          使用 email ,如:
<mail mailhost="smtp.isp.com" mailport="1025" subject="New Build">
    <from address="developer@isp.com"/>
    <replyto address="developer@isp.com"/>
    <to address="list@xyz.com"/>
    <message>Here is the new build.</message>
    <fileset dir="dist">
        <includes name="**/*.tar.gz"/>
    </fileset>
</mail>
l          自动构建:可以使用 Windows 的计划任务,或 Anthill 工具进行自动构建。

 

 

 
第六章: Getting Source Code from CVS Repositories
l          登入 (login) :
<cvspass
       cvsroot=":pserver:steven@STEVE:/home/steven/repository"
        password="opensesame" />
l          检出 (check out) :
<cvs package="GreetingApp" dest="${cvs.dir}" />
l          更新 (update):
<cvs dest="${cvs.dir}" command="update"/>
l          提交 (commit):
<cvs dest="${cvs.dir}/GreetingApp"
command="commit -m 'New Version'"/>
l          创建更新日志 (change log) :
<cvschangelog dir="${cvs.dir}/GreetingApp"
                destfile="changelog.xml" />

 

 
第七章: Executing External Programs
l          执行 Java 代码,如:
<java jar="${bin}/connect.jar"
    fork="true"
    failοnerrοr="true"
    maxmemory="512m"
    >
    <arg value="-q"/>
    <classpath>
        <pathelement location="${bin}/connect.jar"/>
        <pathelement path="${java.class.path}"/>
    </classpath>
</java>
l          exec 任务用于执行系统命令或外部程序,如:
<exec dir="." executable="/bin/cpp.exe"
        failοnerrοr="true">
            <arg line="-c ${src}/*.cpp ${output}"/>
</exec>
l          用 apply 任务执行批处理, apply 与 exec 的差别是 apply 接收 fileset ,这样可以对多个文件或输入执行相同中的命令或程序。
l          用 parallel 可执行多线程任务。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaohuis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值