Tomcat ClassFormatException: Navigating Java 8 Compatibility Issues
Deploying web applications from Tomcat 7 with Java 7 to Tomcat 7 with Java 8 can occasionally trigger the following exception:
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
Understanding the Root Cause
While Tomcat 7 is compatible with Java 8, enabling annotation scanning (metadata-complete="true" in web.xml) introduces potential issues due to the limitations of the Byte Code Engineering Library (BCEL), which cannot fully process new Java 8 byte codes. This results in errors when Tomcat attempts to scan for annotations.
Potential Solutions
1. Disable Annotation Scanning (Not Recommended)
If you can avoid using annotation scanning, everything should function correctly. To disable it, set metadata-complete to "false" in your web.xml.
2. Update to Tomcat 7.0.53 or Later (Recommended)
Starting with Tomcat 7.0.53, the underlying compiler has been updated with improved Java 8 support, resolving most annotation scanning issues.
3. Exclude Specific JARs from Scanning (Intermediate Solution)
If you're unable to upgrade to Tomcat 7.0.53 but still require annotation scanning, you can try adding the following line to /etc/tomcat7/catalina.properties:
junit.jar,junit-*.jar,ant-launcher.jar,\ jfxrt.jar,nashorn.jar
This will instruct Tomcat to skip scanning these specific JARs for annotations, potentially resolving the issue.
The above is the detailed content of Tomcat ClassFormatException: How to Tackle Java 8 Compatibility Issues with Annotation Scanning?. For more information, please follow other related articles on the PHP Chinese website!