「定数プール内のバイト タグが無効です: 15」 - Java 8 で実行すると Tomcat 7 がこのエラーをスローするのはなぜですか?

Linda Hamilton
リリース: 2024-11-04 13:07:30
オリジナル
1068 人が閲覧しました

定数プール内のバイト タグが無効です: Java 8 での Tomcat の問題

「定数プール内のバイト タグが無効です: 15」エラーが発生しましたTomcat 7 から Java 8 を搭載した Tomcat 7 を実行している別のサーバーに Web アプリを移植しようとするとどうなりますか?この記事では、この問題について詳しく説明し、解決策を示します。

問題の説明:

Tomcat を起動すると、ログ catalina.out に示されているように、アプリケーションでエラーが発生する場合があります。

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
ログイン後にコピー

考えられる原因:

Java 8 で導入された新しいバイト コードが原因でエラーが発生しますが、Tomcat 7 で使用されるクラス解析ライブラリである BCEL では使用できない可能性があります。

解決策:

公式解決策:

Tomcat のドキュメントによると、Java 上で Tomcat 7 を実行しています。 8 は正常に動作するはずです。

注釈スキャンの問題:

ただし、Web アプリケーションの web.xml ファイルで注釈スキャンが有効になっている場合、BCEL の機能不全により問題が表面化する可能性があります。 Java 8 バイト コードを処理します。そのような場合、以下のような例外が表示されることがあります:

SEVERE: Unable to process Jar entry [jdk/nashorn/internal/objects/NativeString.class] from Jar [jar:file:/usr/lib/jvm/jdk1.8.0_5/jre/lib/ext/nashorn.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
ログイン後にコピー

注釈スキャンの解決策:

  1. 注釈スキャンを無効にする: 注釈スキャンを有効にしないようにします (web.xml でmetadata-complete="true" を false に設定します)。これにより、Tomcat 7 が正常に機能できるようになります。ただし、この解決策では Web アプリでの注釈のスキャンが無効になります。
  2. Tomcat を更新します: Java 8 をより適切にサポートするように更新されたコンパイラが含まれる Tomcat 7.0.53 以降にアップグレードします。
  3. 問題のある Jar を除外する: アノテーション スキャンを使用する必要があり、コードが Java 8 ベースではない場合は、次の行を /etc/tomcat7/catalina.properties に追加します:
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar
ログイン後にコピー

この変更により、Tomcat は注釈スキャン中に問題のある jar をスキップします。

以上が「定数プール内のバイト タグが無効です: 15」 - Java 8 で実行すると Tomcat 7 がこのエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート