SpringApplicationConfiguration未找到:spring-boot-starter-test的内容错误?

31

在Maven中遇到编译错误:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/prototypes/demo-sse-spring-boot-master/src/test/java/com/cedric/demo/sse/SseDemoApplicationTests.java:[6,37] package org.springframework.boot.test does not exist
[ERROR] /C:/TITAN/demo-sse-spring-boot-master/src/test/java/com/cedric/demo/sse/SseDemoApplicationTests.java:[10,2] cannot find symbol
  symbol: class SpringApplicationConfiguration
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Maven仓库似乎已经有这个jar包:

enter image description here

然而这个jar包里并没有任何编译好的类,只有META-INF目录:

enter image description here

这是设计上的问题吗?我该从哪里获取包含 SpringApplicationConfiguration 类的jar包以让Maven正常工作?

这是我的pom.xml文件的相关部分:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </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-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <dependency>
            <groupId>org.webjars.bower</groupId>
            <artifactId>jquery</artifactId>
            <version>2.1.3</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
3个回答

102

在您的发布版本中,@SpringApplicationConfiguration 注解已不再存在。新注解如下:

@RunWith(SpringRunner.class)

@SpringBootTest(classes = YourApplicationMainClass.class)

@WebAppConfiguration

1
这应该是被选中的答案。 - webDeveloper

25

spring-boot-starter-test与其他Spring Boot的启动器一样,实际上只是一个POM文件,可以传递引入一些其他依赖项。它只有一个JAR文件,以确保一些构建系统不会因为只有POM依赖而出现问题。

看起来您已经将应用程序从Spring Boot 1.4升级到Spring Boot 1.5。 Spring Boot 1.5删除了在1.4中被弃用的许多类,包括org.springframework.boot.test.SpringApplicationConfiguration

我建议先回退到Spring Boot 1.4.4.RELEASE版本并修复所有弃用警告。然后您应该能够轻松升级到Spring Boot 1.5.1.RELEASE。


1
是的,那个技巧对我有用,谢谢。你能指导我一个全面的描述,说明这个Maven设置是如何工作的,使其能够拉取依赖项而无需列出它们,我不太清楚为什么1.5.1.RELEASE不能做到这一点,是否是在该版本上做出决定,停止支持弃用的项目?再次感谢。 - Simeon Leyzerzon

23

由于Spring Boot从1.4升级到1.5引起的错误,需要注意(如下所示),在1.4中引入了若干新类,使得一些现有类被弃用,最终在1.5中被删除。详见:Spring Boot发行说明

摘自网站(已编辑):

此外,Spring Boot 1.4(及以上版本)试图理性化和简化可以运行Spring Boot测试的各种方式。你应该迁移到使用新的@SpringBootTest注解的以下内容:

@SpringApplicationConfiguration(classes=MyConfig.class)@SpringBootTest(classes=MyConfig.class)

@ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)@SpringBootTest(classes=MyConfig.class)

@IntegrationTest@SpringBootTest(webEnvironment=WebEnvironment.NONE)

@IntegrationTest@WebAppConfiguration@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT) (或 RANDOM_PORT)

@WebIntegrationTest@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT) (或 RANDOM_PORT)

提示:迁移测试时,您可能还想将任何@RunWith(SpringJUnit4ClassRunner.class)声明替换为更易读的Spring 4.3的@RunWith(SpringRunner.class)


1
相应地,早期版本中的 @SpringBootTest(classes = YourApplicationMainClass.class)@WebIntegrationTest 一起转化为一个语句 @SpringBootTest(classes = YourApplicationMainClass.class, webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT) - VanagaS

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