对于开发人员,除了不兼容性经常发生之外,Ant版本1.2遵循版本1.1的所有规则,而版本2.0能够完全与版本1.2匹配。由于开发版本的不断改变而导致的项目进度混乱,系统bug蚕生,以及源码知识库破坏,开发队伍很长一段时间以来都争议着版本号与内部识别系统的关系,比如发布、修正、转折点、建立号。这些只限于办公室的讨论很少见于数据表格,网站,以及CDs中。然而,相比于办公室的版本号,他们的争议往往显得更加有用,尤其是当回答一个新的bug出现时提出的“这在这一版本号中有什么区别?”的问题的时候。
不同版本系统的存在是因为其能够指定Build工具中的发布标示。有些制作商对开发代码做出严格的保密,开发人员必须记住每一种版本改变所需要更改的信息。其他工程依赖于一些由许多源码管理系统支持的符号替换系统。另外,很多其他工程仍然需要手工地建立存档文件内部的一些小的文本文件。
然而,每一个版本都有自己的问题。开发人员通常会忘记增加Build数目──尤其是对“quick, little fixes”的分类,这样会很有可能导致出现bug。源码管理系统是基于文件,而且反映的只是简单文件的版本信息。当JARs打包,优化,融合的时候可以去掉文本文件。
使用发布标识符来打包的更好方法是依赖于使用Ant build系统提供的符号过滤器。当从一个地方复制文件到另一个地方时,Ant复制任务可以使用任意字符串替代形成@TEXT@的符号。使用这一特性和一些其他Ant build文件技巧,我们可以确保所有的JARs能够具有一个发布号而获得打包,从而可以避免开发过程中的很多麻烦。
源文件
现在让我们看一看我们范例程序的源文件,即MyApp.java ( Listing A)。
Listing A
public class MyApp {
public static final String RELEASE = "@RELEASE@";
public static final String APP_NAME = "MyApp";
public static final String VERSION = "1.0";
public static String getVersionString() {return APP_NAME + " " + VERSION + " ("
+ System.getProperty("os.arch")+"; "+System.getProperty("os.name")
+ ((("@REL" + "EASE@").equals(RELEASE))?"":("; " + RELEASE))
+ ")";
}
public static void main(String[] args) {System.out.println(getVersionString());
}
}