gpt4 book ai didi

spring-boot - Spring Boot useTestClasspath 抛出 CannotLoadBeanClassException 和 ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-04 21:35:11 25 4
gpt4 key购买 nike

我有一个 Maven 项目,其测试类位于 src/test/java/MyDevClass仅用于开发/测试目的。我想在启动时使用它spring-boot-maven-plugin使用命令行 mvn spring-boot:run .

所以,我的pom.xml包含:

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- TODO: Will create a maven profile and have useTestClasspath only for development/testing -->
<useTestClasspath>true</useTestClasspath>
</configuration>
</plugin>
</plugins>
</build>

但是,我收到以下错误:
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [MyDevClass]
Caused by: java.lang.ClassNotFoundException: MyDevClass

有趣的是,我有另一个项目使用 tomcat7-maven-plugin它工作正常:
        <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<useTestClasspath>true</useTestClasspath>
</configuration>
</plugin>

我错过了什么?

最佳答案

Spring-boot maven 插件不包含当前模块的测试源(和资源)到类路径中,即使 useTestClasspath设置为真。
我使用详细日志记录(-X 标记到 Maven)运行了 fork 执行,插件列出了 fork 的 JVM 类路径。不包括测试类。
如果您查看插件 sources (撰写本文时版本 1.5.3),标志 useTestClasspath仅用于 addDependencies方法。
我看到两个选项作为解决方法

  • 添加 target/test-classes运行类路径的目录:
    <directories>
    <directory>${project.build.testOutputDirectory}</directory>
    </directories>
    对于较旧的插件版本,请使用:
    <folders>
    <folder>${project.build.testOutputDirectory}</folder>
    </folders>
    这里的问题是该文件夹被添加到类路径的开头,而测试文件最好在其末尾。
  • 使用测试类和资源创建另一个 Maven 模块,并将其添加为 <scope>test</scope>依赖。
  • 关于spring-boot - Spring Boot useTestClasspath 抛出 CannotLoadBeanClassException 和 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094423/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com