我们正在使用Maven和Nexus在我们的基础架构中分发组件(Maven项目)。为了论证,我们假设我们有两个团队:Team Foo和Team Bar;并且Bar中的组件依赖于Foo中的组件。
Team Bar希望编写合同测试,以检查组件foo
是否按预期运行。这些测试每晚都会针对项目foo
的最新稳定开发版本(CI之后的git master)运行。 Team Bar可以根据bar/pom.xml
的最新版本编写一个Maven项目foo
吗?我们该怎么做呢?
我们正在尝试通过版本命名来解决这个问题。我们总是将欠开发版本命名为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?
答案 0 :(得分:2)
合同测试模块通常与实施合同的模块有很强的关系。
因此,我建议在父项目中将两个模块并排发展。
制作多模块maven项目的foo
和bar
个模块。然后让bar
依赖foo
,就像你自己建议的那样。分配相同的版本${parent.version}
。这意味着您在版本之间使用${parent.version}-SNAPSHOT
。
继续发展和发布您的项目,就像使用单个模块一样,最好是在发布时使用maven-release-plugin
。它将同时提升所有模块的版本,作为release:prepare
目标的一部分。