以编程方式为Java文件添加SerialVersion ID

时间:2014-12-04 03:23:37

标签: java hibernate serialization jdk1.5 serialversionuid

我们有数百个通过Hibernate工具进行逆向工程的java实体。实体类似乎实现了java.io.Serializable接口,但没有serialVersionUID

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

我们正在使用Hibernate 3.0

1 个答案:

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