java, asm org.objectweb.asm.util.checkclassadapter는 지원되지 않은 major.minor 버전 0.0을 일으킨다
-
22-07-2019 - |
문제
다음과 같은 예외가 있습니다.
java.lang.UnsupportedClassVersionError: net/sourceforge/barbecue/BarcodeException : **Unsupported major.minor version 0.0**
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at pl.wroc.pwr.judy2.master.TestClassLoader.loadClass(TestClassLoader.java:51)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getConstructor(Class.java:1657)
at junit.framework.TestSuite.getTestConstructor(TestSuite.java:83)
at junit.framework.TestSuite.<init>(TestSuite.java:131)
at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:67)
at org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:14)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:31)
at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:24)
at pl.wroc.pwr.judy2.util.JUnitTestRunner.runTest(JUnitTestRunner.java:26)
아래 소스 코드와 함께 일부 바이트 코드를 계측하려고 할 때. (정확하게 말하면, 수정 된 바이트 코드를 실행하려고 할 때이 예외를 얻습니다).
public byte[] instrument(byte[] bytecode)
{
ClassReader cr = new ClassReader(bytecode);
ClassWriter cw = new ClassWriter(cr, 0);
// create new class adapter
AbstractInstrumentClassAdapter ca = new InstrumentClassAdapterTracer(cw, tracer);
// System.out.println("----------------------------------- Daikon start");
cr.accept(ca, 0);
ClassReader cr2 = new ClassReader(cw.toByteArray());
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw);
AbstractInstrumentClassAdapter ca2 = new InstrumentClassAdapterInstrumenter(checker);
cr2.accept(checker, 0);
return cw2.toByteArray();
}
InstrumentClassAdapterInstrumenter 구현이 될 수 있다고 생각했기 때문에 지금은 checkClassAdapter 만 사용하고 있습니다. 아무도 내가 뭘 잘못하고 있는지 볼 수 있습니까?
건배,
해결책
LOL, 마지막으로 여기서 몇 가지 질문을했을 때 간단한 타이핑 오류 인 것 같습니다.
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw2);
~ 아니다
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw);
제휴하지 않습니다 StackOverflow