我使用以下配置设置了一个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.ExpressionFactory'。检查你是否有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)如果是正确的修复,是否应更新文档以添加此依赖项?
答案 0 :(得分:0)
使用javax.el
依赖项是正确的。当JPA按照你的说法引入Hibernate时,它将使用Hibernate Validator。它被指定为here。这是正确的解决方案。至于文档,我个人会提出它,但我怀疑不是每个人都会遇到同样的问题。我仍然可以毫无错误地运行我的mvn clean install
但是如果我运行mvn spring-boot:run
它会启动并直接关闭。