我们有数百个通过Hibernate工具进行逆向工程的java实体。实体类似乎实现了java.io.Serializable
接口,但没有serialVersionUID
。
我们的任务是将serialVersionUID
添加到这些文件中(最糟糕的情况是,我们必须手动完成)。还有其他方法可以做到吗?理想的解决方案是在逆向工程步骤中完成,但也可以传递包名称并将serialVersionUID
添加到实体类中。
我们正在使用Hibernate 3.0
答案 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