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

吴先生

2026-01-30 20:46

@JFinal 波总,什么时候能支持Jakarta EE,想用 Tomcat 11

JFinal

2026-01-30 22:02

@吴先生 我这都要去除 Jakarta EE 了

halason

2026-02-07 10:05

@JFinal 最近undertow的javeee都爆出漏洞,不升级Jakarta EE难以解决漏洞

JFinal

2026-02-07 21:48

@halason undertow 已升级,升一下 jfinal undertow 到 3.9

halason

2026-02-08 11:59

@JFinal https://mvnrepository.com/artifact/io.undertow/undertow-core/2.2.39.Final 这个链接本身说明 undertow 的undertow 2.2.39还是有漏洞,最新版的是基于Jakarta EE有解决这个漏洞

JFinal

2026-02-08 19:49

@halason 过几天 undertow 的 2.2.40.Final 会修复,到时候我升个级

热门反馈

扫码入社