我尝试从eclipse启动tomcat 8服务器。然后我收到以下错误。
SEVERE: Begin event threw error
java.lang.VerifyError: class waffle.apache.MixedAuthenticator overrides final method start.()V
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1178)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1451)
at org.apache.catalina.startup.Catalina.load(Catalina.java:551)
at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
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:497)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
我在tomcat lib文件夹中复制了waffle-jna jar。我从我系统中的tomcat 6安装的lib文件夹中复制了这个jar。这是版本问题吗?请帮我弄清楚原因。
答案 0 :(得分:1)
是的,您有版本问题。
验证程序是JVM的一部分,它在加载时对类运行正确性检查,并且一个检查是类不能覆盖最终方法。
在这种情况下,MixedAuthenticator
的某些超类定义了void start()
方法,该方法在MixedAuthenticator
编译的版本中不是最终的,但是最终的您在运行时拥有的版本。据推测,MixedAuthenticator
已被更新,不会覆盖该方法,或者已更新超类以使该方法成为非最终方法。您需要匹配MixedAuthenticator
的版本以及此处的问题超级类。
请注意,像这样的问题是最好尽可能使用项目打包库jar而不是使用容器全局类路径。
答案 1 :(得分:-1)
VerifyError 的原因是您更改了新类的定义,但旧类是使用旧版本的类编译的。
为了避免 VerifyErrorr ,您必须使用相同版本的Java编译所有类。此外,一旦对类进行了更改,请确保从头开始重新编译项目。最后,如果您的应用程序使用外部库,请验证您是否使用了每个库的相应版本,当然,请查阅相应的javadoc,以确保一切正确。
需要检查您正在编译的哪个类在应用程序的其他地方的类路径中存在,可能在另一个jar中?
另外,需要检查堆栈跟踪,源文件的字符编码(utf-8?)是否正确?