App Engine:WEB-INF / lib中的jar,但仍然得到java.lang.ClassNotFoundException

时间:2013-10-07 03:07:07

标签: 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

我真的不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

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


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

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

  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的存储库快照。我没有测试过这个。


  3. 更新说明:如我之前的回复(Glassfish EL或JUEL)中所述,指定表达式语言实现在开发和某些生产用例中工作正常,但仍会因某些验证而失败。

答案 1 :(得分:0)

我遇到了同样的问题。 它有助于使用hibernate-validator 4.3.1.Final而不是5.0.1.Final。 参考:stackoverflow(avidD-s回答)