Spring 部署在 Tomcat8 上的引导 MVC 应用程序 war 文件失败 java.lang.TypeNotPresentException

Spring Boot MVC application war file deployed on Tomcat8 failing with java.lang.TypeNotPresentException

我用 Spring Boot 写了一个 REST API 并将其打包为 WAR 文件。我将 WAR 复制到 Tomcat 8 的 webapps 文件夹并启动了 tomcat 服务。服务器启动时,它抛出一些由以下原因引起的异常:

java.lang.TypeNotPresentException: Type org.springframework.test.context.ContextConfiguration not present

我稍微解决了这个问题,发现如果我将 Web 应用程序库中的 JAR 文件和库提供的文件夹移动到 Tomcat8/lib 文件夹,则不会抛出任何异常并且 API 按预期工作。我不知道是什么导致了这个问题。我对我的 pom.xml 有一些依赖,它们的范围是 provided。也许他们是我的问题。

这是我的 pom:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
</parent>

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

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.pp</groupId>
        <artifactId>DAO-Commons</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.pp</groupId>
        <artifactId>carddao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.pp</groupId>
        <artifactId>cardtemplatedao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.pp</groupId>
        <artifactId>cardlibrarydao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </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>

看看maven docs - dependency mechanism

尝试删除提供的范围!它们将在您的 war.

中的 WEB-INF/lib 目录中提供