ホームページ  >  記事  >  Java  >  Java 8 を搭載した Tomcat 7 で「定数プール内のバイト タグが無効です: 15」という例外が発生するのはなぜですか?

Java 8 を搭載した Tomcat 7 で「定数プール内のバイト タグが無効です: 15」という例外が発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 08:40:03930ブラウズ

Why am I Getting

Java 8 を使用した Tomcat 7 での「定数プールの無効なバイト タグ: 15」例外

Tomcat 7 は Java 8 と正式に互換性があります。ただし、Web アプリケーションを Java 6 を使用した Tomcat 7 から Java 8 を使用した別の Tomcat 7 サーバーに移行する場合、ユーザーは次の例外に遭遇する可能性があります:

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15

考えられる原因

この例外は、Java 8 を使用した Tomcat 7 の BCEL (バイト コード エンジニアリング ライブラリ) の問題が原因で発生します。BCEL は、特に注釈スキャンが有効になっている場合 (web.xml でmetadata-complete="true") に、新しい Java 8 バイト コードの処理に問題が発生します。 ).

解決策

注釈スキャンなし:

注釈スキャンが利用されていない場合、問題は次の方法で解決できます。 Tomcat 7 をリリース 7.0.53 以降に更新すると、Java 8 サポートが強化された更新されたコンパイラが含まれます。

注釈スキャン:

注釈スキャンが有効になっている場合、 2 つの選択肢があります:

  • 問題ライブラリを除外する: 次の行を /etc/tomcat7/catalina.properties に追加します:
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar

This指定されたライブラリのスキャンをスキップするように Tomcat に指示します。

  • 注釈スキャンを無効にする: 注釈スキャンを無効にするには、web.xml から「metadata-complete="true"」を削除します。

追加メモ:

  • この特定の問題は、Oracle JDK 8_25 を搭載した Debian 7.6 上の Tomcat 7.0.28 で発生しました。
  • Tomcat 7 は Java 8 と互換性があるという回答」は引き続き有効です。ただし、注釈スキャンが有効になっている場合、BCEL の問題が発生する可能性があります。

以上がJava 8 を搭載した Tomcat 7 で「定数プール内のバイト タグが無効です: 15」という例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。