我应该如何检索最新版本的 Maven 项目以进行合同测试?
Posted
技术标签:
【中文标题】我应该如何检索最新版本的 Maven 项目以进行合同测试?【英文标题】:How should I retrieve the latest version of a Maven project for contract testing? 【发布时间】:2017-05-11 02:52:28 【问题描述】:我们使用 Maven 和 Nexus 在我们的基础架构中分发组件(Maven 项目)。为了便于讨论,假设我们有两个团队:Team Foo 和 Team Bar;并且来自 Bar 的组件依赖于来自 Foo 的组件。
Team Bar 想要编写合约测试来检查组件 foo
的行为是否符合预期。这些测试将在每晚针对项目foo
的最新稳定开发版本(CI 之后的 git master)运行。 Team Bar 能否编写一个依赖于最新版本 foo
的 Maven 项目 bar/pom.xml
?我们该怎么做呢?
我们正在尝试通过版本命名来解决这个问题。我们总是将开发中的版本命名为master-SNAPSHOT
(或其他名称),而不是版本标签为0.1-SNAPSHOT -> 0.1 -> 0.2-SNAPSHOT -> 0.2
,它总是回到master-SNAPSHOT
,如master-SNAPSHOT -> 0.1 -> master-SNAPSHOT -> 0.2
。然后合约测试项目bar
可以将其对foo
的依赖声明为com.acme:foo:master-SNAPSHOT
。
但这似乎太笨拙了(破坏了常见的 Maven 实践和东西)......这种事情有更标准的实践吗?我们应该使用Maven Versions Plugin 吗?我们是否应该将最新版本的字符串从外部注入到 Maven 项目中?或者完全抛弃 Maven?
【问题讨论】:
为什么<version>-SNAPSHOT
不适合?
非常合适。但它类似于master-SNAPSHOT
。不是吗?
我的意思不是字面上的<version>
,我的意思是0.1-SNAPSHOT
、0.2-SNAPSHOT
等等。
根据 Maven 参考书 (books.sonatype.com/mvnref-book/reference/…) 关于项目版本的第 3.3.1 节,master
不是推荐的版本标识符。在本地使用它可能没问题,但是当您通过 Nexus 或 Maven Central 分发您的工件时,它可能证明不兼容。坚持数字和点,你会没事的。
【参考方案1】:
契约测试模块通常与实现契约的模块有着非常密切的关系。
因此,我建议在父项目中同时发展这两个模块。
制作多模块 maven 项目的 foo
和 bar
模块。然后让bar
依赖于foo
,就像你自己建议的那样。分配相同的版本$parent.version
。这意味着您在两个版本之间使用$parent.version-SNAPSHOT
。
像使用单个模块一样继续发展和发布您的项目,最好在发布时使用maven-release-plugin
。作为release:prepare
目标的一部分,它将同时提升所有模块的版本。
【讨论】:
以上是关于我应该如何检索最新版本的 Maven 项目以进行合同测试?的主要内容,如果未能解决你的问题,请参考以下文章