java - 应用程序引擎 : jar in WEB-INF/lib but still getting java. lang.ClassNotFoundException

标签 java google-app-engine maven appengine-maven-plugin

在我的 App Engine 应用程序运行时,我收到以下异常:

java.lang.ExceptionInInitializerError
at
org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateExpression(ResourceBundleMessageInterpolator.java:227)

... (removed for brevity)

Caused by: java.lang.ClassNotFoundException: de.odysseus.el.ExpressionFactoryImpl

我在我的开发服务器上看到了这个错误,并通过在我的 pom.xml 中包含 juel-impl 来修复它

当我使用 appcfg.sh 从服务器拉取我的应用程序时,我看到它的 WEB-INF/lib 中包含 juel-impl-2.2.7-20130801.163115-1.jar

我真的不知道该怎么办。

最佳答案

更新:根据GAE issue tracker ,该问题已在 1.9.7 版本中修复。对于早期版本,请参阅下文。


Hibernate Validator 5.x 使用 Unified Expression Language 。特别是,它使用静态 API 方法来查找 ExpressionFactory 的实现。一个bug然而,在 App Engine 1.9.4 及更早版本中,似乎阻止仅在生产中使用任何表达式工厂实现。

在解决此问题之前,有两种解决方法:

  1. 如果您不需要 Bean Validation 1.1 功能,请回退到 Hibernate Validator 4.3.1.Final。我已经成功测试了这一点。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version>
    </dependency>
    
  2. 如果您需要 Bean Validation 1.1,已有 reports使其与 Apache BVal 的存储库快照一起工作。我还没有测试过。


更新说明:按照我之前的回复(Glassfish EL 或 JUEL)中所述指定表达式语言实现,在开发和某些生产用例中效果很好,但在某些验证中仍然会失败。

关于java - 应用程序引擎 : jar in WEB-INF/lib but still getting java. lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19216495/

相关文章:

java - Android- EXTRA_HEADERS 未反射(reflect)在更新的 Chrome 版本大于 83 中

java - 类型错误 : Cannot find function createHTMLDocument in object

java - 如何抽象出不在数据结构上的二分搜索?

java - TelephonyManager 无法在 android 中返回电话号码

google-app-engine - Google App Engine - 等待太久未能尝试处理您的请求后,请求被中止

java - 来自 Jenkins 的 Sonarqube 扫描 : ClassNotFoundException: org. eclipse.jgit.api.Git

java - 多模块 Spring Boot 和启动类

python - NotAllowedError create_login_url

java - 2 个 Google App Engine 数据存储更新

java - Maven,如何复制文件?