使用Spring启动和Jetty的ValidationException

时间:2016-08-09 07:43:45

标签: spring-boot

我使用以下配置设置了一个spring boot应用程序(1.4.0.RELEASE)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

正如预期的那样,这与嵌入式Tomcat一起运行。然后我想到尝试使用Jetty服务器,并按照文档中提到的步骤进行操作: Using Jetty instead of Tomcat

基本上排除Tomcat并为Jetty添加依赖关系。从命令行运行mvn clean install或运行main方法会导致以下异常:

  

引起:javax.validation.ValidationException:HV000183:无法执行   加载'javax.el.E​​xpressionFactory'。检查你是否有EL   依赖于类路径,或使用ParameterMessageInterpolator   代替

我可以通过在pom.xml中添加以下依赖项来解决这个问题:

<dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
</dependency>

我不是直接使用任何与验证相关的代码,但我怀疑这是从弹簧启动jpa启动器中拉出来的,它引入了Hibernate。我在这里也看到了围绕这个问题的讨论:Similar issue

问题:

1)这是正确的解决方法吗?

2)如果是正确的修复,是否应更新文档以添加此依赖项?

1 个答案:

答案 0 :(得分:0)

使用javax.el依赖项是正确的。当JPA按照你的说法引入Hibernate时,它将使用Hibernate Validator。它被指定为here。这是正确的解决方案。至于文档,我个人会提出它,但我怀疑不是每个人都会遇到同样的问题。我仍然可以毫无错误地运行我的mvn clean install但是如果我运行mvn spring-boot:run它会启动并直接关闭。