【问题标题】:Tomcat 7 - Servlet 3.0: Invalid byte tag in constant poolTomcat 7 - Servlet 3.0:常量池中的字节标记无效
【发布时间】:2011-07-19 18:07:46
【问题描述】:
  • tomcat 7.0.16
  • Java 1.6.0_22
  • CentOS 5.6

我刚刚将 web.xml 切换到 servlet 3.0(从之前运行 2.4 的应用程序),现在我看到以下错误(为 org.apache.tomcat.util 启用了精细日志记录):

mtyson  FINE: Scanning JAR [file:/usr/java/jdk1.6.0_22/jre/lib/ext/jcharset.jar] from classpath
mtyson  Jul 19, 2011 10:04:40 AM org.apache.catalina.startup.HostConfig deployDirectory
mtyson  SEVERE: Error deploying web application directory ROOT
mtyson  org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60

更新:刚刚尝试了 tomcat 7.0.19 - 结果相同

【问题讨论】:

标签: tomcat7 servlet-3.0


【解决方案1】:

添加

metadata-complete="true" 

到您的 web.xml 应该对问题进行排序

<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="true">

这告诉 tomcat 不要扫描类的注释:http://www.tomcatexpert.com/blog/2011/10/12/how-use-fragments-and-annotations-configure-your-web-application

【讨论】:

  • 请记住,这样做,您将无法使用注释。
  • 无法使用 maven tomcat7-maven-plugin:2.2:run-war what instruments Apache Tomcat/7.0.47
【解决方案2】:

这可能不是你的问题,但我的是same as this one——com.ibm.icu:icu4j 的旧版本。我通过更改构建配置以排除旧的传递依赖项并明确依赖于最新版本 (4.8) 解决了这个问题。

【讨论】:

    【解决方案3】:

    感谢James A Wilson for your answer - 按照您的建议更新 icu4j 对我有用,并允许我在 web.xml 中保留 version="3.0"(从长远来看,我更喜欢这样做)。

    icu4j 2.6.1 是版本不工作,升级到 NEXT 版本 3.4.4 将解决这个问题。我没有使用最新版本的 icu4j (49.1),因为它比 3.4.4 版本大 4MB。

    这是一个 Maven 配置 sn-p 用于锁定您的传递依赖版本(不添加显式依赖):

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.ibm.icu</groupId>
                <artifactId>icu4j</artifactId>
                <version>3.4.4</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    【讨论】:

      【解决方案4】:

      结果证明这是构建中包含的不兼容的 jasper jar,与 tomcat 7 中的 jasper.jar 冲突。

      【讨论】:

      • 正是我的问题,谢谢。我需要做的就是升级 Tomcat 7。
      【解决方案5】:

      我今天遇到了同样的问题。就我而言,依赖来自 com.google.code.findbugs:annotations:jar:1.3.8。这意味着这个库只在构建时使用,使用注释来关闭一些 findbug 警告。在这种情况下,无需更改版本,只需更改依赖范围而不在运行时获取库是安全的:

      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.ibm.icu</groupId>
                  <artifactId>icu4j</artifactId>
                  <scope>provided</scope>
              </dependency>
              ....
      

      【讨论】:

        【解决方案6】:

        我认为这是我自己解析 web.xml 文件的错误

        使用它对我有用...

        <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        

        <session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>

        注意 version="2.5" 与 web-app_3_0.xsd 架构的使用以及 session-config tracking-mode 的存在,这只是 3.0 规范的一部分,而不是 2.5 (AFAIK)

        【讨论】:

          【解决方案7】:

          我们已经开始遇到同样的错误,对我们的应用程序进行了微小的更改,而没有对 Java、Tomcat 或项目依赖项进行任何升级。我们有 icu4j 2.6.1

          在花费了相当多的时间并尝试将 icu4j 升级到各种新版本之后(我们注意到并发现 icu 版本从 4.8.x 到 49.x.x、50.x.x 等等,一定有人在构建4.9.0),我们发现了问题。

          我们的小改动提交了一个映射到休眠的新类(A 类)。 Hibernate 在我们启动 WAR 时进行初始化,并根据它们的映射检查持久对象。在我们的代码库中碰巧有另一个类,它是一个具有相同名称和相同包的枚举(B 类)。一旦我们修复了那个重复的类,问题就消失了。

          【讨论】:

            【解决方案8】:

            一周以来我遇到了同样的问题,只需用最新版本的 jar 替换 icu4j.2.1.jar 文件即可解决。

            【讨论】:

              【解决方案9】:

              在 2.6.1 版本中。 com.ibm.icu.impl.data.LocaleElements_zh__PINYIN.class 无效。唯一的解决方案是更新,其他解决方案只是变通方法。

              可以通过在您的项目中运行以下测试来检查它(前提是 icu-x.x.x.jar 在您的类路径中):

              @Test public void testValidityOfLocaleElements_zh__PINYINJar() throws ClassNotFoundException { getClass().forName("com.ibm.icu.impl.data.LocaleElements_zh__PINYIN"); }

              【讨论】:

                【解决方案10】:

                通过删除文件夹并重新下载jar解决

                【讨论】:

                  【解决方案11】:

                  这可能不是你的问题,但我的问题和这个问题一样——一个旧版本的 gson-2.8.5。我通过更改构建配置以排除旧的传递依赖项并明确依赖旧版本(2.8.5)解决了这个问题。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2014-06-22
                    • 2014-06-25
                    • 2014-12-25
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-07-25
                    • 1970-01-01
                    相关资源
                    最近更新 更多