หากคุณต้องการเพิ่ม 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 นี้รวมถึงรายการของไฟล์ Java เพื่อเพิ่ม serialVersionUID ในรูปแบบต่อไปนี้:
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/… )