如果要为一堆文件添加缺少的serialVersionUID,则IntelliJ IDEA可能无法很好地工作。我提出了一些简单的脚本来轻松实现此目标:
base_dir=$(pwd)
src_dir=$base_dir/src/main/java
ic_api_cp=$base_dir/target/classes
while read f
do
clazz=${f//\//.}
clazz=${clazz/%.java/}
seruidstr=$(serialver -classpath $ic_api_cp $clazz | cut -d ':' -f 2 | sed -e 's/^\s\+//')
perl -ni.bak -e "print $_; printf qq{%s\n}, q{ private $seruidstr} if /public class/" $src_dir/$f
done
您保存此脚本,例如add_serialVersionUID.sh
在~/bin
文件夹中。然后在Maven或Gradle项目的根目录中运行它,如下所示:
add_serialVersionUID.sh < myJavaToAmend.lst
该.lst包含用于以以下格式添加serialVersionUID的Java文件列表:
com/abc/ic/api/model/domain/item/BizOrderTransDO.java
com/abc/ic/api/model/domain/item/CardPassFeature.java
com/abc/ic/api/model/domain/item/CategoryFeature.java
com/abc/ic/api/model/domain/item/GoodsFeature.java
com/abc/ic/api/model/domain/item/ItemFeature.java
com/abc/ic/api/model/domain/item/ItemPicUrls.java
com/abc/ic/api/model/domain/item/ItemSkuDO.java
com/abc/ic/api/model/domain/serve/ServeCategoryFeature.java
com/abc/ic/api/model/domain/serve/ServeFeature.java
com/abc/ic/api/model/param/depot/DepotItemDTO.java
com/abc/ic/api/model/param/depot/DepotItemQueryDTO.java
com/abc/ic/api/model/param/depot/InDepotDTO.java
com/abc/ic/api/model/param/depot/OutDepotDTO.java
该脚本使用JDK serialVer工具。当您想修改最初没有设置serialVersionUID的大量类,同时又要保持与旧类的兼容性时,这是一种理想的选择。
1L
ID,并在序列化表格更改时递增。(请参阅stackoverflow.com/questions/888335/…)。