2017-02-23 120 views
0

Недавно я добавил весенний облачный контракт к нашему весеннему проекту, следуя инструкциям на их сайте для обучения здесь (https://cloud.spring.io/spring-cloud-contract/#quick-start).Проблемы с компиляцией Spring Cloud при использовании maven

Мне удалось написать контракты, сгенерировать заглушки, и все работает так, как ожидалось, но у меня возникла проблема при работе с чистым проектом после вытаскивания его из нашего хранилища. Когда я пропускаю mvn test, я получаю ошибки компиляции в сгенерированном тестовом классе, потому что кажется, что сам проект не строился раньше, поэтому базовый класс для контрактных тестов на сайте производителя пока еще не существует.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project kongo-shoppingcart-service: Compilation failure: Compilation failure: [ERROR] [...]/src/kongo-service-shoppingcart/kongo-shoppingcart-service/target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java:[7,64] package edu.hm.ba.kongo.shop.shoppingcart.service.test.contracts does not exist [ERROR] [...]/src/kongo-service-shoppingcart/kongo-shoppingcart-service/target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java:[14,43] cannot find symbol [ERROR] symbol: class ContractTestBase

Мои ПОМ проекты выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<parent> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-parent</artifactId> 
    <version>Brixton.M5</version> 
    <relativePath/> 
</parent> 

<groupId>edu.hm.ba.kongo.shop</groupId> 
<artifactId>kongo-shoppingcart-service</artifactId> 
<name>kongo :: shoppingcart :: service</name> 
<version>1.0</version> 

<properties> 
    <java.version>1.8</java.version> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
</properties> 

<dependencies> 
    <!-- Spring Boot --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </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-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.plugin</groupId> 
     <artifactId>spring-plugin-core</artifactId> 
    </dependency> 
    <!-- Spring Boot --> 

    <!-- Spring Data --> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-rest-hal-browser</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.hateoas</groupId> 
     <artifactId>spring-hateoas</artifactId> 
    </dependency> 
    <!-- Spring Data --> 

    <!-- Spring Cloud --> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-eureka</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-config</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-ribbon</artifactId> 
    </dependency> 
    <!-- Spring Cloud --> 

    <!-- json usw. --> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-jsr310</artifactId> 
     <version>2.7.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.jayway.jsonpath</groupId> 
     <artifactId>json-path</artifactId> 
    </dependency> 
    <!-- json usw. --> 

    <!-- Datenbank --> 
    <dependency> 
     <groupId>org.flywaydb</groupId> 
     <artifactId>flyway-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-search-orm</artifactId> 
     <version>5.3.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
    </dependency> 
    <!-- Datenbank --> 

    <!-- Validation --> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.3.1.Final</version> 
    </dependency> 
    <!-- Validation --> 

    <!-- Other --> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>18.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
    </dependency> 
    <!-- test --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.assertj</groupId> 
     <artifactId>assertj-core</artifactId> 
     <version>3.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-contract-verifier</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- internal --> 
    <dependency> 
     <groupId>de.muenchen</groupId> 
     <artifactId>Service-Lib</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>de.muenchen</groupId> 
     <artifactId>Auditing</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 


<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-contract-dependencies</artifactId> 
      <version>1.0.3.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <artifactId>spring-data-rest-webmvc</artifactId> 
      <groupId>org.springframework.data</groupId> 
      <version>2.5.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <artifactId>spring-data-rest-core</artifactId> 
      <groupId>org.springframework.data</groupId> 
      <version>2.5.0.RELEASE</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${basedir}/target/</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/docker</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
       <plugin> 
        <groupId>com.spotify</groupId> 
        <artifactId>docker-maven-plugin</artifactId> 
        <version>0.4.13</version> 
        <configuration> 
         <imageName>${project.artifactId}</imageName> 
         <dockerDirectory>target</dockerDirectory> 
         <resources> 
          <resource> 
           <targetPath>/</targetPath> 
           <directory>${project.build.directory}</directory> 
           <include>${project.build.finalName}.jar</include> 
          </resource> 
         </resources> 
        </configuration> 
        <!-- Uncomment if you want to build a new image for every 'mvn package' 
        <executions> 
         <execution> 
          <id>build-image</id> 
          <phase>package</phase> 
          <goals> 
           <goal>build</goal> 
          </goals> 
         </execution> 
        </executions> 
        --> 
       </plugin> 
     <plugin> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-contract-maven-plugin</artifactId> 
      <version>1.0.3.RELEASE</version> 
      <!-- Don't forget about this value !! --> 
      <extensions>true</extensions> 
      <configuration> 
       <baseClassForTests>edu.hm.ba.kongo.shop.shoppingcart.service.test.contracts.ContractTestBase</baseClassForTests> 
       <contractsDirectory>src/main/test/edu/hm/ba/kongo/shop/shoppingcart/service/test/contracts</contractsDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<repositories> 
    <repository> 
     <id>spring-milestones</id> 
     <name>Spring Milestones</name> 
     <url>http://repo.spring.io/milestone</url> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories> 

Но когда я скомпилировать модуль вручную и запустить mvn test послесловия все работает так, как ожидалось. Что-то не так с объявлением моего POM?

ответ

2

По какой-то причине ваш проект не может видеть ваш базовый тестовый класс. Это не на пути к классам. Вы уверены, что разместили его в правильной папке? Вам нужно будет показать структуру папок. Также вы можете посмотреть https://github.com/spring-cloud-samples/spring-cloud-contract-samples и сделать аналогичным. BTW src/main/test выглядит очень плохо, поэтому, скорее всего, ваша настройка проекта неверна. Я бы предложил сохранить контракты и базовые классы под src/test/resources и src/test/java соответственно

+0

Большое спасибо. Это сразу решило мою проблему! Придерживаясь к существованию, предполагаемые структуры проектов наверняка помогают ... – Fabian

Смежные вопросы