JRebel不适用于Tomcat 7和8

时间:2014-06-13 12:41:19

标签: tomcat jrebel

我在 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,我会看到上面的异常。

我该如何解决这个问题?

2 个答案:

答案 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服务器中遇到了这个问题。