Jfinal是否支持JDK21

java.lang.NoClassDefFoundError: java/lang/Compiler

at com.jfinal.template.expr.ast.MethodKit.<clinit>(MethodKit.java:48)

at com.jfinal.template.expr.ast.SharedMethodKit.addSharedMethod(SharedMethodKit.java:123)

at com.jfinal.template.expr.ast.SharedMethodKit.addSharedMethod(SharedMethodKit.java:79)

at com.jfinal.template.EngineConfig.addSharedMethod(EngineConfig.java:390)

at com.jfinal.template.EngineConfig.<init>(EngineConfig.java:93)

at com.jfinal.template.Engine.<init>(Engine.java:62)

at com.jfinal.template.Engine.<clinit>(Engine.java:55)

at com.jfinal.core.Config.<clinit>(Config.java:37)

at com.jfinal.core.JFinal.init(JFinal.java:61)

at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:64)

at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:270)

at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)

at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)

at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4533)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)

at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1728)

at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)

at java.base/java.lang.reflect.Method.invoke(Method.java:580)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:803)

at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:456)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:405)

at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)

at java.base/java.lang.reflect.Method.invoke(Method.java:580)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:803)

at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802)

at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:472)

at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472)

at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310)

at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)

at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1412)

at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)

at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)

at java.base/java.lang.reflect.Method.invoke(Method.java:580)

at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)

at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)

at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)

at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)

at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)

at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)

at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)

at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)

at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)

at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)

at java.base/java.lang.Thread.run(Thread.java:1583)

Caused by: java.lang.ClassNotFoundException: java.lang.Compiler

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)

... 53 more


评论区

JFinal

2026-01-04 15:38

支持,需要使用 JDK 而不是 JRE。

上面的异常也可以通过下面的配置来解决:
Engine.setFastMode(false);

旅途

2026-01-04 18:07

@JFinal com.jfinal.template.expr.ast.MethodKit中的静态代码块使用了Compiler.class,导致异常

JFinal

2026-01-04 18:18

JDK 中才有 Compiler, 配置 Engine.setFastMode(false) 不再依赖 JDK 中的 Compiler

热门反馈

扫码入社