我正在尝试对我在Eclipse中编写的基于GWT的应用程序进行故障排除。它目前在后端使用Spring Framework 3.1.1和Hibernate 4.1.6。我目前遇到了可怕的“javax.validation.ValidationException:无法找到默认提供商”的麻烦,这似乎困扰了很多人,但是由不同的问题引起。我已经尝试了使用不同版本的JSR 303实现的各种解决方案(例如,Hibernate Validator的差异版本)但它似乎没有什么区别。
调试后,我明白为什么。一旦执行到javax.validation.Validation.getValidationProviders():317(在validation-api-1.0.0.GA中),app(在Eclipse内部Jetty服务器上运行)尝试读取META-INF / services / javax来自类路径的.validation.spi.ValidationProvider资源并返回空。我绝对肯定我放置的不同验证器实现(例如hibernate-validator-4.3.0.Final.jar)具有该资源并且它确实包含一个值(例如org.hibernate.validator.HibernateValidator),但不是出现在有问题的类加载器中。我在类路径中包含JAR的方法是将它添加到项目的Build Path中,当我执行应用程序时,它似乎将它添加到Jetty运行时。
我的问题是:有没有办法在Eclipse调试模式下查看某个类加载器可见的类路径?其次,有没有人知道为什么Hibernate Validator的资源不是首先在Validation使用的类加载器中?
答案 0 :(得分:1)
webapp类路径由WEB-INF / classes目录和WEB-INF / lib中的所有jar组成。如果您希望jar在运行时可用,则不得将其添加到构建路径,而是添加到WEB-INF / lib。
在Eclipse中的WebContent / WEB-INF / lib中删除jar会使其自动成为webapp的buid路径的一部分,并在运行时可用。