Ant实战

来源:互联网 发布:c 网络编程 多线程 编辑:程序博客网 时间:2024/05/17 07:40

利用Ant可以进行Java程序的自动化构建,只用配置好build.xml文件,其它的一切都交给Ant处理吧。

Ant可以实现的功能有:文件的处理,比如:创建、拷贝、修改、删除等,源文件的编译,自动生成Javadoc文档,自动生成Jar文件等。

Ant里面,是由一个或多个任务组成, 他们之间的依赖关系决定着该任务的执行次序,在Ant里面,任务的依赖关系是单向的,比如A依赖B的话,B就不能再依赖A,否则就相互调用成了死循环。Ant里面的任务有点象程序里面的方法一样,一个任务就是一个相对独立的、实现某一个功能的程序片段。

下面来看一实例:

<?xml version="1.0" encoding="gb2312"?>

//默认调用任务“all

<project default="all">

     //预定义,有程序里面的常量类似。默认路径为应用程序的当前路径。

       <property name="confDir" location="conf" />

       <property name="srcDir" location="src" />

       <property name="src_temp" location="src_temp" />

       <property name="buildDir" location="classes" />

       <property name="distDir" location="release" />

       <property name="libDir" location="E:/gftech/library" />

       <property name="docDir" location="doc/doc" />

       <property name="doc_temp" location="doc_temp"/>

       <property name="commonDir" location="E:/gftech/project/common" />

       <property name="smpDir" location="E:/gftech/project/smp" />

       <property name="project.name" location="数据处理系统" />

       <property name="project.version" location="1.0" />

       <property name="encoding" location="gb2312" />

 

    //定义Claspath,指定外部引用的类。其中fileset指定外部包所在的目录,include指定所要引用的外部包文件,这里指的是该目录下的所有Jar文件

       <path id="classpath">

              <fileset dir="${libDir}">

                     <include name="**/*.jar" />

              </fileset>

       </path>

 

    //初始化任务。通常会在这里创建目录、文件等准备工作,为编译或生成文档做准备

       <target name="init">

              <tstamp />//指定时间戳

              <mkdir dir="${src_temp}" />

              <mkdir dir="${buildDir}" />

              <mkdir dir="${distDir}" />

              <mkdir dir="${doc_temp}" />

              <delete>

                     <fileset dir="${distDir}">

                            <exclude name="**/cvs/*.*" />

                            <exclude name="**/*.bat"/>

                     </fileset>

                     <fileset dir="${docDir}">

                            <exclude name="**/cvs/*.*" />

                     </fileset>

              </delete>

              <copy todir="${src_temp}">

                     <fileset dir="${srcDir}">

                            <include name="**/*.java" />

                            <exclude name="**/test/*.java" />

                     </fileset>

                     <fileset dir="${commonDir}/src">

                            <include name="**/*.java" />

                            <exclude name="**/test/*.java" />

                     </fileset>

                     <fileset dir="${smpDir}/src">

                            <include name="**/*.java" />

                            <exclude name="**/test/*.java" />

                     </fileset>

              </copy>

       </target>

 

    //对源文件进行编译,在编译时指定Classpath,并指test目录下的所有java文件排除在外,不进行编译

       <target name="compile" depends="init">

              <javac srcdir="${src_temp}" destdir="${buildDir}" excludes="**/test/**/*.java">

                     <classpath refid="classpath" />

              </javac>

       </target>

 

  //生成Javadoc文档

       <target name="doc" depends="init" description="auto generate document">

              <javadoc packagenames="*" destdir="${doc_temp}" sourcepath="${src_temp}" author="true" version="true" use="true" splitindex="true" windowtitle="自然语言查询演示系统API文档">

                     <classpath refid="classpath" />

                     <doctitle>

                            <![CDATA[ <h1>自然语言查询演示系统(build${DSTAMP})</h1> ]]>

                     </doctitle>

                     <bottom>

                            <![CDATA[ <div algin="center">Copyright &#169; 2006 www.pushget.com, All Rights Reserved.</div>]]>

                     </bottom>

              </javadoc>

       </target>

 

//打包生成Jar文件

       <target name="jar" depends="compile">

              <jar destfile="${distDir}/dh.jar" basedir="${buildDir}">

                     //指定Manifest文件的创建者、公司和运行时的主类(这个最关键)

                     <manifest>

                            <attribute name="Built-By" value="sinboy" />

                            <attribute name="Company" value="PUSHGET.Inc" />

                            <attribute name="Main-Class" value="com.gftech.biz.dh.DHMain" />

                     </manifest>

//指定要和生成的Jar文件打包到一块的外部引用包。这样生成的Jar文件不但包括本身的类文件,也包括外部引用的类文件,它的一个最大好处就是,放到任何地方不需要再配置外部引用包,就可直接运行,使用起来比较方便,不用担心考来考去时丢文件

                     <zipfileset src="${libDir}/classes12.jar" />

                     <zipfileset src="${libDir}/commons-collections-3.1.jar" />

                     <zipfileset src="${libDir}/commons-lang-2.1.jar" />

                     <zipfileset src="${libDir}/log4j-1.2.12.jar" />

                     <zipfileset src="${libDir}/jdom.jar" />

                     <zipfileset src="${libDir}/comm.jar"/>

                     <zipfileset src="${libDir}/derby.jar"/>

                     <zipfileset src="${libDir}/derbytools.jar"/>

                     <zipfileset src="${libDir}/jamon.jar"/>

              </jar>

//把源文件进行打包

              <jar destfile="${distDir}/dh-src-${DSTAMP}.jar" basedir="${src_temp}" />

       </target>

 

    //布署。在这里是生成一个完全可以独立运行的文件包

       <target name="deploy">

              <copy todir="${docDir}">

                     <fileset dir="${doc_temp}">

                            <include name="**/*" />

                     </fileset>

              </copy>

 

              <mkdir dir="${distDir}/dh" />

              <mkdir dir="${distDir}/dh/conf"/>

              <mkdir dir="${distDir}/dh/database"/>

              <mkdir dir="${distDir}/dh/test"/>

              <copy  file="${distDir}/dh.jar" todir="${distDir}/dh" />

           <copy todir="${distDir}/dh/conf">

                  <fileset dir="${confDir}">

                     <exclude name="**/*"/>

                  </fileset>

           </copy>

              <copy todir="${distDir}/dh/database">

                     <fileset dir="database">

                            <exclude name="**/cvs/*"/>

                     </fileset>

              </copy>

              <copy todir="${distDir}/dh/test">

                     <fileset dir="test">

                            <exclude name="**/cvs/*"/>  

                     </fileset>

              </copy>

              <copy file="win32com.dll" todir="${distDir}/dh"/>

              <copy file="javax.comm.properties" todir="${distDir}/dh"/>

              <zip destfile="${distDir}/dhDemo.rar">

               <fileset dir="${distDir}/dh">

                      <exclude name="**/cvs/*"/>  

              </fileset>

              </zip>

       </target>

 

//把临时文件清除掉

       <target name="clean" description="clean classes dir">

              <delete dir="${src_temp}" />

              <delete dir="${buildDir}" />

              <delete dir="${doc_temp}" />

       </target>

//指定任务all依赖的其他任务。Ant会自动根据依赖关系,从最先被依赖的任务开始起执行

       <target name="all" depends="jar,deploy,clean " description="complete all target" />

 

</project>

 

原创粉丝点击