Nếu bạn muốn thêm serialVersionUID vắng mặt cho một loạt các tệp, IntelliJ IDEA có thể không hoạt động tốt. Tôi đưa ra một số kịch bản đơn giản để thực hiện mục tiêu này một cách dễ dàng:
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
Bạn lưu tập lệnh này, nói như add_serialVersionUID.sh
trong ~/bin
thư mục của bạn . Sau đó, bạn chạy nó trong thư mục gốc của dự án Maven hoặc Gradle của bạn như:
add_serialVersionUID.sh < myJavaToAmend.lst
.Lst này bao gồm danh sách các tệp Java để thêm serialVersionUID theo định dạng sau:
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
Kịch bản lệnh này sử dụng công cụ serialVer JDK. Đó là lý tưởng cho một tình huống khi bạn muốn sửa đổi một số lượng lớn các lớp không có serialVersionUID được đặt ở vị trí đầu tiên trong khi vẫn duy trì khả năng tương thích với các lớp cũ.
1L
như ID của mình và tăng dần khi biểu mẫu nối tiếp của bạn thay đổi. (Xem stackoverflow.com/questions/888335/ - ).