0

我正在尝试对我在 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 中),应用程序(在 Eclipse 内部 Jetty 服务器上运行)尝试读取 META-INF/services/javax .validation.spi.ValidationProvider 资源来自类路径并返回为空。我绝对确定我放置的不同验证器实现(例如 hibernate-validator-4.3.0.Final.jar)具有该资源并且它确实包含一个值(例如 org.hibernate.validator.HibernateValidator),但不是出现在有问题的类加载器中。我在类路径中包含 JAR 的方式是将其添加到项目的构建路径中,这似乎在我执行应用程序时将其添加到 Jetty 运行时。

我的问题是:有没有办法在某个类加载器可见的 Eclipse 调试模式下查看类路径?其次,有谁知道为什么 Hibernate Validator 的资源不是首先在 Validation 使用的类加载器中?

4

1 回答 1

1

webapp 类路径由目录 WEB-INF/classes 和 WEB-INF/lib 中的所有 jar 组成。如果您希望 jar 在运行时可用,则不能将其添加到构建路径,而是添加到 WEB-INF/lib。

在 Eclipse 的 WebContent/WEB-INF/lib 中放置一个 jar 将使其自动成为 webapp 的 buid 路径的一部分,并在运行时可用。

于 2013-01-06T17:37:49.050 回答