必须手动导入Spring-boot-test依赖项,尽管它们存在于Spring-boot-starter-parent中 - 为什么?

问题描述 投票:2回答:2

我正在运行一个带有spring-boot-starter依赖项的spring启动应用程序,如果我不导入以下测试依赖项,我在测试用例中面临编译错误

  • 弹簧启动测试
  • 弹簧试验
  • assertj核心

我的理解是这些已经存在于spring-boot-starter-parent中,我也可以看到它们。但是,由于编译时错误,我被迫将它们导入到pom.xml中,如下所示,但后来我收到了警告

为spring-boot-test复制托管版本1.5.6.RELEASE

复制托管版本4.3.10.RELEASE进行弹簧测试

并且类似于assertj-core

您可以在qomxswpoi中的pom.xml中查看警告发生的位置

我的pom.xml如下

enter image description here

如果我不包含测试依赖项,我的代码中出现编译错误的部分如下所示。如果不存在依赖项,则无法导入@SpringBootTest和TestRestTemplate。

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

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jdt.core.compiler</groupId>
        <artifactId>ecj</artifactId>
        <version>4.6.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.hateoas</groupId>
        <artifactId>spring-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <!-- <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency> -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
        <version>1.5.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.10.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.8.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>${json.version}</version>
    </dependency>

为什么会这样?

  1. 为什么必须手动将测试依赖项包含在pom.xml中,如果它们已经存在于spring-boot-starter-parent中
  2. 一旦包含,它将显示重复的托管版本警告(可能是正确的......)。

我可能正在做一些愚蠢/错误的事 - 请帮忙!

java spring maven spring-mvc pom.xml
2个回答
3
投票

正如你在pom中看到的那样:

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import com.fasterxml.jackson.core.JsonProcessingException;

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 
public class MatchControllerTest {

    // Test RestTemplate to invoke the APIs.
    @Autowired
    private TestRestTemplate testRestTemplate;
    //....and other part of the code

依赖关系在标签<dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.5.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <type>test-jar</type> <version>1.5.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> <version>1.5.6.RELEASE</version> </dependency> ... 下。这意味着,如果您在项目中需要它,您将获得版本<dependencyManagement>

所以你只需要添加

1.5.6.RELEASE

没有版本号,警告就会消失。


1
投票

将所有范围“test”替换为“compile”。

© www.soinside.com 2019 - 2024. All rights reserved.