随笔 - 100  文章 - 50  trackbacks - 0
<2014年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

我收藏的一些文章!

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

用Ant编译Java Web程序

分类: J2EE2009-03-27 15:14 1930人阅读 评论(0) 收藏 举报
antjavawebclassincludedelete

先看一下项目的目录结构:

source目录里放Java源程序,classes目录里放编译好的class文件。这两个目录里的文件都要按包结构组织好。当然,classes目录也可以不必事先建立,这可以交给Ant去做。以下是我写的build.xml,放在Hello目录下:

 

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <project name="hello" default="compile" basedir=".">  
  3.     <property name="tomcat.lib" value="/home/albert/Applications/apache-tomcat-5.5.26/common/lib" />  
  4.     <property name="dest.dir" value="WEB-INF/classes" />  
  5.     <property name="src.dir" value="source" />  
  6.     <target name="init">  
  7.         <mkdir dir="${dest.dir}" />  
  8.     </target>  
  9.     <target name="compile" depends="init">  
  10.         <javac srcdir="${src.dir}" destdir="${dest.dir}">  
  11.             <classpath>  
  12.                 <fileset dir="${tomcat.lib}">  
  13.                     <include name="*.jar" />  
  14.                 </fileset>  
  15.                 <fileset dir="WEB-INF/lib">  
  16.                     <include name="*.jar" />  
  17.                 </fileset>  
  18.             </classpath>  
  19.         </javac>  
  20.     </target>  
  21.     <target name="clean">  
  22.         <delete dir="${dest.dir}" />  
  23.     </target>  
  24. </project>  

 

在Ant的构建文件build.xml中,最重要的是target(目标)。一个build.xml往往包含了多个target,定义了一个软件项目的构建过程以及每步之间的依赖关系。例如对于这个项目来说,“编译”必须要在创建完classes目录后才能进行。此外,在进行编译时,ant还会比较源文件和对应的class文件的时间戳,以此来判断源文件在上次编译后是否被更新,是否需要重新编译。知道了这些,就可以大体说下各项的含义了。

最外层的project元素定义了项目的名称(name),默认构建目标(default)和构建的基本目录(basedir,当前目录 “.”)。basedir即设定文件中的相对路径是相对于谁而言的。接下来有一些property元素,你可以把它们当成一些变量的定义,这是为了接下来引用的方便。

然后定义了三个target元素。第一个target的名字是init。名字的作用是:如果你想执行某个target的任务,只需在命令行下执行 ant 即可。如果省略了,ant会执行在project元素中定义的默认目标。在里面用mkdir定义了一个任务,即创建classes目录。这里引用了刚才定义的property,注意引用property的写法:”${dest.dir}”。

第二个是compile目标。depends=”init”说明它依赖于init。即当Ant发现init目录没有完成时(classes目录还没有创建时),Ant会先执行init目标。compile目标里面用javac元素描述了编译任务。srcdir和destdir分别指定了源文件的目录和编译后class文件的目录。尽管因为包结构的原因,source目录下还有子目录,但Ant会把source目录下的所有Java源文件进行编译,并且在classes目录下建立相应的包结构目录,把所有的class文件放在正确的位置上。所有这一切都只是用这两个参数来描述的。再往里是 classpath元素,用来设定编译时的classpath,以便引用servlet-api.jar和struts库里的类。我偷了个懶,把所有的 jar文件都包含进来了。用的是fileset,指定好目录和要包含的文件名(可以有通配符)就行了。

最后一个target clean是清除编译生成的文件,用delete元素来完成。这样当在命令行下执行ant clean后,classes目录就被删除了。

把这个build.xml放在项目目录Hello中,以后只要在Hello目录下执行ant,就会自动把所有需要编译的文件编译好后放在classes目录里了,非常方便。
others
<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="compile" basedir=".">

    <property name="project.lib" value="WebRoot/WEB-INF/lib" />
    <property name="tomcat.lib" value="D:/apache-tomcat-6.0.35/lib" />
    <property name="dest.dir" value="WebRoot/WEB-INF/classes" />
    <property name="src.dir" value="src" />
    <target name="init">
        <mkdir dir="${dest.dir}" />
    </target>
    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${dest.dir}" includeAntRuntime="false"  encoding="UTF-8">
            <classpath>
                <fileset dir="${project.lib}">
                    <include name="*.jar" />
                </fileset>
                <fileset dir="${tomcat.lib}">
                    <include name="*.jar" />
                </fileset>                
            </classpath>
        </javac>
    </target>
    <target name="clean">
        <delete dir="${dest.dir}" />
    </target>
</project>
posted on 2014-08-27 22:34 fly 阅读(66) 评论(0)  编辑  收藏 所属分类: Ant学习

只有注册用户登录后才能发表评论。


网站导航: