Spring Boot useTestClasspath抛出CannotLoadBeanClassException和ClassNotFoundException

时间:2016-10-17 19:44:07

标签: spring-boot maven-plugin

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

所以,我的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>

我缺少什么?

1 个答案:

答案 0 :(得分:1)

即使useTestClasspath设置为true,Spring-boot maven插件也不会将当前模块的测试源(和资源)包含在类路径中。

我运行了一个带有详细日志记录(-X标志到Maven)的分叉执行,并且该插件列出了分叉的JVM类路径。不包括测试课程。

如果您查看插件more than just rectangle(撰写本文时的版本1.5.3),则标记useTestClasspath仅用于addDependencies方法。

我看到两个选项作为解决方法

  1. 在插件配置中使用<folders>

    <folders>
      <folder>${project.build.testOutputDirectory}</folder>
    </folders>
    

    这里的问题是文件夹被添加到类路径的开头,而测试文件最好是它。

  2. 使用测试类和资源创建另一个Maven模块,并将其添加为<scope>test</scope>依赖项。