programing

java.lang을 취득하는 원인.Verify Error(확인 오류)

randomtip 2022. 7. 12. 23:11
반응형

java.lang을 취득하는 원인.Verify Error(확인 오류)

는 다음과 같은 하고 있습니다.java.lang.VerifyError

java.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMonthData signature: (IILjava/util/Collection;Ljava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/util/MessageRe˜̴Mt̴MÚw€mçw€mp:”MŒŒ
                at java.lang.Class.getDeclaredConstructors0(Native Method)
                at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
                at java.lang.Class.getConstructor0(Class.java:2671)

이 문제는 서블릿이 배포된 jboss 서버가 시작될 때 발생합니다.jdk-1.5.0_11로 컴파일 되어 있는데, jdk-1.5.0_15로 재컴파일을 시도했지만 성공하지 못했습니다.컴파일은 정상적으로 실행되지만 전개되면 java.lang이 됩니다.Verify Error가 발생합니다.

메서드 이름을 변경했을 때 다음과 같은 오류가 발생하였습니다.

java.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMD signature: (IILjava/util/Collection;Lj    ava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/util/MessageResources ØÅN|ØÅNÚw€mçw€mX#ÖM|XÔM
            at java.lang.Class.getDeclaredConstructors0(Native Method)
            at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357
            at java.lang.Class.getConstructor0(Class.java:2671)
            at java.lang.Class.newInstance0(Class.java:321)
            at java.lang.Class.newInstance(Class.java:303)

메서드 시그니처가 더 많이 표시되는 것을 알 수 있습니다.

실제 메서드 시그니처는

  private PgasePdfTable getMonthData(int month, int year, Collection dayTypes,
                          Collection calendarDays,
                          HashMap bcSpecialDays,
                          Collection activityPeriods,
                          Locale locale, MessageResources resources) throws   Exception {

javap그러면 메서드의 시그니처가 나타납니다.

다른 동료들이 코드를 체크하고 컴파일하여 전개할 때도 같은 문제가 발생합니다.빌드 서버가 코드를 픽업하여 개발 환경 또는 테스트 환경(HPUX)에 도입할 때 동일한 오류가 발생합니다.또, Ubuntu 를 실행하고 있는 자동 테스트 머신에서도, 서버의 기동시에 같은 에러가 표시됩니다.

나머지 애플리케이션은 정상적으로 실행되지만 1개의 서블릿만 고장났습니다.어디를 찾아야 할지 어떤 아이디어라도 도움이 될 거예요.

java.lang.VerifyError실행 시 사용하는 라이브러리가 아닌 다른 라이브러리로 컴파일 했을 경우 결과일 수 있습니다.

예를 들어 Xerces 1에 대해 컴파일된 프로그램을 실행하려고 할 때 이 문제가 발생했는데 클래스 경로에서 Xerces 2가 발견되었습니다. 클래스)org.apache.*네임스페이스되었기 때문에, 「네임스페이스」는 「네임스페이스」를 참조해 .ClassNotFoundException결과가 아니었습니다.클래스 및 메서드가 변경되었기 때문에 실행 시 발견된 메서드 시그니처가 컴파일 시점과 일치하지 않습니다.

보통 컴파일러는 메서드 시그니처가 일치하지 않는 문제에 플래그를 붙입니다.를 다시 하고 "JVM"을 슬로우합니다.VerifyError는 안 되는 를 들어, 「」를 호출하는 경우)String하다, 하다, 라고 하는 필드에 저장합니다.List.

java.lang.VerifyError최악이에요.

메서드의 바이트 코드 크기가 64kb 제한을 초과하면 이 오류가 발생하지만 아마 알아차렸을 것입니다.

이 클래스가 어플리케이션의 다른 클래스 경로나 다른 병에 없는 것이 100% 확실합니까?

「 」 , 「 」 )의됩니다.utf-8?) 습 ??

Kevin Panko가 말했듯이, 그것은 대부분 도서관의 변화 때문이다.따라서 경우에 따라서는 프로젝트(디렉토리)를 "깨끗하게" 한 후 빌드를 작성하면 효과가 있습니다.

가지 해 볼 수 은 '어느 정도'를 사용하는 입니다.-Xverify:all그러면 로드 시 바이트 코드가 확인되며 바이트 코드가 유효하지 않은 경우 유용한 오류 메시지가 표시될 수 있습니다.

이 에러는, Import 하고 있던 프로젝트를 라이브러리로 해 Android 로 수정했습니다(http://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject).

이전에는 (라이브러리가 아닌) 프로젝트를 참조하고 있었는데, 이 이상한 Verify Error가 발생했습니다.

도움이 됐으면 좋겠는데

VerifyError는 클래스 파일에 구문적으로는 올바르지만 메서드 경계를 넘는 점프 타깃 등의 의미 제한을 위반하는 바이트 코드가 포함되어 있음을 의미합니다.

기본적으로 VerifyError는 컴파일러 버그가 있는 경우 또는 클래스 파일이 다른 방식으로 파손된 경우(RAM의 결함이나 HD 장애 등)에만 발생합니다.

다른 JDK 버전 및 다른 시스템에서 컴파일해 보십시오.

된 다른 합니다.java.lang.VerifyError Java 프로젝트의 컴파일러 을 6.후 사라졌습니다.

나중에 이것이 Dalvik의 문제임을 알게 되었습니다.https://groups.google.com/forum/ ? from groups # ! topic / Android - developers / sKsMTZ42pwE

저는 클래스 파일을 200개씩 망가뜨려서 이 문제가 발생하고 있었습니다.조금 검색하면 이 Java 버그가 표시됩니다.기본적으로 설정--effort=4문제가 해결되었습니다.

java 1.5.0_17을 사용한다(단, java 1.5의 모든 변종에서 갑자기 나타났다).

비슷한 java.lang을 수정했습니다.VerifyError 문제를 대체

        catch (MagickException e)

와 함께

        catch (Exception e)

서 ''는MagickException라이브러리 프로젝트에서 정의되었습니다(내 프로젝트에 종속성이 있습니다).

그 후, 나는java.lang.NoClassDefFoundError같은 라이브러리의 클래스에 대해 설명합니다(https://stackoverflow.com/a/9898820/755804 참조).

이 문제는 Oracle의 JDK에 대해 컴파일된 라이브러리를 Android에서 로드하려고 할 때 발생할 수 있습니다.

Ning Async HTTP 클라이언트의 문제를 다음에 나타냅니다.

제 경우 이 블록을 삭제해야 했습니다.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

근처에서 오류가 발생하고 있었다.Fragment.showDialog()메서드 콜

오류를 생성하는 최소 예제

한 가지 간단한 방법은 Jasmin을 사용하거나 바이너리 파일 편집기를 사용하여 바이트 코드를 수동으로 편집하는 것입니다.

성성 lets lets lets lets lets 를 작성합시다.void를 하지 않는 return됨)return;(JVMS)

Jasmin에서는 다음과 같이 쓸 수 있습니다.

.class public Main
.super java/lang/Object

.method public static main([Ljava/lang/String;)V
   aload_0 ; Just so that we won't get another verify error for empty code.
.end method

ㅇㅇㅇㅇ를 합니다.javac Main.j ★★★★★★★★★★★★★★★★★」javap -v Main정리되어 .

public static void main(java.lang.String[]);
  descriptor: ([Ljava/lang/String;)V
  flags: ACC_PUBLIC, ACC_STATIC
  Code:
    stack=1, locals=1, args_size=1
       0: aload_0

반품 지시는 없습니다.

''를 '''를 실행해 보겠습니다.java Main을 사용하다

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.VerifyError: (class: NoReturn, method: main signature: ([Ljava/lang/String;)V) Falling off the end of the code
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

인 Java가 이 는 보통 하지 않습니다.return로로 합니다.void방법을 알려드립니다. '이더넷'을 추가할 returnmain이렇게 확인하실 수 .javap.

JVMS

VerifyError는 JVMS 7장 4.5에서 지정된 특정 유형의 부정한 클래스 파일을 실행하려고 하면 발생합니다.

JVMS는 Java가 파일을 로드할 때 클래스 파일이 정상인지 확인하기 위해 일련의 검사를 수행해야 한다고 말합니다.

JVMS 7 4.10에서는 다음과 같은 오류가 발생하므로 Java 코드의 컴파일 및 실행 사이클에서는 이러한 오류가 발생할 수 없습니다.

Java 프로그래밍 언어용 컴파일러는 모든 정적 및 구조적 제약 조건을 충족하는 클래스 파일만 생성해야 하지만 [...]

따라서 예를 , 「」를 제외한 해 둘 .javac.

이 페이지에서 힌트를 얻을 수 있습니다.http://www.zanthan.com/itymbi/archives/000337.html

이 메서드 본문에 javac이 검출하지 못하는 미묘한 오류가 있을 수 있습니다.여기에 전체 방법을 게시하지 않으면 진단하기 어렵습니다.

가능한 한 많은 변수를 최종적으로 선언하는 것으로 시작할 수 있습니다.Zanthan 사이트에서 언급되어 있는 버그에 감염되어, 어쨌든 좋은 방법이 되는 경우가 많습니다.

제 경우 프로젝트 A는 다른 프로젝트, 예를 들어 X에 정의된 클래스 중 일부를 사용하고 있었습니다.그래서 A의 빌드 패스에 X를 레퍼런스 프로젝트로 추가했을 때 이 에러가 발생하였습니다.그러나 X를 참조 프로젝트로 삭제하고 X의 jar를 라이브러리 중 하나로 포함시키면 문제가 해결되었습니다.

클래스 경로에 동일한 jar 파일의 여러 버전이 있는지 확인합니다.

예를 들어 클래스 패스에 opennlp-tools-1.3.0.jar와 opennlp-tools-1.5.3.jar가 있는데 이 오류가 발생하였습니다.해결책은 opennlp-tools-1.3.0.jar를 삭제하는 것이었습니다.

CGLIB < 2.2 with JRE >6 에서는, 같은 에러가 트리거 되는 일이 있습니다.「Should I upgrade to CGLIB 3.0?」 Spring SPR-9669 의 코멘트를 참조해 주세요.

특히 JRE6에서는 모든 것이 정상적으로 동작하고 JRE7로 전환하기만 하면 문제가 발생합니다.

이 에러가 발생하는 또 다른 이유는 AspectJ <= 1.6.11과 JRE > 6의 조합일 수 있습니다.

자세한 내용은 이클립스 버그 353467키커 티켓 307을 참조하십시오.

특히 JRE6에서는 모든 것이 정상적으로 동작하고 JRE7로 이행하면 문제가 발생합니다.

또한 maven과 함께 모듈을 많이 Import한 경우에도 발생할 수 있습니다.동일한 이름(같은 수식 이름)을 가진 클래스가 두 개 이상 있습니다.이 오류는 컴파일 시간과 런타임 간의 해석 차이로 인해 발생합니다.

java7로 이행하거나 java7을 사용하는 경우 일반적으로 이 오류가 발생할 수 있습니다.위의 오류에 직면하여 근본 원인을 찾기 위해 많은 어려움을 겪었습니다. 어플리케이션을 실행하는 동안 "-XX:-UseSplitVerifier" JVM 인수를 추가해 보는 것이 좋습니다.

후 ★★★GradleAndroid Studio 3.6.1의 경우 API 19의 릴리즈 빌드에서 크래시가 발생했습니다.

Glide라이브러리 오류입니다.해결책은 proguard 규칙을 다시 쓰는 것입니다.txt를 클릭합니다.

Gradleclasspath 'com.android.tools.build:gradle:3.5.3'오래된 솔루션이므로 사용하지 마십시오.

Kevin이 말한 이유는 맞지만, 다른 것으로 옮기기 전에 반드시 아래를 확인하겠습니다.

  1. cglibs우리 반에서요
  2. hibernate내 클래스 경로에 버전이 있습니다.

상기 중 하나의 버전이 여러 개 또는 충돌할 경우 해당 버전과 같은 예기치 않은 문제가 발생할 수 있습니다.

java.displaces를 클릭합니다.VerifyError는 컴파일된 바이트코드가 Android에서 찾을 수 없는 것을 참조하고 있음을 의미합니다.이 verifyError 두 디바이스에서 동일한 빌드를 실행한 경우에도 위의 버전이 아닌 kitkat4.4 이하 버전에서만 문제가 발생합니다.이전 버전의 Jackson 파서를 사용했을 때 java.lang.verify error가 표시됩니다.

compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+'

그런 다음 코어 라이브러리를 사용하지 않고 Dependancy를 최신 버전 2.2에서 2.7로 변경했습니다.그러면 동작합니다.즉, 메서드 및 코어의 기타 내용이 Databind2.7의 최신 버전으로 이행됩니다.이것으로 문제가 해결됩니다.

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'

사용할 수 없는 jar 파일을 모두 삭제하고 실행해 보세요.그리고 그 작업은 jcommons jar 파일과 다른 jcommons.1.0.14 jar 파일을 추가했습니다.그러면 jcommons를 삭제해 주세요.

파일에 쓰기:

{Wildfly-home}\modules\system\layers\base\org\picketbox\main 

의존관계로 하다<module name="sun.jdk"/>

내 경우 아래 스택트레이스에서 확인 오류가 발생하였습니다.

jasperreports-server-cp-6.4.0-bin\buildomatic\build.xml:61: The following error occurred while executing this line:
TIB_js-jrs-cp_6.4.0_bin\jasperreports-server-cp-6.4.0-bin\buildomatic\bin\setup.xml:320: java.lang.VerifyError: (class: org/apache/commons/codec/binary/Base64OutputStream, method: <init> signature: (Ljava/io/OutputStream;ZI[B)V) Incompatible argument to function
    at com.jaspersoft.jasperserver.crypto.KeystoreManager.createKeystore(KeystoreManager.java:257)
    at com.jaspersoft.jasperserver.crypto.KeystoreManager.init(KeystoreManager.java:224)
    at com.jaspersoft.buildomatic.crypto.KeystoreTask.execute(KeystoreTask.java:64)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:169)
    at org.apache.tools.ant.taskdefs.ImportTask.importResource(ImportTask.java:222)
    at org.apache.tools.ant.taskdefs.ImportTask.execute(ImportTask.java:163)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:180)
    at org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:93)
    at org.apache.tools.ant.Main.runBuild(Main.java:826)
    at org.apache.tools.ant.Main.startAnt(Main.java:235)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

commons-codec-1.3.jar의 classpath 엔트리를 삭제하여 해결했습니다만, Jasper에 부속된 것과 이 jar의 버전이 일치하지 않는 버전이 있었습니다.

언급URL : https://stackoverflow.com/questions/100107/causes-of-getting-a-java-lang-verifyerror

반응형