web-dev-qa-db-ja.com

org.Apache.Tomcat.util.bcel.classfile.ClassFormatException:定数プール内の無効なバイトタグ:15-Tomcat 7、JDKの非互換性?

Java 8にアップグレードしようとしました。Tomcat7サーバーを起動するときに、Java 7-compiled .warファイルを使用すると、以下のミステリアスなエラーが発生します。

これが機能すると期待すべきですか?この post は、Tomcat 7が1.6以降で動作することを示しています。 Tomcatのせいなのか、それとも.warなのかわかりません。別のJava私が得るバージョンを切り替える:

  • JDK 7.45がインストール済み-動作します(.warのコンパイルに使用されたのと同じバージョン)
  • JDK 7.55がインストールされています-以下のように失敗します
  • JDK 8.05がインストールされています-以下のように失敗します

Tomcatのせいですか、それとも.warですか?

Caused by: org.Apache.Tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
        at org.Apache.Tomcat.util.bcel.classfile.Constant.readConstant(Constant.Java:131)
        at org.Apache.Tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.Java:60)
        at org.Apache.Tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.Java:209)
        at org.Apache.Tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.Java:119)
        at org.Apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.Java:2032)
        at org.Apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.Java:1923)
        at org.Apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.Java:1891)
        at org.Apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.Java:1877)
        at org.Apache.catalina.startup.ContextConfig.webConfig(ContextConfig.Java:1270)
        at org.Apache.catalina.startup.ContextConfig.configureStart(ContextConfig.Java:855)
        at org.Apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.Java:345)
        at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:119)
        at org.Apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.Java:90)
        at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5161)
        at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
24
user48956

Tomcat 7.0.26でこのエラーが発生していました。

あなたの質問に答えるために、Tomcatは非難することです: https://issues.Apache.org/bugzilla/show_bug.cgi?id=53735

バージョン7.0.53へのアップグレードで修正されました(リンクされた問題によると、修正は7.0.30以降にあるはずです)。

30
Bernie

私のコンピューターにはJava 8がありましたが、run my Tomcat using Java 7

次のソリューションは私のために働いた。

In %CATALINA_HOME%\bin\(例:C:\ Tomcat\bin)add setenv.bat次の内容を持ちます:

@echo off
set Java_HOME=C:\Program Files\Java\jdk1.7.0_03
set JRE_HOME=%Java_HOME%\jre
exit /B 0

startup.batを実行すると、次の呼び出しが発生します。

startup.bat
     |
     └── catalina.bat
               |
               └── setenv.bat
  • 見る:

    if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
    call "%CATALINA_BASE%\bin\setenv.bat"
    
0

私もこの問題に直面しました。エラーを追跡したところ、ICU4J jarのMaven依存関係を最新バージョンにアップグレードする必要があることがわかりました。

そして今、エラーはなくなりました:

  <dependency>
     <groupId>com.ibm.icu</groupId>
     <artifactId>icu4j</artifactId>
     <version>56.1</version>
  </dependency>
0
Jeet