2  通用配置

摘要: 介绍 build_common.xml, common.xml 及 usage.txt

  1. build_common.xml

      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!-
          Copyright 2004 camry.wu@gmail.com
      
          This program is free software; you can redistribute it and/or modify
          it under the terms of the GNU General Public License as published by
          the Free Software Foundation; either version 2 of the License, or
          (at your option) any later version.
      
          This program is distributed in the hope that it will be useful,
          but WITHOUT ANY WARRANTY; without even the implied warranty of
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
          GNU General Public License for more details.
      
          You should have received a copy of the GNU General Public License
          along with this program; if not, write to the Free Software
          Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      ->
      <project name="Common build file" default="all" basedir="">
      
        <description>
          这是一个通用的 ant build 文件. Version 1.0.
          感谢: 这篇文档借用了很多 Johan 的想法, 他的主页在 http://dev.kanngard.net
          Copyright 2004 camry.wu@gmail.com
        </description>
      
        <!- 读入 common.xml 配置 ->
        <xmlproperty  file="${path.common}/common.xml"
                      semanticAttributes="true"
                      keepRoot="false"/>
      
        <!- 设置编译时的 classpath ->
        <path id="compile.classpath">
          <fileset dir="${path.common}/lib">
            <include name="*.jar"/>
          </fileset>
          <fileset dir="${lib}">
            <include name="*.jar"/>
          </fileset>
          <pathelement location="${dist.classes}"/>
        </path>
      
        <!- 设置运行时的 classpath ->
        <path id="run-time.classpath">
          <path refid="compile.classpath"/>
        </path>
      
        <!- 初始化过程, 会调用具体项目的初始化过程先 ->
        <target name="init"
                depends="project_init"
                description="Initialize environment">
        </target>
      
        <!- 显示使用说明 ->
        <target name="usage">
          <loadfile property="usage.message"
                    srcFile="${path.common}/usage.txt"/>
          <echo message="${usage.message}"/>
        </target>
      
        <!- 预备, 通常在项目刚建立的时候运行此任务 ->
        <target name="common_prepare"
                depends="init" description="Prepare build directory">
          <copy todir="." preservelastmodified="true">
            <fileset dir="${path.common}/template/">
              <include name="**/*"/>
            </fileset>
          </copy>
        </target>
      
        <!- 配置 checkstyle , 只检查 src/main 目录下的源代码 ->
        <target name="checkstyle" depends="init">
          <taskdef  resource="checkstyletask.properties"
                    classpath="${path.common}/lib/checkstyle-all-3.4.jar"/>
          <checkstyle config="${build}/checkstyle_checks.xml">
            <fileset dir="${src.main}" includes="**/*.java"/>
            <property key="checkstyle.cache.file"
                      file="${path.common}/lib/checkstyle.cache"/>
            <classpath refid="compile.classpath"/>
          </checkstyle>
        </target>
      
        <!- 编译 src 下源文件, class 文件放到 dist/classes 下 ->
        <target name="compile" depends="init" description="Compile source">
          <mkdir dir="${dist}/classes"/>
          <javac  debug="${compile.debug}"
                  deprecation="${compile.deprecation}"
                  destdir="${dist}/classes"
                  target="${compile.jdk-version.target}"
                  source="${compile.jdk-version.source}"
                  optimize="${compile.optimize}"
                  srcdir="${src}">
            <classpath refid="compile.classpath"/>
          </javac>
        </target>
      
        <!- 清除 dist 目录 ->
        <target name="clean"
                depends="project_clean"
                description="Wipeout all generated files">
          <delete dir="${dist}/classes"/>
          <delete dir="${dist.lib}"/>
          <mkdir dir="${dist}/classes"/>
          <mkdir dir="${dist.lib}"/>
        </target>
      
        <!- 打包 ->
        <target name="jar"
                depends="checkstyle, compile"
                description="Create binary distribution">
          <mkdir dir="${dist}/classes"/>
          <mkdir dir="${dist.lib}"/>
          <copy file="LICENSE" todir="${dist}/classes"/>
          <delete>
            <fileset dir="${dist.lib}" includes="*.jar"/>
          </delete>
          <jar  basedir="${dist}/classes"
                jarfile="${dist.lib}/${component.name}-${component.version}.jar">
            <include name="**/*.class"/>
            <exclude name="**/Test*.class"/>
          </jar>
      
          <delete>
            <fileset dir="${dist}/classes">
              <include name="LICENSE"/>
            </fileset>
          </delete>
        </target>
      
        <!-
          运行 dist/classes 目录下的所有以 Test 开头的测试类
          注意, 在 ant 的 lib 目录下要包含 junit.jar.
        ->
        <target name="test" depends="compile" description="run junit tests">
          <junit printsummary="on"
                 fork="false"
                 haltonfailure="false"
                 failureproperty="tests.failed"
                 showoutput="true">
            <classpath refid="run-time.classpath"/>
            <formatter type="brief" usefile="false"/>
            <batchtest>
              <fileset dir="${dist}/classes">
                <include name="**/Test*.*"/>
              </fileset>
            </batchtest>
          </junit>
      
          <fail if="tests.failed">
          *********************************************************
          *********************************************************
          ****  One or more tests failed! Check the output...  ****
          *********************************************************
          *********************************************************
          </fail>
        </target>
      
        <!- 发布, 会调用具体项目的发布任务 ->
        <target name="deploy"
                depends="project_deploy" description="Deploy application"/>
      
        <!- 创建文档 ->
        <target name="javadoc"
                depends="compile"
                description="Create component Javadoc documentation">
          <delete dir="${docs.api}"/>
          <mkdir dir="${docs.api}"/>
          <javadoc  author="true"
                    bottom="${component.title}"
                    destdir="${docs.api}"
                    source="${compile.jdk-version.source}"
                    doctitle="${component.title}"
                    packagenames="*"
                    access="protected"
                    sourcepath="${src.main}"
                    version="true"
                    windowtitle="${component.title} (Version ${component.version})">
            <classpath refid="compile.classpath"/>
          </javadoc>
        </target>
      
        <!-  根据 cvs 配置, 从 cvs 服务器上下载源代码 ->
        <target name="fetch"
                depends="project_fetch" description="fetch current source from cvs">
        </target>
      
        <!- 将源代码文件打包, 备份 ->
        <target name="src-zip"
                depends="checkstyle,compile"
                description="Creates source distribution">
          <copy file="LICENSE" todir="${src.main}"/>
          <delete>
            <fileset dir="${dist.lib}" includes="*-src.zip"/>
          </delete>
          <zip  basedir="."
                destfile="${dist.lib}/${component.name}-${component.version}-src.zip"
                whenempty="fail">
            <include name="**/*.*"/>
            <include name="*"/>
            <include name="**/*"/>
            <exclude name="${dist}/**/*.*"/>
            <exclude name="*.* "/>      <!- vi(JEdit) backups ->
            <exclude name=".nbattrs"/>  <!- Netbeans filesystem attributes ->
            <exclude name="*.old"/>
          </zip>
        </target>
      
        <!-
          将源文件上传到服务器备份, 将目标文件上传到服务器发布.
          此任务中内容由各位自行设定, 一般是运行 ftp 任务.
        ->
        <target name="publish"
                depends="clean,jar,javadoc,src-zip" description="publish project">
        </target>
      
        <!- 构建 ->
        <target name="all"
                depends="clean,fetch,test,jar,javadoc,deploy"
                description="build project"/>
      </project>
    

  2. common.xml

      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!-
          Copyright 2004 camry.wu@gmail.com
          Common Ant build environment
      ->
      
      <root>
        <!-
          路径配置, 基本不用改动.
          但是假如你在一个陌生的环境中使用这套 build 工具,
          也许需要稍为修改一下这些路径的配置.
        ->
        <bin value="bin"/>
        <build value="build">
          <lib value="${build}/lib"/>
        </build>
        <dist value="dist">
          <lib value="${dist}/lib"/>
          <classes id="dist.classes" location="${dist}/classes"/>
        </dist>
        <docs value="docs">
          <api value="${docs}/api"/>
        </docs>
        <lib value="lib"/>
        <src value="src">
          <main value="${src}/main"/>
          <test value="${src}/test"/>
        </src>
      
        <!- 编译选项 ->
        <compile>
          <debug value="true"/>
          <deprecation value="true"/>
          <jdk-version>
            <source value="1.4"/>
            <target value="1.4"/>
          </jdk-version>
          <optimize value="true"/>
        </compile>
      
      </root>
    

  3. usage.txt

      ${component.name} build file
       --  --  --  --  --  --  --  --  --  --  --  --  --  --  -- 
      
      Available targets are:
      
      prepare             -> 初始化项目环境
      checkstyle          -> 检查源文件编码规范
      compile             -> 编译
      jar                 -> 打包
      build               -> 构建
      test                -> 测试
      clean               -> 清除
      deploy              -> 发布到 web 服务器运行
      publish             -> 发布产品(源码及目标文件)
      fetch               -> 从 cvs 上获取最新资源
      docs                -> 创建 api 文档
      all                 -> 执行 clean, fetch, build, test, doc, deploy
      main                -> 默认的构建过程(自行修改)
    

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐