java - Spring Cloud Contract使用maven时编译问题

标签 java spring maven spring-cloud-contract

我最近按照他们的教程网站( https://cloud.spring.io/spring-cloud-contract/#quick-start )上的说明将 Spring Cloud Contract 添加到了我们的 Spring 项目中。

我成功地编写了契约(Contract),生成了 stub ,一切都按预期工作,但是在将其从我们的存储库中拉出后,在使用干净的项目时遇到了问题。当我让 mvn test 运行时,我在生成的测试类中遇到编译错误,因为项目本身似乎之前没有构建,所以生产者站点上的契约(Contract)测试的基类没有构建似乎还不存在。

[错误] 无法在项目 kongo-shoppingcart-service 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile): 编译失败: 编译失败: [错误] [...]/src/kongo-service-shoppingcart/kongo-shoppingcart-service/target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java:[ 7,64]包 edu.hm.ba.kongo.shop.shoppingcart.service.test.contracts 不存在 [错误] [...]/src/kongo-service-shoppingcart/kongo-shoppingcart-service/target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/ContractVerifierTest.java:[ 14,43]找不到符号 [错误]符号:类 ContractTestBase

我的项目 pom 看起来像这样:

<?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 声明有问题吗?

最佳答案

由于某种原因,您的项目无法看到您的基本测试类。它不在类路径上。您确定将其放置在正确的文件夹中吗?您必须显示您的文件夹结构。您也可以查看https://github.com/spring-cloud-samples/spring-cloud-contract-samples并做类似的事情。顺便说一句, src/main/test 看起来非常糟糕,所以很可能您的项目设置是错误的。我建议将契约(Contract)和基类分别保留在 src/test/resourcessrc/test/java

关于java - Spring Cloud Contract使用maven时编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42414362/

相关文章:

java - 如何从命令行将 jar 文件添加到 eclipse java 项目?

Java Spring localhost 项目名称转换为 URL

java - Spring MVC 始终对特定参数对象的所有映射应用 @Valid

java - 从 POM 调用外部 jar 文件

git - docker.exe:无效的引用格式:存储库名称必须为小写

java - 什么时候是释放 Java 缓存对象的好时机?

java - 有没有一种好方法使用 Slf4j 将某些事件记录到单独的日志文件中?

java - 缩放 View - 不是从可绘制 View

java - Spring @Profile 适用于类,但不适用于 @Bean

java - 使用 selenium 进行 Maven 范围测试