2014-12-04 25 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