我正在尝试使用 Java 7 和 Tomcat 7 构建 JSF/Hibernate 应用程序。我已经安装了 Java SDK 和 JavaEE SDK,并将 javaee.jar 和 javaee-api-6.jar 复制到我的 Tomcat LIB 文件夹中。根据我对这篇文章和这篇文章的理解,我应该拥有我需要的所有 jar,并且据我所知,我在此文件夹中没有其他资源冲突的 jar。
javaee.jar 文件包含看起来像 Maven pom 文件的内容,仅此而已。我不确定它的价值是什么。
我的 javaee-api-6 jar 大小约为 950k,包含我期望的所有 .class 文件。我使用的代码编译得很好,我在尝试部署到 Tomcat 时只看到一个错误。这些罐子取自 glassfish 装置。奇怪的是 ServletException.class 文件只有 366 个字节。
我在 Eclipse 中设置了 Tomcat,以便 IDE 在部署时“接管”Tomcat,而不是部署到某个插件文件夹(默认行为)。
到目前为止,我使用的唯一相关包是 javax.persistence 中的“Entity”“Id”和“GeneratedValue”。
我试过只使用并重
javaee-api-6.jar
命名它javaee-api.jar
,javaee.jar
没有任何变化。看起来文件名并不重要。
对 Glassfish lib 文件夹的深入检查确实显示了许多相关的 jar,但不是完整的 javaee 包,所以我无法将 Javaee-api-6.jar 移出并移入,它们不完整,我得到了一个类似的错误表明(我假设)找不到某个类的实现。
所以我的问题是:我需要在 Tomcat 7 中包含什么才能使 javax.persistence 正常工作?
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at org.apache.tomcat.util.IntrospectionUtils.findMethods(IntrospectionUtils.java:713)
at org.apache.tomcat.util.IntrospectionUtils.setProperty(IntrospectionUtils.java:272)
at org.apache.tomcat.util.IntrospectionUtils.setProperty(IntrospectionUtils.java:261)
at org.apache.tomcat.util.digester.SetPropertiesRule.begin(SetPropertiesRule.java:215)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1282)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1543)
at org.apache.catalina.startup.Catalina.load(Catalina.java:554)
at org.apache.catalina.startup.Catalina.load(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:262)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:430)