java.io.IOException: invalid constant type: 18 问题

Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 18
 at javassist.CtClassType.getClassFile2(CtClassType.java:203)
 at javassist.CtClassType.subtypeOf(CtClassType.java:303)
 at javassist.CtClassType.subtypeOf(CtClassType.java:318)
 at javassist.compiler.MemberResolver.compareSignature(MemberResolver.java:247)
 at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:119)
 at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:96)
 at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:704)
 at javassist.expr.NewExpr$ProceedForNew.setReturnType(NewExpr.java:243)
 at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:146)
 at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)
 at javassist.compiler.TypeChecker.atVariableAssign(TypeChecker.java:248)
 at javassist.compiler.TypeChecker.atAssignExpr(TypeChecker.java:217)
 at javassist.compiler.ast.AssignExpr.accept(AssignExpr.java:38)
 at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241)
 at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329)
 at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
 at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350)
 at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
 at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:404)
 at javassist.compiler.CodeGen.atStmnt(CodeGen.java:354)
 at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
 at javassist.compiler.Javac.compileStmnt(Javac.java:568)
 at javassist.expr.NewExpr.replace(NewExpr.java:206)
 at org.powermock.core.transformers.impl.MainMockTransformer$PowerMockExpressionEditor.edit(MainMockTransformer.java:427)
 at javassist.expr.ExprEditor.loopBody(ExprEditor.java:211)
 at javassist.expr.ExprEditor.doit(ExprEditor.java:90)
 at javassist.CtClassType.instrument(CtClassType.java:1289)
 at org.powermock.core.transformers.impl.MainMockTransformer.transform(MainMockTransformer.java:74)
 at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:243)
 ... 29 more
Caused by: java.io.IOException: invalid constant type: 18
 at javassist.bytecode.ConstPool.readOne(ConstPool.java:1023)
 at javassist.bytecode.ConstPool.read(ConstPool.java:966)
 at javassist.bytecode.ConstPool.<init>(ConstPool.java:127)
 at javassist.bytecode.ClassFile.read(ClassFile.java:693)
 at javassist.bytecode.ClassFile.<init>(ClassFile.java:85)
 at javassist.CtClassType.getClassFile2(CtClassType.java:190)
 ... 57 more

发现javassist包出现这个奇怪的错误。通过分析,发现javassist 是一个动态生成字节码的开源库,由于我使用的是jdk1.8.

原因:javassist 3.18以下的版本不支持在JDK1.8下运行,详情点击.

解决方法有两个:

1 使用JDK1.7或者以下版本.

2 升级javassist 到3.18或以上版本.


你可能感兴趣的:(java.io.IOException: invalid constant type: 18 问题)