You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:05:28