IntelliJ IDEA 생성 serial VersionUID
IntelliJ IDEA에서 이 값을 생성하는 방법은 무엇입니까?
[ Settings ]-> [ Errors ]-> [ Serialization issues ]-> [ SerialVersion ]를 사용하지 않고 [Serializable]클래스로 이동합니다.'UID'인데 아직 경고가 안 나왔어요.내 클래스 PKladrBuilding 부모는 Serialable 인터페이스를 구현합니다.
코드의 일부:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
이전 버전의 IntelliJ IDEA가 있는지 모르겠지만 File → Settings 메뉴로 이동하면...→ 검사 → 직렬화 문제 → 'serialVersion'이 없는 직렬화 가능 클래스'UID'가 활성화되어 있고, 당신이 제공하는 클래스가 경고를 줍니다.

첫 번째 클래스에서 시험해 보면:

BTW를 하지 않았습니다: ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」.{ }를 클릭하여 컴파일 오류를 수정합니다.
Generate Serial Version 설치Olivier Descout의 UID 플러그인.
메뉴 파일 → 설정 → 플러그인 → 리포지토리 찾아보기 →GenerateSerialVersionUID
플러그인을 설치하고 다시 시작합니다.
이제 Code → Generate → serialVersion 메뉴에서 ID를 생성할 수 있습니다.UID 또는 숏컷.
플러그인이 없는 경우:IntelliJ에서 하이라이트를 활성화하기만 하면 됩니다.
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'하고 - 를 클릭합니다.'OK'.
자, 만약 여러분의 수업이Serializable, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트, 하이라이트.alt+Enter 이름에서 클래스 이름 합니다.private static final long serialVersionUID.
PS: 여기서부터 도입
시리얼라이제이션에이 좀 , 「」, 「」, 「」를알 수 .serialVersionUID의미 있는 값을 부여해야 합니다.
여기에 상세한 코멘트가 있습니다.나는 여기서 그 코멘트에 대처하고 있다.
실제로 시리얼 버전 UID를 "생성"하지 마십시오.이는 Java에 의해 ID가 어떻게 사용되는지에 대한 일반적인 오해에서 비롯된 멍청한 "기능"입니다.예를 들어, 이러한 ID에 의미 있는 판독 가능한 값을 부여하고, 새로운 버전의 클래스가 모든 이전 버전(이전 시리얼화되었을 가능성이 있음)을 폐지한다고 생각될 때마다 값을 늘려야 합니다.이러한 ID를 생성하는 모든 유틸리티는 기본적으로 ID가 정의되지 않은 경우 JVM이 수행하는 작업을 수행합니다. 즉, 클래스 파일의 내용에 따라 값이 생성되므로 읽을 수 없는 의미 없는 긴 정수가 생성됩니다.JVM의 관점에서 클래스의 모든 버전을 구별하려면 serialVersion을 지정하지 마십시오.UID 값은 JVM에 의해 즉시 생성되며 클래스의 각 버전의 값은 고유합니다.이 값을 명시적으로 정의하는 목적은 동일한 SVUID를 가진 클래스의 다른 버전을 동일한 것으로 취급하도록 시리얼화 메커니즘에 지시하는 것입니다.예를 들어 오래된 시리얼화 버전을 거부하지 않도록 하는 것입니다.따라서 ID를 정의하고 변경하지 않는 경우(자동 생성에 의존하기 때문에 ID를 다시 생성하지 않을 수 있기 때문에 그렇게 한다고 가정합니다)는 클래스의 모든 버전이 시리얼라이제이션 메커니즘에 의해 동일하게 간주됩니다.그게 네가 원하는 거니?그렇지 않은 경우, 그리고 객체가 인식되는 방법을 제어하려면 클래스가 크게 변경되었다고 판단했을 때 사용자가 직접 이해하고 쉽게 업데이트할 수 있는 단순한 값을 사용해야 합니다.23 자리수의 값은 전혀 도움이 되지 않습니다.
이게 도움이 됐으면 좋겠다.행운을 빌어요.
가치 사용을 생성하기 위해
private static final long serialVersionUID = $randomLong$L;
$END$
randomLong 템플릿 변수에는 다음 값을 지정합니다.groovyScript("new Random().nextLong().abs()).
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
또한 작업을 수행할 라이브 템플릿을 추가할 수 있습니다.
그러기 위해서는 ->를 누릅니다."Live Templates" 션 - ->other (원하는 경우)
그런 다음 다음과 같은 정의를 사용하여 새 정의를 만듭니다.
private static final long serialVersionUID = 1L;
$END$
[ ] 를 합니다.definition'serial'
, 그럼 이제 해 보세요.serialTAB 학급에서.
인 방법: 장장쉬쉬 easiest: :::: :Alt+Enter
private static final long serialVersionUID = ;
는 IntelliJ .= '키워주세요'를 눌러주세요alt+Enter )Option+Enter(Mac 서서를를를서서는)"Random Change serialVersion"이라고됩니다.UID 。라고 입력합니다.
serialVersionalVersionalVersion을 생성하는 은 UID를 사용하는 입니다.>Analyze >Run Inspection by Name컨텍스트 메뉴(또는 키보드 단축키(기본적으로는 +++)altshifti에서 serialVersion을 사용하지 않고 serialable class를 입력합니다.UID' (또는 단순히 "serialVersion" 이라고 입력합니다)UID"와 Type Ahead 기능이 검색해 줍니다.
그런 다음 검사를 수행할 위치를 선택할 수 있는 컨텍스트 메뉴가 나타납니다(예: 특정 모듈, 프로젝트 전체, 파일 하나 등).
이 방법을 사용하면 일반적인 검사 규칙을 설정할 필요도 없습니다.
「」의 경우v2018.2.1
에 가다
[ Preferences ]> [ Editor ]> [ Inspections ]> [ Java ]> [ Serialization issues ]> [ SerialVersion ]를 사용하지 않고 시리얼화 가능한 클래스를 전환합니다.UID''를 선택합니다.
클래스 선언 옆에 경고가 표시됩니다.
Android Studio 2.1을 사용하고 있는데 Class Name을 클릭하여 1초 동안 마우스를 올리면 전구를 얻을 수 있습니다.
부재 serialVersion을 추가하는 경우많은 파일의 UID는 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 과 같이 실행합니다.그런 다음 Maven 또는 Gradle 프로젝트의 루트 디렉토리에서 다음과 같이 실행합니다.
add_serialVersionUID.sh < myJavaToAmend.lst
이 .lst에는 serialVersion을 추가하기 위한 Java 파일 목록이 포함되어 있습니다.다음 형식의 UID:
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 도구를 사용합니다.serialVersion이 없었던 대량의 클래스를 수정하는 경우에 최적입니다.UID는 우선 이전 클래스와의 호환성을 유지하면서 설정됩니다.
"ser"라는 라이브 템플릿을 다른 그룹에 추가하고 "Applicable in Java: declaration"으로 설정한 다음 "Shorten FQ names"를 선택 취소합니다.템플릿 텍스트는 다음과 같습니다.
$serial$
이제 변수를 편집하고 일련 번호를 다음과 같이 설정합니다.
groovyScript("(System.env.JDK_HOME+'/bin/serialver -classpath '+com.intellij.openapi.fileEditor.FileDocumentManager.instance.getFile(_editor.document).path.replaceAll('/java/.*','').replaceAll('/src/','/build/classes/')+' '+_1).execute().text.replaceAll('.*: *','')",qualifiedClassName())
표준 Gradle 프로젝트 레이아웃을 가정합니다.Maven의 /build/를 /target/로 변경합니다.
언급URL : https://stackoverflow.com/questions/12912287/intellij-idea-generating-serialversionuid
'programing' 카테고리의 다른 글
| 인텔리J에서는 가능하지만 이클립스에서는 불가능하다고요? (0) | 2022.07.27 |
|---|---|
| vue 컴포넌트에서 저장 버튼을 클릭한 후 모드를 닫으려면 어떻게 해야 합니까? (0) | 2022.07.27 |
| 클릭 시 boostrap-vue 테이블 작업 (0) | 2022.07.27 |
| 모바일 브라우저의 다양한 Vuejs 컴포넌트 표시 (0) | 2022.07.27 |
| 초기 라우팅 전에 Vuex 작업 실행 (0) | 2022.07.27 |