我们希望获得java源代码的版本,在我们的例子中是svn $ Id $字符串,嵌入在生成的类文件中。
我们希望能够从类文件的静态检查中确定此信息,最好是通过运行字符串或什么命令。
在每个类中声明设置为此值的私有final static String变量的天真尝试不会导致在类文件中嵌入清晰的字符串。
答案 0 :(得分:1)
您可以使用预定义的名称在每个类的底部添加方法。说你用过:
public String extractChaimGeretzVersionNumber() {
return "$Id$";
}
然后你找到带有加载类的程序的版本,并通过反射调用magic方法并检索版本。
在构建.class和.jar文件之前,您可能必须拥有将方法插入.java文件的代码,或者您可以使用构建步骤检查魔术方法是否已存在于每个文件中。如果找不到,则失败。
答案 1 :(得分:1)
你说... 最好是通过运行字符串或什么命令 ...
我们假设你的代码中有这样的东西:
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 $