我在 Tomcat 8 上遇到 JRebel 5 的问题。
当我开始申请时,我会看到下一个例外:
2014-06-13 13:25:21 JRebel: Class 'org.apache.catalina.loader.WebappClassLoader' could not be processed by org.zeroturnaround.javarebel.integration.tomcat.WebappClassLoaderClassBytecodeProcessor@null
2014-06-13 13:25:21 JRebel: ERROR org.zeroturnaround.bundled.javassist.CannotCompileException: [source error] no such field: notFoundResources
at org.zeroturnaround.bundled.javassist.expr.MethodCall.replace(JRebel:241)
at org.zeroturnaround.javarebel.integration.tomcat.WebappClassLoaderClassBytecodeProcessor$3.edit(JRebel:160)
at org.zeroturnaround.bundled.javassist.expr.ExprEditor.loopBody(JRebel:192)
at org.zeroturnaround.bundled.javassist.expr.ExprEditor.doit(JRebel:91)
2014-06-13 13:25:21 JRebel: Directory 'C:\dev\proj\work\DMU2\src\main\webapp\WEB-INF\classes' will be monitored for changes.
2014-06-13 13:25:21 JRebel: Directory 'C:\dev\proj\work\DMU2\src\main\webapp' will be monitored for changes.
at org.zeroturnaround.bundled.javassist.CtBehavior.instrument(JRebel:712)
at org.zeroturnaround.javarebel.integration.tomcat.WebappClassLoaderClassBytecodeProcessor.disableResourceCache(JRebel:154)
at org.zeroturnaround.javarebel.integration.tomcat.WebappClassLoaderClassBytecodeProcessor.process(JRebel:35)
at org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor.process(JRebel:70)
at com.zeroturnaround.javarebel.xc.a(JRebel:257)
at com.zeroturnaround.javarebel.xc.a(JRebel:246)
at com.zeroturnaround.javarebel.xc.a(JRebel:224)
at com.zeroturnaround.javarebel.SDKIntegrationImpl.runBytecodeProcessors(JRebel:120)
at com.zeroturnaround.javarebel.wM.transform(JRebel:50)
at java.lang.ClassLoader.defineClass(ClassLoader.java)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4971)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:697)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1646)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
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:483)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:178)
at sun.rmi.transport.Transport$1.run(Transport.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: compile error: no such field: notFoundResources
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.fieldAccess(JRebel:819)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atFieldRead(JRebel:777)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMember(JRebel:962)
at org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atMember(JRebel:66)
at org.zeroturnaround.bundled.javassist.compiler.ast.Member.accept(JRebel:39)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.booleanExpr(JRebel:518)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atBinExpr(JRebel:337)
at org.zeroturnaround.bundled.javassist.compiler.ast.BinExpr.accept(JRebel:41)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.doTypeCheck(JRebel:242)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.compileBooleanExpr(JRebel:236)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atIfStmnt(JRebel:384)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:355)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.Javac.compileStmnt(JRebel:569)
at org.zeroturnaround.bundled.javassist.expr.MethodCall.replace(JRebel:235)
... 64 more
13-Jun-2014 13:25:27.993 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory C:\dev\tools\apache-tomcat-8.0.5\webapps\manager
2014-06-13 13:25:31 JRebel: Class 'org.apache.jasper.servlet.TldScanner' could not be processed by org.zeroturnaround.javarebel.integration.jasper.tagfile.TldLocationsCacheCBP@java.net.URLClassLoader@67c2e933
2014-06-13 13:25:31 JRebel: ERROR org.zeroturnaround.bundled.javassist.CannotCompileException: [source error] cannot find constructor org.apache.tomcat.util.descriptor.tld.TldResourcePath(java.net.URL)
at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:79)
at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:45)
at org.zeroturnaround.javarebel.integration.jasper.tagfile.TldLocationsCacheCBP.genScanDirMethod(TldLocationsCacheCBP.java:286)
at org.zeroturnaround.javarebel.integration.jasper.tagfile.TldLocationsCacheCBP.processParseTld(TldLocationsCacheCBP.java:418)
at org.zeroturnaround.javarebel.integration.jasper.tagfile.TldLocationsCacheCBP.process(TldLocationsCacheCBP.java:39)
at org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor.process(JRebel:70)
at com.zeroturnaround.javarebel.xc.a(JRebel:257)
at com.zeroturnaround.javarebel.xc.a(JRebel:246)
at com.zeroturnaround.javarebel.xc.a(JRebel:230)
at com.zeroturnaround.javarebel.SDKIntegrationImpl.runBytecodeProcessors(JRebel:120)
at com.zeroturnaround.javarebel.wM.transform(JRebel:50)
at java.lang.ClassLoader.defineClass(ClassLoader.java)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:93)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5148)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:697)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1646)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
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:483)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:178)
at sun.rmi.transport.Transport$1.run(Transport.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: compile error: cannot find constructor org.apache.tomcat.util.descriptor.tld.TldResourcePath(java.net.URL)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(JRebel:723)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atNewExpr(JRebel:149)
at org.zeroturnaround.bundled.javassist.compiler.ast.NewExpr.accept(JRebel:73)
at org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atMethodArgs(JRebel:221)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(JRebel:709)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(JRebel:688)
at org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(JRebel:157)
at org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(JRebel:46)
at org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(JRebel:660)
at org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(JRebel:157)
at org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(JRebel:46)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.doTypeCheck(JRebel:242)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atDeclarator(JRebel:726)
at org.zeroturnaround.bundled.javassist.compiler.ast.Declarator.accept(JRebel:100)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.MemberCodeGen.atTryStmnt(JRebel:204)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:367)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atIfStmnt(JRebel:391)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:355)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atForStmnt(JRebel:480)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:359)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
at org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodBody(JRebel:292)
at org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodDecl(JRebel:274)
at org.zeroturnaround.bundled.javassist.compiler.ast.MethodDecl.accept(JRebel:44)
at org.zeroturnaround.bundled.javassist.compiler.Javac.compileMethod(JRebel:169)
at org.zeroturnaround.bundled.javassist.compiler.Javac.compile(JRebel:95)
at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:74)
... 63 more
以前我使用的是Tomcat 6,而JRebel工作正常。但是如果我尝试移动到Tomcat 7或8,我会看到上面的异常。
我该如何解决这个问题?
答案 0 :(得分:1)
现在可以使用JRebel 6.0.0解决此问题。如果更新JRebel,它将解决错误。
答案 1 :(得分:0)
Jrebel论坛上报告了一个Bug,它在Jrebel 5.5遇到此问题之前构建。
http://zeroturnaround.com/forums/topic/jrebel-5-5-with-tomcat-7-0-50/
Download and Update Jrebel到最新版本将解决此问题。
仅供参考:不仅仅是使用tomcat,我也在Jetty服务器中遇到了这个问题。