2014-12-04 27 views
0

我们有数百个通过Hibernate工具进行反向工程的Java实体。实体类似乎实现java.io.Serializable接口,但没有serialVersionUID以编程方式为Java文件添加SerialVersion ID

我们的任务是将serialVersionUID添加到这些文件中(最坏的情况是,我们必须手动完成)。有其他方式可以做到吗?理想的解决方案是在逆向工程步骤中完成它,但传递包名称并将serialVersionUID添加到实体类也是可以的。

我们使用Hibernate 3.0

回答

2

我开始写我自己的代码来实现这一点,但后来我发现了一个更简单的解决方案。 以下bash脚本通过* .java文件递归运行(从项目的根目录运行它)并搜索所有实现Serializable的文件。

#!/bin/bash 

files=$(find . -name '*.java' | xargs grep -i -l "Serializable" | xargs grep "interface" -L | xargs grep "serialVersionUID" -L) 

那么它将打印加入serialuid和哪个类

do 
serial=$(jot -r 1 1000000000000 9999999999999) 
echo "Adding serialVersionUID $serial to $f" 

那么它将搜索字符串“实现Serializable”,并在该行的serialVersionUID变量添加

sed -i '' "/implements Serializable/ a\ 
    private static final long serialVersionUID =${serial}L; 
" $f 

done 

这是原始的post

+0

这是为基于unix的系统。我正在使用基于Windows的系统。所以我想我将不得不花费一些时间 – vinoth 2014-12-04 05:34:47

+0

安装cygwin不是一种选择吗? – liorsolomon 2014-12-04 16:18:49