论坛首页 Java企业应用论坛

Top 15 Ant Best Practices

浏览 2650 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-16  
转自http://starrynight.blogdriver.com/starrynight/634792.html
本文选自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,如:
xml 代码
  1. <target name="help" description="Display detailed usage information">  
  2.    <echo>Detailed help...</echo>  
  3. </target>  


5、提供一个Clean Target
每个Build脚本都应该包括一个Target,用来清除所有的生成文件和目录,运行Clean Target以后保留下来的目录应该都是在CVS上能找到的。如:
xml 代码
  1. <target name="clean" description="Destroys all generated files and dirs.">  
  2.   <delete dir="${dir.build}"/>  
  3.   <delete dir="${dir.dist}"/>  
  4. </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文件中。下面是一个例子:
xml 代码
  1. <ear earfile="${dir.dist.server}/payroll.ear" appxml="${dir.resources}/application.xml">  
  2.   <fileset dir="${dir.build}" includes="commonServer.jar"/>  
  3.   <fileset dir="${dir.build}">  
  4.     <include name="payroll-ejb.jar"/>  
  5.   </fileset>  
  6.   <zipfileset dir="${dir.build}" prefix="lib">  
  7.     <include name="hr.jar"/>  
  8.     <include name="billing.jar"/>  
  9.   </zipfileset>  
  10.   <fileset dir=".">  
  11.     <include name="lib/jdom.jar"/>  
  12.     <include name="lib/log4j.jar"/>  
  13.     <include name="lib/ojdbc14.jar"/>  
  14.   </fileset>  
  15.   <zipfileset dir="${dir.generated.src}" prefix="META-INF">  
  16.     <include name="jboss-app.xml"/>  
  17.   </zipfileset>  
  18. </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,因为它可以在不同的平台下工作。
<target name="clean"><delete dir="${dir.build}"><ear earfile="${dir.dist.server}/payroll.ear"><fileset includes="commonServer.jar" dir="${dir.build}"><fileset dir="${dir.build}"><zipfileset prefix="lib" dir="${dir.build}"><include name="hr.jar"><fileset dir="."><include name="lib/jdom.jar"><include name="lib/log4j.jar"></include></include></fileset></include></zipfileset></fileset></fileset></ear></delete></target>
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics