﻿<?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>BlogJava-苍穹之铁十字-随笔分类-ANT</title><link>http://www.blogjava.net/kuxiaoku/category/23277.html</link><description>收藏</description><language>zh-cn</language><lastBuildDate>Mon, 11 Jun 2007 14:58:27 GMT</lastBuildDate><pubDate>Mon, 11 Jun 2007 14:58:27 GMT</pubDate><ttl>60</ttl><item><title>Eclipse快速上手指南之使用ANT</title><link>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123389.html</link><dc:creator>苦笑枯</dc:creator><author>苦笑枯</author><pubDate>Mon, 11 Jun 2007 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123389.html</guid><wfw:comment>http://www.blogjava.net/kuxiaoku/comments/123389.html</wfw:comment><comments>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuxiaoku/comments/commentRss/123389.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuxiaoku/services/trackbacks/123389.html</trackback:ping><description><![CDATA[<div id="contitle">
<h1>Eclipse快速上手指南之使用ANT</h1>
</div>
<div id="conauthor"><span>
2004-07-30 17:35
</span><span>作者：
</span><span>出处：
J2ME开发网
</span><span>&nbsp;&nbsp;&nbsp; Ant是Java平台下非常棒的批处理命令执行程序，能非常方便地自动完成编译，测试，打包，部署等等一系列任务，大大提高开发效率。如果你现在还没有开始使用Ant，那就要赶快开始学习使用，使自己的开发水平上一个新台阶。<br></span></div>
<br>　　Eclipse中已经集成了Ant，我们可以直接在Eclipse中运行Ant。<br><br>　　以前面建立的Hello工程为例，创建以下目录结构：<br><br>
<table align="center" border="0" width="90%">
    <tbody>
        <tr>
            <td>
            <div align="center"><img src="http://www.yesky.com/image20010518/208897.jpg" onerror="this.src='http://www.yesky.com/image20010518/208897.jpg';" align="middle" border="1" hspace="3" vspace="1"></div>
            </td>
        </tr>
    </tbody>
</table>
<br>　　新建一个build.xml，放在工程根目录下。build.xml定义了Ant要执行的批处理命令。虽然Ant也可以使用其它文件名，但是遵循标准能更使开发更规范，同时易于与别人交流。<br><br>　　通常，src存放Java源文件，classes存放编译后的class文件，lib存放编译和运行用到的所有jar文件，web存放JSP等web文件，dist存放打包后的jar文件，doc存放API文档。<br><br>　　然后在根目录下创建build.xml文件，输入以下内容： <br><font color="#006400" face="Courier New"><br></font>
<table align="center" bgcolor="#d9ecee" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td><font color="#006400" face="Courier New">＜?xml version="1.0"?＞<br>＜project name="Hello world" default="doc"＞</font><br><br><font color="#006400" face="Courier New">＜!-- properies --＞<br>＜property name="src.dir" value="src" /＞<br>＜property name="report.dir" value="report" /＞<br>＜property name="classes.dir" value="classes" /＞<br>＜property name="lib.dir" value="lib" /＞<br>＜property name="dist.dir" value="dist" /＞<br>＜property name="doc.dir" value="doc"/＞</font><br><br><font color="#006400" face="Courier New">＜!-- 定义classpath --＞<br>＜path id="master-classpath"＞<br>＜fileset file="${lib.dir}/*.jar" /＞<br>＜pathelement path="${classes.dir}"/＞<br>＜/path＞</font><br><br><font color="#006400" face="Courier New">＜!-- 初始化任务 --＞<br>＜target name="init"＞<br>＜/target＞</font><br><br><font color="#006400" face="Courier New">＜!-- 编译 --＞<br>＜target name="compile" depends="init" description="compile the source files"＞<br>＜mkdir dir="${classes.dir}"/＞<br>＜javac srcdir="${src.dir}" destdir="${classes.dir}" target="1.4"＞<br>＜classpath refid="master-classpath"/＞<br>＜/javac＞<br>＜/target＞</font><br><br><font color="#006400" face="Courier New">＜!-- 测试 --＞<br>＜target name="test" depends="compile" description="run junit test"＞<br>＜mkdir dir="${report.dir}"/＞<br>＜junit printsummary="on"<br>haltonfailure="false"<br>failureproperty="tests.failed"<br>showoutput="true"＞<br>＜classpath refid="master-classpath" /＞<br>＜formatter type="plain"/＞<br>＜batchtest todir="${report.dir}"＞<br>＜fileset dir="${classes.dir}"＞<br>＜include name="**/*Test.*"/＞<br>＜/fileset＞<br>＜/batchtest＞<br>＜/junit＞<br>＜fail if="tests.failed"＞<br>***********************************************************<br>**** One or more tests failed! Check the output ... ****<br>***********************************************************<br>＜/fail＞<br>＜/target＞</font><br><br><font color="#006400" face="Courier New">＜!-- 打包成jar --＞<br>＜target name="pack" depends="test" description="make .jar file"＞<br>＜mkdir dir="${dist.dir}" /＞<br>＜jar destfile="${dist.dir}/hello.jar" basedir="${classes.dir}"＞<br>＜exclude name="**/*Test.*" /＞<br>＜exclude name="**/Test*.*" /＞<br>＜/jar＞<br>＜/target＞</font><br><br><font color="#006400" face="Courier New">＜!-- 输出api文档 --＞<br>＜target name="doc" depends="pack" description="create api doc"＞<br>＜mkdir dir="${doc.dir}" /＞<br>＜javadoc destdir="${doc.dir}"<br>author="true"<br>version="true"<br>use="true"<br>windowtitle="Test API"＞<br>＜packageset dir="${src.dir}" defaultexcludes="yes"＞<br>＜include name="example/**" /＞<br>＜/packageset＞<br>＜doctitle＞＜![CDATA[＜h1＞Hello, test＜/h1＞]]＞＜/doctitle＞<br>＜bottom＞＜![CDATA[＜i＞All Rights Reserved.＜/i＞]]＞＜/bottom＞<br>＜tag name="todo" scope="all" description="To do:" /＞<br>＜/javadoc＞<br>＜/target＞<br>＜/project＞</font></td>
        </tr>
    </tbody>
</table>
<br>　　以上xml依次定义了init（初始化），compile（编译），test（测试），doc（生成文档），pack（打包）任务，可以作为模板。<br><br>　　选中Hello工程，然后选择&#8220;Project&#8221;，&#8220;Properties&#8221;，&#8220;Builders&#8221;，&#8220;New&#8230;&#8221;，选择&#8220;Ant Build&#8221;：<br><br>
<table align="center" border="0" width="90%">
    <tbody>
        <tr>
            <td>
            <div align="center"><img src="http://www.yesky.com/image20010518/208898.jpg" onerror="this.src='http://www.yesky.com/image20010518/208898.jpg';" align="middle" border="1" hspace="3" vspace="1"></div>
            </td>
        </tr>
    </tbody>
</table>
<br>
填入Name：Ant_Builder；Buildfile：build.xml；Base
Directory：${workspace_loc:/Hello}（按&#8220;Browse
Workspace&#8221;选择工程根目录），由于用到了junit.jar包，搜索Eclipse目录，找到junit.jar，把它复制到
Hello/lib目录下，并添加到Ant的Classpath中：<br><br>
<table align="center" border="0" width="90%">
    <tbody>
        <tr>
            <td>
            <div align="center"><img src="http://www.yesky.com/image20010518/208899.jpg" onerror="this.src='http://www.yesky.com/image20010518/208899.jpg';" align="middle" border="1" hspace="3" vspace="1"></div>
            </td>
        </tr>
    </tbody>
</table>
<br>　　然后在Builder面板中钩上Ant_Build，去掉Java Builder：<br><br>
<table align="center" border="0" width="90%">
    <tbody>
        <tr>
            <td>
            <div align="center"><img src="http://www.yesky.com/image20010518/208900.jpg" onerror="this.src='http://www.yesky.com/image20010518/208900.jpg';" align="middle" border="1" hspace="3" vspace="1"></div>
            </td>
        </tr>
    </tbody>
</table>
<br>　　再次编译，即可在控制台看到Ant的输出：<br><br>
<table align="center" bgcolor="#d9ecee" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td><font color="#006400" face="Courier New">Buildfile: F:\eclipse-projects\Hello\build.xml</font><br><br><font color="#006400" face="Courier New">init:</font><br><br><font color="#006400" face="Courier New">compile:<br>[mkdir] Created dir: F:\eclipse-projects\Hello\classes<br>[javac] Compiling 2 source files to F:\eclipse-projects\Hello\classes</font><br><br><font color="#006400" face="Courier New">test:<br>[mkdir] Created dir: F:\eclipse-projects\Hello\report<br>[junit] Running example.HelloTest<br>[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.02 sec</font><br><br><font color="#006400" face="Courier New">pack:<br>[mkdir] Created dir: F:\eclipse-projects\Hello\dist<br>[jar] Building jar: F:\eclipse-projects\Hello\dist\hello.jar</font><br><br><font color="#006400" face="Courier New">doc:<br>[mkdir] Created dir: F:\eclipse-projects\Hello\doc<br>[javadoc] Generating Javadoc<br>[javadoc] Javadoc execution<br>[javadoc] Loading source files for package example...<br>[javadoc] Constructing Javadoc information...<br>[javadoc] Standard Doclet version 1.4.2_04<br>[javadoc] Building tree for all the packages and classes...<br>[javadoc] Building index for all the packages and classes...<br>[javadoc] Building index for all classes...<br>[javadoc] Generating F:\eclipse-projects\Hello\doc\stylesheet.css...<br>[javadoc]
            Note: Custom tags that could override future standard tags: @todo. To
            avoid potential overrides, use at least one period character (.) in
            custom tag names.<br>[javadoc] Note: Custom tags that were not seen: @todo<br>BUILD SUCCESSFUL<br>Total time: 11 seconds</font></td>
        </tr>
    </tbody>
</table>
<br>
Ant依次执行初始化，编译，测试，打包，生成API文档一系列任务，极大地提高了开发效率。将来开发J2EE项目时，还可加入部署等任务。并且，即使
脱离了Eclipse环境，只要正确安装了Ant，配置好环境变量ANT_HOME=＜Ant解压目录＞，Path=&#8230;;%ANT_HOME%\bin，
在命令行提示符下切换到Hello目录，简单地键入ant即可。<img src ="http://www.blogjava.net/kuxiaoku/aggbug/123389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuxiaoku/" target="_blank">苦笑枯</a> 2007-06-11 14:51 <a href="http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant打包一记</title><link>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123388.html</link><dc:creator>苦笑枯</dc:creator><author>苦笑枯</author><pubDate>Mon, 11 Jun 2007 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123388.html</guid><wfw:comment>http://www.blogjava.net/kuxiaoku/comments/123388.html</wfw:comment><comments>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuxiaoku/comments/commentRss/123388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuxiaoku/services/trackbacks/123388.html</trackback:ping><description><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td valign="top"><span class="arttitle">ant打包一记</span></td>
        </tr>
        <tr>
            <td class="details" align="right" valign="top">By&nbsp; <a  href="http://www.blueidea.com/bbs/viewuser.asp?username=%E5%87%8C%E4%BA%91%E5%BF%97" target="_blank" class="biuser">凌云志</a> 发表于 2007-6-10 13:21:00&nbsp; </td>
        </tr>
        <tr>
            <td class="artbody" valign="top"><br>
            <p>以前对于ant的使用总是避而不触，总以为有点难度，最近一直看我们项目中的build.xml忽而觉得非常简单，也模仿着在我的<a  href="http://www.javaedu.com/">www.javaedu.com</a>开发上使用了一下，非常不错，以下是我的打包文件build.xml：<br><br>&lt;?xml version="1.0"?&gt;<br>&nbsp;<br>&lt;project name="payManager" default="all" basedir="."&gt;<br>&nbsp;<br>&nbsp;&lt;property name="src.dir"&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;value="JavaSource" /&gt;<br>&nbsp;&lt;property name="classes.dir" &nbsp;&nbsp;value="WebContent/WEB-INF/classes" /&gt;<br>&nbsp;&lt;property name="lib.dir"&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;value="WebContent/WEB-INF/lib" /&gt;<br>&nbsp;&lt;property name="WebContent.dir"&nbsp;&nbsp;&nbsp;&nbsp; value="WebContent" /&gt;<br>&nbsp;<br>&nbsp;&lt;!--用于输出的临时文件夹与打包的文件夹--&gt;<br>&nbsp;&lt;property name="temp.dir"&nbsp;&nbsp;&nbsp;&nbsp; value="D:\temp" /&gt;<br>&nbsp;&lt;property name="war.dir"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="D:\war" /&gt;</p>
            <p>&nbsp;&lt;!--对于不同环境的war包，使用不同的配置文件--&gt;<br>&nbsp;&lt;property name="生产.dir"&nbsp;&nbsp;&nbsp;&nbsp; value="bak\生产" /&gt;<br>&nbsp;&lt;property name="开发.dir"&nbsp;&nbsp;&nbsp;&nbsp; value="bak\开发" /&gt;<br>&nbsp;<br>&nbsp;&lt;!-- 定义classpath --&gt;<br>&nbsp;&lt;path id="master-classpath"&gt;<br>&nbsp;&nbsp;&lt;fileset file="${lib.dir}/*.jar" /&gt;<br>&nbsp;&nbsp;&lt;pathelement path="${classes.dir}" /&gt;<br>&nbsp;&lt;/path&gt;</p>
            <p>&nbsp;&lt;target name="clean"&gt;&nbsp;<br>&nbsp;&nbsp;&lt;delete dir="${temp.dir}" /&gt;<br>&nbsp;&nbsp;&lt;delete dir="${classes.dir}" /&gt;<br>&nbsp;&nbsp;&lt;delete file="${war.dir}/开发/ROOT.war"/&gt;<br>&nbsp;&nbsp;&lt;delete file="${war.dir}/生产/ROOT.war"/&gt;<br>&nbsp;&lt;/target&gt;</p>
            <p>&nbsp;&lt;!-- 初始化任务 --&gt;<br>&nbsp;&lt;target name="init" depends="clean"&gt;<br>&nbsp;&lt;/target&gt;</p>
            <p>&nbsp;&lt;!-- 编译 --&gt;<br>&nbsp;&lt;target name="compile" depends="init" description="compile the source files"&gt;<br>&nbsp;&nbsp;&lt;mkdir dir="${temp.dir}/生产" /&gt;<br>&nbsp;&nbsp;&lt;mkdir dir="${temp.dir}/开发" /&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;mkdir dir="${classes.dir}" /&gt;</p>
            <p>&nbsp;&nbsp;&lt;javac srcdir="${src.dir}" destdir="${classes.dir}"&nbsp; debug="true" encoding="GB2312"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;classpath refid="master-classpath" /&gt;<br>&nbsp;&nbsp;&lt;/javac&gt;</p>
            <p>&nbsp;&nbsp;&lt;copy todir="${temp.dir}/生产" overwrite="true"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${WebContent.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/**" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/copy&gt;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;copy todir="${temp.dir}/生产/WEB-INF/classes" overwrite="true"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${生产.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="jlo_logging.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="log4j.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvncore.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnForum_i18n_zh_CN.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnforum.xml" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="whirlycache.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/copy&gt;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;copy todir="${temp.dir}/开发" overwrite="true"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${WebContent.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/**" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/copy&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;copy todir="${temp.dir}/开发/WEB-INF/classes" overwrite="true"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${开发.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="jlo_logging.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="log4j.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvncore.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnForum_i18n_zh_CN.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnforum.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="whirlycache.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/copy&gt;<br>&nbsp;&nbsp;<br>&nbsp;&lt;/target&gt;</p>
            <p>&nbsp;&lt;!--打包--&gt;<br>&nbsp;&lt;target name="war" depends="compile"&gt;<br>&nbsp;&nbsp;&lt;mkdir dir="${war.dir}/生产" /&gt;<br>&nbsp;&nbsp;&lt;mkdir dir="${war.dir}/开发" /&gt;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;jar jarfile="${war.dir}/生产/ROOT.war"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${temp.dir}/生产"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/jar&gt;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;jar jarfile="${war.dir}/开发/ROOT.war"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${temp.dir}/开发"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br>&nbsp;&nbsp;&lt;/jar&gt;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;delete dir="${temp.dir}"/&gt;<br>&nbsp;&lt;/target&gt;<br>&nbsp;<br>&nbsp;&lt;target name="all" depends="war"&gt;<br>&nbsp;&nbsp;&lt;delete dir="${classes.dir}" /&gt;<br>&nbsp;&nbsp;&lt;delete dir="${temp.dir}" /&gt;<br>&nbsp;&lt;/target&gt;</p>
            <p>&lt;/project&gt;</p>
            <p>值得注意的是，在书写build.xml的时候一定要小心，别写错了，我就是因为粗心，在写下面代码的时候：<br><br>&nbsp;&nbsp;&nbsp;&lt;fileset dir="${生产.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#ff0033">.&lt;include name="jlo_logging.xml" /&gt;</font></strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="log4j.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvncore.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnForum_i18n_zh_CN.properties" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="mvnforum.xml" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="whirlycache.xml" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br><br>不小心在红色代码前加了一个&#8220;.&#8221;，结果报了一个<font color="#ff0033">type &nbsp; doesn't &nbsp; support &nbsp; nested &nbsp; text &nbsp; data.&nbsp;&nbsp; </font>的错，我找了半天没找出原因，到网上搜了一下竟然没有找到答案，后来才发现自己写错了，大汗，改正后，搞定，爽啊。是为记。</p>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/kuxiaoku/aggbug/123388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuxiaoku/" target="_blank">苦笑枯</a> 2007-06-11 14:49 <a href="http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ANT的安装/配置笔记</title><link>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123385.html</link><dc:creator>苦笑枯</dc:creator><author>苦笑枯</author><pubDate>Mon, 11 Jun 2007 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123385.html</guid><wfw:comment>http://www.blogjava.net/kuxiaoku/comments/123385.html</wfw:comment><comments>http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuxiaoku/comments/commentRss/123385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuxiaoku/services/trackbacks/123385.html</trackback:ping><description><![CDATA[<span class="post-footers">
作者：<a  href="http://www.chedong.com/">车东</a> 发表于：2003-03-06 17:03 最后更新于：2007-04-12 11:04<br>
<a  href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>：可以任意转载，转载时请务必以超链接形式标明文章<a  href="http://www.chedong.com/tech/ant.html" class="permalink">原始出处</a>和作者信息及<a  href="http://www.chedong.com/blog/archives/001249.html">本声明</a>。<br>
<a  href="http://www.chedong.com/tech/ant.html" class="permalink">http://www.chedong.com/tech/ant.html</a>
</span>
<hr>
<div class="entry-body">
<p>内容摘要：<br>
ant是一个基于JAVA的自动化脚本引擎，脚本格式为XML。除了做JAVA编译相关任务外，ANT还可以通过插件实现很多应用的调用。<br>
</p>
<ol>
    <li>ANT的基本概念：</li>
    <li>ANT的安装：解包，设置路径</li>
    <li>ANT的使用：最好的学习只不过是一个简单实用的例子起步&#8230;&#8230;</li>
</ol>
</div>
<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>
    <li> 任务2：clean &lt;-- init 清空初始化环境 </li>
    <li> 任务3：javadoc &lt;-- build &lt;-- init 生成JAVADOC </li>
    <li> 任务4：jar &lt;-- build &lt;-- init 生成JAR </li>
    <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/">WebLucene</a>应
用的例子：修改自<a  href="http://www.jdom.org/">JDOM</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>
    <li> 代码风格检查任务：CheckStyle，Jalopy等</li>
    <li> 邮件警报任务：可以把以上这些任务的输出警告发送到制定的用户列表中，这个任务可以设置每天自动运行。</li>
</ul>
<br>
参考资料：<br>
Jakarta ANT:<br>
<a  href="http://ant.apache.org/">http://ant.apache.org</a><img src ="http://www.blogjava.net/kuxiaoku/aggbug/123385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuxiaoku/" target="_blank">苦笑枯</a> 2007-06-11 14:44 <a href="http://www.blogjava.net/kuxiaoku/archive/2007/06/11/123385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>