Spring Cloud合约罐版本控制

时间:2019-06-19 04:25:04

标签: spring-cloud-contract

我在我的项目中成功建立了两个微服务之间的Spring云合约。直到昨天一切都很好。

在消费者方面,我所引用的存根的最新版本如下:

:schema [Sales]
-tuples DC { [Countries].members}
+tuples DC { [Countries].[UK]}

但这在某些情况下会导致问题,即生产者方还原了其最新版本并切换回先前的版本。

某种程度上,存在一种情况,即包含当前存根的jar的版本低于maven repo中的最新版本。

Spring云合约中是否可以执行以下任一操作?

1)配置使用者方以获取当前项目版本(指pom.xml中的项目版本),而不是maven回购中的最新版本?

2)将生产者端配置为具有存根jar的静态版本,但保留其他项目jar的动态版本。这样一来,消费者方就可以引用相同的静态版本的存根jar

我阅读了文档https://cloud.spring.io/spring-cloud-static/spring-cloud-contract/2.1.1.RELEASE/single/spring-cloud-contract.html#_jar_versioning,但没有帮助

2 个答案:

答案 0 :(得分:2)

您可以试用提供的版本。我们给+始终下载最新版本。您可以设置一个具体值,例如2.1.1.RELEASE。您还可以设置范围。总而言之,我们在下面使用了Ivy,因此您可以查看Ivy http://ant.apache.org/ivy/history/latest-milestone/settings/version-matchers.html

的规则
  

1)配置使用者方以获取当前项目版本,而不是最新版本?

current是什么意思?是最新的吗?最新发布?如果它是最新的发行版,请选择+,但指向仅包含发行版而没有快照的回购。

  

我阅读了文档https://cloud.spring.io/spring-cloud-static/spring-cloud-contract/2.1.1.RELEASE/single/spring-cloud-contract.html#_jar_versioning,但没有帮助

本节缺少什么?您询问了静态存根,我们也在@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:2.1.1:stubs:8080"})中对其进行了描述。

答案 1 :(得分:1)

以下工作(针对Maven项目)。

第1步:我们无需在@AutoConfigureStubRunner中指定ID,而是可以在application.properties文件中提供它,如下所示(注意@project.version@,指的是Maven项目版本)

stubrunner.ids=com.example:http-server-dsl:@project.version@:stubs:8080

第2步:要在属性文件中使用@project.version@,请在pom.xml的build部分中添加以下内容:

 <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

在“插件”部分:

   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>${mvn-resources-plugin.version}</version>
        <configuration>
            <delimiters>
                <delimiter>@</delimiter>
            </delimiters>
            <useDefaultDelimiters>false</useDefaultDelimiters>
        </configuration>
    </plugin>