编程语言

img dengyunze

初学Ant.

发表于2004/10/28 18:01:00  1192人阅读

分类: java

         工作需要,开始接触java,根据N年的C++经验,学习一门语言不外乎3件事:语法,编译部署工具,以及公用库。 java语法与C++和.Net差异不大,OO的概念也没有太大的不同;一些特殊的语法点,比如final,GC,reflect到处都是相关讨论。鉴于此,我将学习的重点放在公用库的使用和编译部署工具的学习上。
         这是一个系列blog,先是一些java相关的编译,配置工具,然后是一些常用的java开源库,最后是eclipse。eclipse会是最终的落脚点,再次之前,本人需要一些java基础,现在,就从ant开始。

1.     下载,环境配置:

         应该说,ant的文档对比大部分C++工具和库来说,是非常优秀的。从Apache上下载Ant到编译,到跑起来,不过花费了20分钟。当然,我知道一般使用binary就行了,但是既然Ant是一个build工具,观察一下它自己的编译过程总是有点意思的。 下载Ant,位置是http://ant.apache.org/,解压缩到d盘,目录结构如下:
         d:/apache-ant-1.6.2/
               bin/
               docs/
               etc/
               lib
               src/
         一般关注bin/ant.bat就行了(windows平台),有兴趣的话可以分析一下ant.bat文件。我注意到其中的几行脚本:
 :runAnt
 if not "%CLASSPATH%"=="" goto runAntWithClasspath
 "%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%/lib/ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
 goto end
        显然,org.apache.tools.ant.launch.Launcher就是Ant的main函数文件,搜索一下src目录,果然在文件Launcher.java中找到了main函数。
 
2.      查看文档,制作配置文件:

         Ant的编译过程的核心是编写一个build.xml文件,也就是C++中的Makefile文件。只不过,个人感觉build.xml文件的编写比Makefile要简单不少,因为绝大部分工作Ant都已经做好了。废话少说,以下是我测试用的一个build.xml文件。我的测试工程目录结果如下:
            d:/test/
                    src/
                    doc/
                    lib/

         源代码都放在src目录下,改目录又有几个子目录,Cmd,Msg,Plugin。Ant本身内置目录的递归搜索能力,所以可以完全不考虑子目录的存在,当然,如果需要精细控制编译过程,如使用了Lex之类的工具自动生成代码等,另当别论,这里只考虑最简单的情况。我手动书写的build.xml如下:
   <project name="testAnt" basedir="." default="run">
    <target name="init">
     <mkdir dir="build">
    </target>

    <target name="compile" depend="init">
     <javac srcdir="src" destdir="build">
     <jar jarfile="test.jar" basedir="build"/>
    </target>

    <target name="run" depend="compile">
     <java classname="test.ClassMain" jar="test.jar"/>
    </target>

    <target name="clear">
     <delete dir="build"/>
     <delete file="test.jar"/>
    </target>
   </project>

3.     分析这个简单的build.xml文件:

         这个配置文件首先是一个project节点,拥有3个属性:name表示porject的名字,basedir表示内部相对路径的起点,default表示Ant默认的开始执行的target(对于一个build.xml,如果用户在当前目录敲入Ant,那么Ant首先执行默认的target,对于上面的build.xml,也就是第三个target----“run“)。下面分析一下Ant执行这个build.xml的真个流程。

         首先,Ant会找到默认的target---“Run“。
        
         然后Ant发现这个target依赖(depend)于"compile"所对应的target,那么把"run"入栈,先执行""compile"任务。 

          随后Ant发现"compile"又依赖于"init"任务,所以再将"compile"入栈,执行"init"。

         "init"只是在项目根目录下建议一个目录。执行完"init"后,"compile"出栈,被执行。

         "compile"分两步执行,首先,编译"src"目录下的所有.java文件(递给搜索),将生成的.class文件放入"build"目录(如果有递归子目录,会自动生成与原目录相同的目录层次)。编译完成后,把build目录打包成一个jar文件。
         "cimpile"执行完成,开始执行"run",实际上就是运行刚编译出来的项目。

         当然,如果您需要清除以前的编译结果,可以简单输入ant clear。实际执行过程是"clear"对应的 target被执行,删除"build"目录和test.jar文件。

---------------------------------------------------------------------------------------------------------------------------
         以上是本人开始学习ant的一个过程,总体感觉Ant确实非常好使。当然,对于复杂的工程来说,配置文件的书写可能也会相对复杂,但是毕竟比手工维护Makefile或者使用Automake管理Makefile来说,要轻松的太多了。

         本人是java新手,如有错误,欢迎指正,欢迎B4。

阅读全文
0 0

相关文章推荐

img
取 消
img