2014-12-04 2 views
0

우리는 최대 절전 모드 도구를 통해 리버스 엔지니어링되는 수백 개의 자바 엔터티를 가지고 있습니다. 엔티티 클래스는 java.io.Serializable 인터페이스를 구현하는 것으로 보이지만, serialVersionUID을 가지지 않습니다.Java 프로그램을위한 일련 번호를 프로그래밍 방식으로 추가

우리는이 파일에 serialVersionUID을 추가해야합니다 (최악의 경우 수동으로해야 할 것입니다). 우리가 할 수있는 다른 방법이 있습니까? 이상적인 해결책은 역 엔지니어링 단계 자체에서 수행하는 것이지만, 패키지 이름을 전달하고 serialVersionUID을 Entity 클래스에 추가하는 것도 좋습니다. 우리는 최대 절전 모드 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" 

는 문자열을 검색합니다하려면 "직렬화 구현"및 serialVersionUID의 변수 그 라인에서 추가

sed -i '' "/implements Serializable/ a\ 
    private static final long serialVersionUID =${serial}L; 
" $f 

done 

여기에 원래입니다 post

+0

이것은 유닉스 기반 시스템입니다. Windows 기반 시스템을 사용하고 있습니다. 그래서 시간을 보내야 할 것 같습니다. – vinoth

+0

cygwin을 설치하는 것은 옵션이 아닙니까? – liorsolomon

관련 문제