::Z::Thinking::

::Simple::
文章 - 124,收藏 - , 评论 - 49, trackbacks - 0
 

java opensource Ant模板


 

  现在项目使用ant来管理,整理了一个常用的Ant模板文件,包括:编译、运行Junit测试用例、CheckStlye、从Vss取版本、javadoc等。希望有用。

<?xml version="1.0" encoding="gb2312"?>
<!--
  本模板文件提供了以下功能:
  1.编译java代码;
  2.产生java代码对应的javaDoc;
  3.检查java代码的编码规范;
  4.编译并运行java代码对应的junit测试代码
  5.从Vss中获取程序
 -->
<project name="Fog Project" default="all" basedir=".">

    <!-- 环境变量 -->
    <property environment="env"/>
    <!-- 设置junit报告的xsl文件目录 -->
    <property name="junit.styleDir" value="${env.ANT_HOME}/etc"/>
   
    <!-- 源代码目录 -->
    <property name="src.code" value="src"/>
    <!-- 源代码对应的junit目录 -->
    <property name="src.junit" value="junit"/>
    <!-- 引用包所在目录 -->
    <property name="lib.dir" value="lib"/>
    <!-- 目标jar名称 -->
    <property name="lib.jar" value="fog.jar"/>
   
    <!-- checkstyle configuration -->
    <property name="checkstyle.config" value="${lib.dir}/checkstyle33.xml"/>
    <!-- 设置checkstyle的xsl文件 -->
    <property name="checkstyle.xsl" value="${lib.dir}/checkstyle-frames.xsl"/>
    <taskdef resource="checkstyletask.properties"
             classpath="${lib.dir}/checkstyle-all-3.3.jar"/>
   
    <!-- VSS配置 -->
    <property name="vss.ssdir" value="D:\Program Files\vss\win32\"/>
    <property name="vss.svrdir" value="Z:"/>
    <property name="vss.path" value="/fog/implement"/>
   
    <!-- 输出文档 -->
    <property name="doc.dir" value="doc"/>
    <property name="doc.api" value="${doc.dir}/api"/>
    <!-- junit report -->
    <property name="doc.junitReport" value="${doc.dir}/junitReport"/>
    <!-- checkstyle report -->
    <property name="doc.checkstyleReport" value="${doc.dir}/checkstyleReport"/>
   
    <!-- 与开发包结构相同 -->
    <property name="javadoc.package" value="fog.*"/>
   
    <!-- 输出二进制文件 -->
    <property name="dist.root" value="projDist"/>
    <property name="dist.proj" value="${dist.root}/proj"/>
    <property name="dist.classes" value="${dist.proj}/classes"/>
    <property name="dist.lib" value="${dist.proj}/lib"/>
    <property name="dist.junit" value="${dist.root}/junit"/>
   
    <!-- classpath -->
    <path id="classpath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
       
        <fileset dir="web/WEB-INF/lib">
            <include name="**/*.jar"/>
        </fileset>

        <fileset dir="${dist.lib}">
            <include name="**/*.jar"/>
        </fileset>

        <fileset dir="junit_lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>
   
    <target name="init">
        <mkdir dir="${doc.dir}"/>
        <mkdir dir="${dist.root}"/>
        <mkdir dir="${dist.proj}"/>
        <mkdir dir="${dist.lib}"/>
        <tstamp/>
        <echo message="${TSTAMP}"></echo>
    </target>
   
    <target name="all" depends="compilesrc, javadoc, checkstyle"/>
   
    <!-- 编译源文件 -->
    <target name="compilesrc" depends="init">
        <mkdir dir="${dist.classes}"/>
       
        <javac destdir="${dist.classes}" deprecation="on">
            <src path="${src.code}"/>
            <classpath refid="classpath"/>
        </javac>

        <jar jarfile="${dist.lib}/${lib.jar}" basedir="${dist.classes}">
            <include name="**/*.class"/>
        </jar>     
    </target>
   
    <!--  产生javadoc -->
    <target name="javadoc" depends="init">
        <mkdir dir="${doc.api}"/>
       
        <javadoc packagenames="${javadoc.package}" sourcepath="${src.code}"
             private="yes" defaultexcludes="yes" destdir="${doc.dir}/api">
            <classpath refid="classpath"/>
        </javadoc>
    </target>
   
    <!--  编译Junit文件 -->
    <target name="compilejunit" depends="compilesrc">
        <mkdir dir="${dist.junit}"/>
       
        <javac destdir="${dist.junit}" deprecation="on">
            <src path="${src.junit}"/>
            <classpath refid="classpath"/>
        </javac>       
    </target>
   
    <!-- 运行checkstyle检查代码规范 -->
    <target name="checkstyle" depends="init">
        <mkdir dir="${doc.checkstyleReport}"/>
       
        <checkstyle config="${checkstyle.config}">
            <fileset dir="${src.code}" includes="**/*.java"/>
            <formatter type="plain"/>
            <formatter type="xml" toFile="${doc.checkstyleReport}/checkstyle_report.xml"/>
        </checkstyle>
       
        <style in="${doc.checkstyleReport}/checkstyle_report.xml" out="${doc.checkstyleReport}/checkstyle_report.html" style="${checkstyle.xsl}"/>
    </target>
   
    <!--  运行junit  -->
    <target name="junit" depends="compilejunit">
        <mkdir dir="${doc.junitReport}"/>
        <copy todir="${dist.junit}">
            <fileset dir="junit_lib">
                <exclude name="**/*.jar"/>
            </fileset>

            <fileset dir="${src.code}">
                <include name="fog.hbm.xml"/>
            </fileset>
        </copy>
       
        <junit printsummary="yes" haltonfailure="no">
            <classpath>
                <path refid="classpath"/>
                <pathelement location="${dist.junit}"/>
            </classpath>
           
            <formatter type="brief" usefile="false"/>
            <formatter type="xml"/>
       
            <batchtest todir="${doc.junitReport}">
                <fileset dir="${dist.junit}" includes="**/*Test.class" />
            </batchtest>
        </junit>

        <junitreport todir="${doc.junitReport}">
            <fileset dir="${doc.junitReport}">
                <include name="TEST*-*.xml"/>
            </fileset>
            <report format="frames" styledir="${junit.styleDir}" todir="${doc.junitReport}"/>
        </junitreport>
    </target>

    <!-- 从Vss中获取最新版本 -->
    <target name="getVersion" depends="">
        <vssget
                vsspath="${vss.path}" localpath="." login="codeline,codeline"
                ssdir="${vss.ssdir}" serverPath="${vss.svrdir}" autoresponse="N" recursive="true"
                quiet="true" />
    </target>
   
    <!-- 清除产生的类、junit相关类、文档 -->
    <target name="clean">
        <delete dir="${dist.classes}"/>
        <delete dir="${dist.junit}"/>
        <delete dir="${doc.api}"/>
        <delete dir="${doc.junitReport}"/>
        <delete dir="${doc.checkstyleReport}"/>
    </target>
   
    <!-- 清除所有输出结果 -->
    <target name="cleanall" depends="clean">
        <delete dir="${doc.dir}"/>
        <delete dir="${dist.root}"/>
    </target>
</project>

--------------------------------------------------------------------------------------------------------------------------------

我常用的ant的操作,方便自己查询,所以传到网上,如果有朋友觉得不够,请补充:
主要的内容有

  (1)建立一个项目
  (2)建立属性
  (3)对数据库的操作
  (4)javac编译
  (5)删除目录
  (6)建立目录
  (7)拷贝文件群
  (8)jar为一个包
  (9)拷贝单个文件
  (10)运行
有更多更好的常用的,我没想到的,希望大家补充。  
  

 
 
 
   
 
 
 
   
 
 
   
           url="jdbc:oracle:thin:@192.168.0.1:1521:oa"
       userid="oa" password="oa"
       onerror="continue"
       print="yes"
       src="./demo.ddl"/>
 

   
    
          destdir="${root}/oa/"
      includes="*.java"
      classpath="${CLASSPATH};${CLIENT_CLASSES}/utils_common.jar"  
    />
 

 
 
   
   
   
       
   

       
          

       
        
 
   
        
           
               
           

   

   
       
     
 
   
   

 
 
  

 
 
 

 

 

 

 
  
  
   
  

  
  
 

  
 
       
       
   

   
       
       
  
           
       

   

   
  
    
  

   

   
  
  
  
   
  

  
  
   

  
  
   
  

  
        

   

   

----------------------------------------------------------------------------------------------------------------



 
 
 
 
   
   
   
   
   
   

   

   
   
   

   
   
   

   
   
   
   
   
       
       
          
       

   

   
   
   
   
   
   
 


 
 
 
 
   
   
   
   
   
    generates the ${name}.jar file" />
    compiles the source code" />
    generates the API documentation" />
    cleans up the directory" />
   
   
   
   
   
   
   
   
 


 
 
 
 
   
   
   
   
   
   
     
   

 


 
 
 
 
               destdir="${build.dest}"
           debug="${debug}"
           optimize="${optimize}">
     
   

 


 
 
 
 
             basedir="${build.dest}"
         includes="**"/>
 


 
 
 
 
   
                 sourcepath="${build.src}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             windowtitle="${Name} API"
             doctitle="${Name}">
     
   

 


 
 
 
 
   
   
   
   
     
   

 




缺省任务:usage 打印帮助文档,告诉有那些任务选项:可用的有build, jar, javadoc和clean.

初始化环境变量:init
所有任务都基于一些基本环境变量的设置初始化完成,是后续其他任务的基础,在环境初始化过程中,有2点比较可以方便设置:

1 除了使用却缺省的property设置了JAVA源路径和输出路径外,引用了一个外部的build.properties文件中的设置,

这样大部分简单配置用户只要会看懂build.properties就可以了,毕竟XML比起key value的属性文件还是要可读性差一些。用build.properties也可以方便其他用户从编译的细节中解放出来。

2 CLASSPATH设置:使用了其中的:
   
       
       
          
       

   

则相当于设置了:CLASSPATH=/path/to/resin/lib/jsdk23.jar; /path/to/project/lib/*.jar;

文件复制:prepare-src
创建临时SRC存放目录和输出目录。
 
 
 
 
   
   
   
   
   
   
     
   

 


编译任务:build
编译时的CLASSPATH环境通过一下方式找到引用一个path对象


打包任务:jar
对应用打包生成项目所写名的.jar文件
 
 
 
 
             basedir="${build.dest}"
         includes="**"/>
 


生成JAVADOC文档任务: javadoc
 
 
 
 
   
                 sourcepath="${build.src}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             windowtitle="${Name} API"
             doctitle="${Name}">
     
   

 


清空临时编译文件:clean
 
 
 
 
   
   
   
   
     
   

 


TODO:
更多任务/扩展:(样例)

  • 测试任务:JUnit测试
  • 代码风格检查任务:CheckStyle,Jalopy等
  • 邮件警报任务:可以把以上这些任务的输出警告发送到制定的用户列表中,这个任务可以设置每天自动运行。


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=32211


[点击此处收藏本文]  发表于2004年06月22日 2:39 PM




正在读取评论……