Top 15 Ant Best Practices

原创 2005年05月28日 16:17:00
本文选自ONJava的“Top 15 Ant Best Practices”,作为备忘的笔记。

1、使用良好的规范编写Ant脚本
使用易于阅读的格式编写Build脚本-在每个Target之间插入空行;使用美观易于阅读的缩进;没行不要超过90个字符;为每个Target和属性挑选有意思的,易于理解的名字等等。

2、把build.xml放在项目的根目录下
把build.xml放在项目根目录下是个好习惯,这样做的好处是,你可以项目工作目录的任何子目录下编译代码,只需使用命令:
ant -find compile。选项-find使Ant在当前目录的所有上级目录中查找Build脚本。

3、尽量只使用一个的Build File

4、提供友好的Build脚本使用帮助
为每个Target加入description属性,这样,可以使用命令:
ant -projecthelp 列出所有Target的描述信息。
或者,也可以为Build脚本编写一个help target,如:
<target name="help"
        description="Display detailed usage information">
   <echo>Detailed help...</echo>
</target>



5、提供一个Clean Target
每个Build脚本都应该包括一个Target,用来清除所有的生成文件和目录,运行Clean Target以后保留下来的目录应该都是在CVS上能找到的。如:
<target name="clean"
        description="Destroys all generated files and dirs.">
  <delete dir="${dir.build}"/>
  <delete dir="${dir.dist}"/>
</target>


不要自动执行clean,除非你有一个创建所有东西的Target。

6、使用Ant管理依赖
小心设计你的Build脚本,使一个大项目的构建可以按步骤进行。首先,应该编译代码的公共部分,把它们打包成jar文件。然后,编译项目更高层次的其他代码。
这样,如果只需要低层次的公共代码,你不必花时间编译其他高层次的代码。

7、定义和重用文件路径
把路径定义集中在同一个地方能使Build脚本更易于管理和理解。

8、正确定义Target的相互依赖关系
经常检查并重构你的Build脚本,清除Target之间不不必要的依赖关系。

9、使用属性来配置Ant
任何可能需要修改的属性,或是不只使用一次的属性都要在Build脚本开始的地方定义,或在一个单独的Properties文件定义。

10、保持Build过程的独立性
为了获得最大程度的独立性,不要在Build脚本中包含任何位于Build目录下的目录或文件;不要依赖于开发人员的CLASSPATH环境变量。相反,要在Build脚本中使用相对路径。
如果你需要使用使用外部的目录(如tomcat的安装目录等),可以把它定义成一个属性变量。

11、使用版本控制管理
Build脚本是非常重要的配置管理项,应该和代码一样,放在版本控制工具里管理。当你为代码贴标签和版本时,也应该为Build脚本贴标签和版本。
通常情况下,不要把构建的生成物放入版本控制工具。

12、使用Ant作为构建任务的最小公约数
团队内部的开发人员可以自由选择开发工具。因此使用Ant作为构建任务的基线,使代码可以随时构建。

13、使用zipfileset
Ant脚本通常用于创建WAR,JAR,ZIP和EAR文件。这些文件通常需要一个特定的内部文件结构。
一般的办法是把所需的目录和文件复制到一个临时目录,创建出所需的文件结构,然后在临时目录下创建,这是一个笨办法。
更有效的办法是使用zipfileset,它让你可以从任何位置选择文件,按所需的目录结构放入archived文件中。下面是一个例子:
<ear earfile="${dir.dist.server}/payroll.ear"
    appxml="${dir.resources}/application.xml">
  <fileset dir="${dir.build}" includes="commonServer.jar"/>
  <fileset dir="${dir.build}">
    <include name="payroll-ejb.jar"/>
  </fileset>
  <zipfileset dir="${dir.build}" prefix="lib">
    <include name="hr.jar"/>
    <include name="billing.jar"/>
  </zipfileset>
  <fileset dir=".">
    <include name="lib/jdom.jar"/>
    <include name="lib/log4j.jar"/>
    <include name="lib/ojdbc14.jar"/>
  </fileset>
  <zipfileset dir="${dir.generated.src}" prefix="META-INF">
    <include name="jboss-app.xml"/>
  </zipfileset>
</ear>


在上面的例子中,所有的jar文件都放入EAR文件的lib目录下。先前创建的hr.jar和billing.jar从${dir.build}目录中复制到EAR文件的lib目录下。

14、执行Build脚本的Clean测试
假设Build脚本有clean和compile两个Target,执行以下的测试:
第一步,运行ant clean
第二步,运行ant compile
第三步,再运行ant compile
第三步应该什么都不做,如果代码被重新编译,说明Build脚本有些问题。只有当输入文件发生变化时,Build脚本的Target才应该工作。

15、避免平台相关的Ant包装脚本
有些人喜欢使用批处理命令包装Ant脚本,如编写一个build.bat文件,其中包含命令:ant compile。其实这样做并没有必要。开发人员更喜欢直接使用ant compile,因为它可以在不同的平台下工作。

Top 15 Ant Best Practices

文章讲的是如何编写好的ANT,这是英文的,现在虽然没有有,不过个个感觉比觉好,先放在这里,以后也许有需要。下面还有一篇iBATIS翻译作者刘涛的读书读记。英文:http://www.onjava.co...
  • fenglibing
  • fenglibing
  • 2007年08月03日 08:59
  • 6433

JUnit best practices

Techniques for building resilient, relocatable, multithreaded JUnit tests    一项灵活的、可重定位的多线程JUnit测试技术...
  • haydenwang8287
  • haydenwang8287
  • 2007年10月08日 13:05
  • 854

<<Big Data: Principles and Best Practices of Scalable Realtime Data Systems>>读书笔记

Chapter 1 A New Paradigm for Big Data 1.1 How this Book is structured focus on principles of big dat...
  • kiwi_coder
  • kiwi_coder
  • 2015年10月22日 20:23
  • 2076

最佳实践(Best Practices)

设计细颗粒度的持久类并且使用来实现映射。 使用一个Address持久类来封装 street, suburb, state, postcode. 这将有利于代码重用和简化代码重构(refactoring...
  • liyong1115
  • liyong1115
  • 2008年02月01日 12:37
  • 293

C++ Best Practice

C++把很多细节都仍给了程序员来处理,因此,C++有更多的注意事项,和一条条的决窍、技巧。 * 每个头文件都得解决anti-reinclude的问题 * 一般来说,library的header要inc...
  • kzjay
  • kzjay
  • 2010年01月25日 00:18
  • 450

svn分支合并

工具: site-1.10.5 beyond compare_xpgod 目录: trunk:主干,是日常开发进行的地方。 branches:分支。一些阶段性的release版本,这些版本是...
  • u010244958
  • u010244958
  • 2015年06月29日 15:31
  • 459

Oracle PL/SQL Best Practices, Second Edition [ILLUSTRATED] (Paperback), Oct.2007.eBook-BBL

TITLE : Oracle PL/SQL Best Practices, Second Edition [ILLUSTRATED] (Paperback)AUTHOR : by Steven Feu...
  • linhanshi
  • linhanshi
  • 2008年03月05日 12:47
  • 1003

The Six Best Practices(1~3)

前几期的图文我们介绍了软件工程中常见的问题,分析了产生这些问题的根本原因,引出了软件工程中的六个最佳经验。今天我们具体介绍这些最佳经验的内容。...
  • LSGO_MYP
  • LSGO_MYP
  • 2016年08月29日 11:36
  • 546

[Django1.5] two-scoops-django-best-practices 读书笔记

[Django1.5] two-scoops-django-best-practices 读书笔记 说明:本文由@易枭寒(Email:yixiaohan121318@gmail.com   ...
  • xiaowanggedege
  • xiaowanggedege
  • 2013年05月26日 21:58
  • 1296

Super Pow--C++ Clean and Short Solution

关于Leetcode中的Super Pow 一题有几种不同的解法,在Leetcode的discuss板块中,我发现了一种很棒的解题思路,顺便翻译一下(加深记忆)。作者:fentoyal 地址:C++...
  • rqy1994
  • rqy1994
  • 2016年08月29日 22:19
  • 313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Top 15 Ant Best Practices
举报原因:
原因补充:

(最多只允许输入30个字)