﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我的玻璃盒子-文章分类-Java</title><link>http://www.cppblog.com/epubcn/category/6495.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 24 May 2008 06:25:40 GMT</lastBuildDate><pubDate>Sat, 24 May 2008 06:25:40 GMT</pubDate><ttl>60</ttl><item><title>[转载] ANT的安装/配置笔记</title><link>http://www.cppblog.com/epubcn/articles/45217.html</link><dc:creator>深蓝色系统</dc:creator><author>深蓝色系统</author><pubDate>Sun, 23 Mar 2008 14:45:00 GMT</pubDate><guid>http://www.cppblog.com/epubcn/articles/45217.html</guid><wfw:comment>http://www.cppblog.com/epubcn/comments/45217.html</wfw:comment><comments>http://www.cppblog.com/epubcn/articles/45217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/epubcn/comments/commentRss/45217.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/epubcn/services/trackbacks/45217.html</trackback:ping><description><![CDATA[<div class=entry-body>
<p>内容摘要：<br>ant是一个基于JAVA的自动化脚本引擎，脚本格式为XML。除了做JAVA编译相关任务外，ANT还可以通过插件实现很多应用的调用。<br></p>
<ol>
    <li>ANT的基本概念：
    <li>ANT的安装：解包，设置路径
    <li>ANT的使用：最好的学习只不过是一个简单实用的例子起步&#8230;&#8230; </li>
</ol>
</div>
<div class=entry-more id=more>
<h2>ANT的基本概念：Java的Makefile</h2>
<p>当一个代码项目大了以后，每次重新编译，打包，测试等都会变得非常复杂而且重复，因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的，当然不会用平台相关的make脚本来完成这些批处理任务了，ANT本身就是这样一个流程脚本引擎，用于自动化调用程序完成项目的编译，打包，测试等。除了基于JAVA是平台无关的外，脚本的格式是基于XML的，比make脚本来说还要好维护一些。<br></p>
<p>每个ant脚本（缺省叫build.xml）中设置了一系列任务(target)：比如对于一个一般的项目可能需要有以下任务。</p>
<ul>
    <li>任务1：usage 打印本脚本的帮助信息（缺省）
    <li>任务2：clean &lt;-- init 清空初始化环境
    <li>任务3：javadoc &lt;-- build &lt;-- init 生成JAVADOC
    <li>任务4：jar &lt;-- build &lt;-- init 生成JAR
    <li>任务5：all &lt;-- jar + javadoc &lt;-- build &lt;-- init 完成以上所有任务：jar javadoc </li>
</ul>
而多个任务之间往往又包含了一定了依赖关系：比如把整个应用打包任务(jar)的这个依赖于编译任务(build)，而编译任务又依赖于整个环境初始化任务(init)等。<br><br>注：我看到很多项目的ant脚本中的命名基本上都是一致的，比如：编译一般叫build或者compile；打包一般叫jar或war；生成文档一般命名为javadoc或javadocs；执行全部任务all。在每个任务的中，ANT会根据配置调用一些外部应用并配以相应参数执行。虽然ANT可调用的外部应用种类非常丰富，但其实最常用的就2，3个：比如javac javadoc jar等。
<h2>ANT的安装</h2>
解包后在系统可执行路径中加入指向ant的bin的路径就可以了，比如可以在GNU/Linux上把以下配置加入/etc/profile中：<br>export ANT_HOME=/home/ant<br>export JAVA_HOME=/usr/java/j2sdk1.4.1<br>export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin<br><br>这样执行ant 后，如果不指定配置文件ant会缺省找build.xml这个配置文件，并根据配置文件执行任务，缺省的任务设置可以指向最常用的任务，比如： build，或指向打印帮助信息：usage，告诉用户有那些脚本选项可以使用。<br><br>
<h2>ANT的使用<br></h2>
<div style="TEXT-ALIGN: left">最好的学习过程就是看懂那些open source项目中的build.xml脚本，然后根据自己的需要简化成一个更简单的，ANT和APACHE上很多非常工程派的项目：简单易用，而且适应性非常强，因为这些项目的建立往往来源于开发人员日常最直接的需求。<br>以下是的一个<a href="http://sourceforge.net/projects/weblucene/"><u><font color=#0066cc>WebLucene</font></u></a>应用的例子：修改自<a href="http://www.jdom.org/"><u><font color=#0066cc>JDOM</font></u></a>的build.xml：<br><br>&lt;project default="usage" basedir="."&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Initialization target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;tstamp/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property file="${basedir}/build.properties" /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="Name" value="ProjectFullName"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="name" value="project_name"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="version" value="0.2"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="year" value="2003"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;echo message="----------- ${Name} ${version} [${year}] ------------"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;property name="debug" value="off"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="optimize" value="on"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="deprecation" value="on"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;property name="src.dir" value="./src/WEB-INF/src"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="lib.dir" value="./src/WEB-INF/lib"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="packages" value="com.chedong.*,org.apache.lucene.*"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;property name="build.src" value="./src/WEB-INF/build"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="build.dest" value="./src/WEB-INF/classes"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="build.javadocs" value="./src/doc"/&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;path id="classpath"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement path="${jsdk_jar}"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/path&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;filter token="year" value="${year}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;filter token="version" value="${version}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;filter token="date" value="${TODAY}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;filter token="log" value="true"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;filter token="verbose" value="true"/&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Help on usage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="usage" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="${Name} Build file"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="-------------------------------------------------------------"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=" available targets are:"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp;&nbsp; jar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; generates the ${name}.jar file"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp;&nbsp; build&nbsp;&nbsp;&nbsp; --&gt; compiles the source code"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp;&nbsp; javadoc&nbsp; --&gt; generates the API documentation"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp;&nbsp; clean&nbsp;&nbsp;&nbsp; --&gt; cleans up the directory"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=" Please rename build.properties.default to build.properties"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=" and edit build.properties to specify JSDK 2.3 classpath."/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=" See the comments inside the build.xml file for more details."/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message="-------------------------------------------------------------"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;echo message=""/&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Prepares the source code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="prepare-src" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- create directories --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.src}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.dest}"/&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;!-- copy src files --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;copy todir="${build.src}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${src.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/copy&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Compiles the source directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="build" depends="prepare-src"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;javac srcdir="${build.src}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${build.dest}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="${debug}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optimize="${optimize}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="classpath"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/javac&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Creates the class package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="jar" depends="build"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;jar jarfile="${lib.dir}/${name}.jar"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; basedir="${build.dest}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="**"/&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Creates the API documentation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="javadoc" depends="build"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.javadocs}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;javadoc packagenames="${packages}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sourcepath="${build.src}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${build.javadocs}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; author="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; splitindex="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; windowtitle="${Name} API"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doctitle="${Name}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="classpath"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/javadoc&gt;<br>&nbsp; &lt;/target&gt;<br><br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Clean targets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="clean" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.src}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.dest}/org"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.dest}/com"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${build.dest}" includes="**/*.class"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/delete&gt;<br>&nbsp; &lt;/target&gt;<br>&lt;/project&gt;<br>&lt;!-- End of file --&gt;<br><br>缺省任务：usage 打印帮助文档，告诉有那些任务选项：可用的有build, jar, javadoc和clean.<br><br>初始化环境变量：init<br>所有任务都基于一些基本环境变量的设置初始化完成，是后续其他任务的基础，在环境初始化过程中，有2点比较可以方便设置：<br><br>1 除了使用却缺省的property设置了JAVA源路径和输出路径外，引用了一个外部的build.properties文件中的设置，<br>&lt;property file="${basedir}/build.properties" /&gt;<br>这样大部分简单配置用户只要会看懂build.properties就可以了，毕竟XML比起key value的属性文件还是要可读性差一些。用build.properties也可以方便其他用户从编译的细节中解放出来。<br><br>2 CLASSPATH设置：使用了其中的：<br>&nbsp;&nbsp;&nbsp; &lt;path id="classpath"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement path="${jsdk_jar}"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/path&gt;<br>则相当于设置了：CLASSPATH=/path/to/resin/lib/jsdk23.jar; /path/to/project/lib/*.jar;<br><br>文件复制：prepare-src<br>创建临时SRC存放目录和输出目录。<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Prepares the source code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="prepare-src" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- create directories --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.src}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.dest}"/&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;!-- copy src files --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;copy todir="${build.src}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${src.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/copy&gt;<br>&nbsp; &lt;/target&gt;<br><br>编译任务：build<br>编译时的CLASSPATH环境通过一下方式找到引用一个path对象<br>&lt;classpath refid="classpath"/&gt;<br><br>打包任务：jar<br>对应用打包生成项目所写名的.jar文件<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Creates the class package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="jar" depends="build"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;jar jarfile="${lib.dir}/${name}.jar"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; basedir="${build.dest}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="**"/&gt;<br>&nbsp; &lt;/target&gt;<br><br>生成JAVADOC文档任务: javadoc<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Creates the API documentation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="javadoc" depends="build"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.javadocs}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;javadoc packagenames="${packages}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sourcepath="${build.src}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${build.javadocs}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; author="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; splitindex="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; windowtitle="${Name} API"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doctitle="${Name}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="classpath"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/javadoc&gt;<br>&nbsp; &lt;/target&gt;<br><br>清空临时编译文件：clean<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;!-- Clean targets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp; &lt;target name="clean" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.src}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.dest}/org"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete dir="${build.dest}/com"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;delete&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${build.dest}" includes="**/*.class"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/delete&gt;<br>&nbsp; &lt;/target&gt;<br><br>TODO：<br>更多任务/扩展：（样例）<br></div>
<ul>
    <li>测试任务：JUnit测试
    <li>代码风格检查任务：CheckStyle，Jalopy等
    <li>邮件警报任务：可以把以上这些任务的输出警告发送到制定的用户列表中，这个任务可以设置每天自动运行。 </li>
</ul>
<br>参考资料：<br>
<p>Jakarta ANT:<br><a href="http://ant.apache.org/"><u><font color=#0066cc>http://ant.apache.org</font></u></a></p>
</div>
<img src ="http://www.cppblog.com/epubcn/aggbug/45217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/epubcn/" target="_blank">深蓝色系统</a> 2008-03-23 22:45 <a href="http://www.cppblog.com/epubcn/articles/45217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>