我们希望有 java 源代码的版本,在我们的例子中是 svn $Id$ 字符串,嵌入到生成的类文件中。
我们希望能够通过对类文件的静态检查来确定此信息,最好是通过运行字符串或什么命令。
在每个类中声明一个设置为此值的私有最终静态字符串变量的天真尝试不会导致在类文件中嵌入一个清晰的字符串。
我们希望有 java 源代码的版本,在我们的例子中是 svn $Id$ 字符串,嵌入到生成的类文件中。
我们希望能够通过对类文件的静态检查来确定此信息,最好是通过运行字符串或什么命令。
在每个类中声明一个设置为此值的私有最终静态字符串变量的天真尝试不会导致在类文件中嵌入一个清晰的字符串。
你说......最好通过运行字符串或什么命令......
假设您的代码中有这样的内容:
private static final String SVN_ID =
"$Id: SvnIdDemo.java 1081 2008-09-30 19:03:23Z john $";
以下 Perl 单行...
$ perl -nwe 'print "$1\n" if /.*(\$Id:[^\$]+\$).*/' SvnIdDemo.class
... 将 SVN ID 字符串打印到 STDOUT。
$Id: SvnIdDemo.java 1081 2008-09-30 19:03:23Z john $
您可以使用预定义的名称将方法添加到每个类的底部。假设您使用过:
public String extractChaimGeretzVersionNumber() {
return "$Id$";
}
然后,您会找到带有加载类的程序的版本,并通过反射调用魔术方法并检索版本。
在构建 .class 和 .jar 文件之前,您必须拥有将方法插入 .java 文件的代码,或者您可以有一个构建步骤来检查魔术方法是否已经存在于每个文件中。如果找不到,则构建失败。