Java8升级至Java18后部署服务器遇ValidationException问题求助
升级Java 18后部署服务器抛出
javax.validation.ValidationException问题排查 我正在将项目从Java 8升级到Java 18,同时升级了Apache Spark、Dropwizard、Hibernate、Swagger等一众库。本地应用可正常启动,但部署到服务器时无法启动,抛出javax.validation.ValidationException异常。
完整堆栈跟踪
javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:206) at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:94) at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getDefaultMessageInterpolator(AbstractConfigurationImpl.java:573) at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getDefaultMessageInterpolatorConfiguredWithClassLoader(AbstractConfigurationImpl.java:822) at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getMessageInterpolator(AbstractConfigurationImpl.java:483) at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:154) at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38) at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.buildValidatorFactory(AbstractConfigurationImpl.java:433) at io.dropwizard.jersey.validation.Validators.newValidatorFactory(Validators.java:26) at io.dropwizard.setup.Bootstrap.<init>(Bootstrap.java:67) at io.dropwizard.Application.run(Application.java:86) at com.company.Service.main(Service.java:554) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at javassist.Loader.run(Loader.java:328) at com.company.custom.metadata.ServiceRun.run(AServiceRun.java:148) at com.company.api.PartnerServiceRun.main(PartnerServiceRun.java:10)
已尝试的无效方案
方案1
添加以下依赖后问题仍存在:
'javax.el:javax.el-api:3.0.0', 'org.glassfish:javax.el:3.0.0',
方案2
更换为以下依赖后问题仍存在:
'javax.el:javax.el-api:3.0.1-b06', 'org.glassfish:javax.el:3.0.1-b08',
排查方向与解决建议
- 对比本地与服务器的依赖树:用
mvn dependency:tree生成依赖列表,检查服务器环境是否有EL相关依赖被排除,或存在旧版本EL jar包导致冲突。 - 直接指定ParameterMessageInterpolator:根据异常提示,绕过EL表达式工厂初始化。在Dropwizard中可通过自定义ValidatorFactory配置实现:
@Override public void initialize(Bootstrap<YourConfiguration> bootstrap) { Validators.newValidatorFactory(() -> { HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure(); config.messageInterpolator(new ParameterMessageInterpolator()); return config; }); // 其他初始化逻辑 } - 升级Hibernate Validator版本:确保使用的Hibernate Validator版本完全兼容Java 18,建议升级到最新稳定版(如6.2.x或7.x系列)。
- 检查服务器JDK完整性:确认服务器使用完整版本的Java 18,避免精简版JDK缺失EL相关模块。
- 排除冲突依赖:排查项目中其他依赖(如Spark、Swagger)是否间接引入旧版本EL库,在pom.xml中排除这些冲突依赖。
内容的提问来源于stack exchange,提问作者siva
相关产品推荐
相关产品推荐

