2017-08-11 46 views
1

我正在用弹簧引导启动依赖弹簧启动应用程序,现在面临在我的测试案例编译错误,如果我不导入下面的测试依赖尽管Spring-boot-starter-parent中存在Spring-boot-test依赖关系,但它们必须手动导入 - 为什么?

  • 春天开机测试
  • 弹簧试验
  • assertj核心

我的理解是,这是目前已经在春天开机起动父母,我可以看到他们。然而,由于编译时错误,我不得不将其导入的pom.xml如下,但后来我得到警告,

仿型托管版本1.5.6.RELEASE春天开机测试

仿型托管版本4.3.10.RELEASE春季测试

和similiarly为assertj核心

你能看到的警告发生在这里的pom.xml 的地方

我的pom.xml的就是如果我不包括在测试的依赖性发生编译错误低于如下我的代码

<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> 

零件。如果依赖关系不存在,则不能导入@SpringBootTest和TestRestTemplate。

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 

为什么会发生这种情况?

  1. 为什么是具有手动包括在pom.xml如果它们已经存在于所述弹簧引导起动父测试依赖
  2. 一旦包括在内,它示出了duplcating管理版本警告(大概是这样的......)。

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

+0

可能是坛子wouldnt已经正确下载,做mvn干净安装或去下maven存储库(.m2)文件夹,看看是否有任何问题与下载的jar。简单地删除和右键项目 - > Maven - >>更新项目。 – Barath

回答

3

正如你可以在POM看到:

<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

所以,你只需要增加

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

没有版本号和警告应该消失。

+0

完美。正如我怀疑我的依赖管理概念不明确。这可能会帮助像我这样的人。 https://stackoverflow.com/questions/2619598/differences-between-dependencymanagement-and-dependencies-in-maven – HopeKing

相关问题