如何在java类中嵌入版本字符串

时间:2013-01-17 20:23:53

标签: java class svn version-control version

我们希望获得java源代码的版本,在我们的例子中是svn $ Id $字符串,嵌入在生成的类文件中。

我们希望能够从类文件的静态检查中确定此信息,最好是通过运行字符串或什么命令。

在每个类中声明设置为此值的私有final static String变量的天真尝试不会导致在类文件中嵌入清晰的字符串。

2 个答案:

答案 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 $