2017-08-11 100 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

相關問題