Spring Boot示例:无法启动嵌入式容器错误

4

我是Spring的新手,于是我从Spring Initializr下载了适用于Maven-Web Java 1.8演示的JAR包。然后我解压并将其导入到STS中运行main()文件,但出现了以下异常。请问有人知道解决方法吗?

我在网上尝试了一些解决方案,但都没有成功: - 尝试向pom.xml添加Hibernate-validator依赖 - 尝试向pom.xml添加spring-boot-starter-tomcat依赖

堆栈跟踪:

2017-01-26 12:19:32.587  INFO 3816 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@2e4b8173: startup date [Thu Jan 26 12:19:32 EST 2017]; root of context hierarchy
2017-01-26 12:19:36.442  WARN 3816 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tomcatEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.http.encoding-org.springframework.boot.autoconfigure.web.HttpEncodingProperties': Initialization of bean failed; nested exception is javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
2017-01-26 12:19:36.454 ERROR 3816 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The Bean Validation API is on the classpath but no implementation could be found

Action:

Add an implementation, such as Hibernate Validator, to the classpath

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

应用程序文件:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Hibernate Validator 应该由 spring-boot-starter-web 传递提供。我猜想在 Maven 下载时可能出现了损坏的 jar 包。尝试清除 Maven 的缓存,然后重新构建您的应用程序。 - Andy Wilkinson
感谢@AndyWilkinson。我尝试使用maven clean重新构建,但结果相同。然后我从.m2文件夹中删除了所有文件夹(因为我长时间使用maven,所以有很多文件夹),然后重新运行项目,它就可以工作了。我猜问题可能与现有的jar版本有关。 - Anusha Kota
我还必须清除所有内容并重新开始。仅在pom文件中添加所需的依赖项没有任何作用。 - James
我曾经遇到过同样的问题,你可以尝试这个this - Rayon
5个回答

8

我遇到了Spring Boot版本1.5.9的相同问题。为了补充Jim Kiley的答案,您应该在Maven pom.xml中添加以下内容:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.3.6.Final</version>
</dependency>

您可以在Spring Boot pom.xml文件的properties部分中使用依赖版本(spring-boot-dependencies-1.5.9.RELEASE.pom):
<hibernate-validator.version>5.3.6.Final</hibernate-validator.version>

位于以下路径:

/.m2/repository/org/springframework/boot/spring-boot-dependencies/1.5.9.RELEASE/spring-boot-dependencies-1.5.9.RELEASE.pom

这是我问题的正确解释和答案。:+1: - LAMRIN TAWSRAS

3

正如输出所示,您需要:

添加一个实现,例如Hibernate Validator,到类路径中

由于您使用的是Maven,这意味着您需要将Hibernate Validator添加到您的pom.xml依赖项中。


3
首先,你的pom.xml设置是正确的。spring-boot-starter-web已经依赖于hibernate-validator。因此在你的项目中,你不需要指定对hibernate-validator的依赖。否则,使用maven的目的是什么呢?
所以回到问题解决上来,我解决问题的步骤如下:
  1. 进入包含 pom.xml 文件的项目文件夹。
  2. 运行mvn verify命令。 该命令将重新从存储库下载缺失的jar包,并检查本地Maven存储库中的jar包是否正确(损坏或未损坏)。

    如果你看到以下类似的警告消息:

    [WARNING] error reading /home/vagrant/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.6/tomcat-embed-core-8.5.6.jar; invalid LOC header (bad signature)

    [WARNING] error reading /home/vagrant/.m2/repository/org/hibernate/hibernate-validator/5.2.4.Final/hibernate-validator-5.2.4.Final.jar; invalid LOC header (bad signature)

    [WARNING] error reading /home/vagrant/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.8.4/jackson-core-2.8.4.jar; invalid LOC header (bad signature)

    那么这意味着Maven先前下载的jar包已经损坏。

  3. 为了修复此问题,请删除那些损坏的jar包,然后再次运行mvn verify以重新下载它们,并确保没有jar包警告。

  4. 回到你的IDE(STS或Eclipse),更新你的项目并再次运行应用程序。
在上述错误中,hibernate-validator-5.2.4.Final.jar就是出现问题的Hibernate验证器。

0
我在运行应用程序时遇到了相同的问题,并通过删除.m2文件夹来解决了该问题。
.m2/repository

0

我遇到了同样的问题,通过删除.m2文件夹下的这两个文件夹来解决它:

  • com\fasterxml --> 删除该文件夹将解决TypeResovler问题。
  • org\springframework --> 删除该文件夹将解决缺少验证器的问题。

然后程序就可以正常运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接