Let's take a closer look at the problem class.
org.apache.jasper.runtime.JspRuntimeLibrary.releaseTag(javax.servlet.jsp.tagext.Tag, org.apache.tomcat.InstanceManager, boolean)
What exists in the jars for this class?
[jetty-home-12.0.21]$ javap -cp lib/ee8-apache-jsp/org.mortbay.jasper.apache-jsp-9.0.96.jar org.apache.jasper.runtime.JspRuntimeLibrary | grep release
public static void releaseTag(javax.servlet.jsp.tagext.Tag, org.apache.tomcat.InstanceManager);
Ah, there's no method releaseTag with a final boolean parameter.
When did that get removed from Apache JSP?
Looks like that specific method was removed Sep 24, 2024
A change that is present in Apache Jasper 9.0.96
Looks like your precompiled JSP is now incompatible with the Apache Jasper 9.0.96 library now.
But there's been several updates to Apache Jasper since, so let's try a newer version ...
# Create a new empty jetty.base directory to test with
[bases]$ mkdir jsp-12-ee8
[bases]$ cd jsp-12-ee8
# Initialize directory with ee8 jsp modules
[jsp-12-ee8]$ java -jar ../../jetty-home-12.0.21/start.jar --add-modules=http,ee8-deploy,ee8-webapp,ee8-jsp
INFO : mkdir ${jetty.base}/start.d
...(snip)...
INFO : Base directory was modified
# Lets configure it to use release 9.0.102 instead.
[joakim@hyperion jsp-12-ee8]$ gvim start.d/ee8-jsp.ini
[joakim@hyperion jsp-12-ee8]$ grep impl start.d/ee8-jsp.ini
ee8.jsp.impl.version=9.0.102
# Download the release 9.0.102 into place.
# Test if the configuration is using these new 9.0.102 releases.
# Does this new 9.0.102 release have the method you need?
$ javap -cp lib/ee8-apache-jsp/org.mortbay.jasper.apache-jsp-9.0.102.jar org.apache.jasper.runtime.JspRuntimeLibrary | grep release
public static void releaseTag(javax.servlet.jsp.tagext.Tag, org.apache.tomcat.InstanceManager, boolean);
public static void releaseTag(javax.servlet.jsp.tagext.Tag, org.apache.tomcat.InstanceManager);
Yes! that method was restored.
This should help you get going again.
Meanwhile, I've got a PR started for upgrading that dependency in Jetty.
- Joakim