많은 파일에 대해 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/… 참조 ).