在Maven中测试依赖项的版本

5
为了使模块不太依赖于特定版本,我想测试不同版本的依赖项,以便确定模块可以在哪些版本范围内正常工作。例如,模块是针对库foo.bar 2.1.2构建的。然后,该工具应该测试2.0.0版本,如果失败则测试介于版本之间的版本(如git bisect)。然后类似地在2.1.2和最新版本之间进行测试。然后再进行下一个依赖项的测试。
我发现通过调整库的使用方式来扩展版本范围通常相当简单。在部署到OSGi容器时,运行在广泛的依赖版本中会让生活变得更加轻松。但是,手动测试这么多组合是一场噩梦。
有人知道这样的工具吗?这样它就可以在夜间运行在CI服务器上了?
PS:我知道这样的工具可能存在各种棘手的边缘情况和缺陷。我只想减少构建模块时隐含的假设量。正常的测试将捕获这些奇怪的情况。

“测试所有组合”是什么意思?是指依赖项的所有组合,还是一个依赖项与一组容器之间的关系? - Gimby
我认为测试所有组合并不有用。只需找到 POM 中版本周围最小和最大的版本,仍然通过测试即可。基于这些结果,可以在多个容器上进行测试。 - Peter Tillemans
1
这是一个非常有趣的问题,但我很难找到范围。我尤其在于事实上不仅仅存在“依赖项”,Maven建立在瞬态依赖项的思想之上,而这些依赖项甚至不在你自己的pom文件中定义。一个依赖通常会转化为一系列具有非常特定版本的依赖项。 - Gimby
我理解的对吗?使用“所有组合”在2.0.0和2.1.2之间的版本,即2.[0..1].[0..2],这将为此依赖项产生6个完整的Maven构建生命周期?如果将来是2.[0..1].[0..9],则为20个。如果是[2..9][0..9][0..9],则为800个,这样是正确的吗? - Gerold Broser
我修改了问题,因为手动操作中“all”一词似乎会引起错误的方向。我认为,实际上,如果它在2.0.0和2.1.2上运行正常,那么它很可能在所有版本之间都能正常工作。因此,该工具只需要找到断点版本即可。在最好的情况下,它将是2.0.0和2.x.x版本范围内的最新版本。在最坏的情况下,它将不得不使用二分查找来查找破解版本,这是O(log(N)),其中N是版本数量。 - Peter Tillemans
1个回答

2

使用Jenkins矩阵项目插件 - 请参见https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project

在您的pom.xml文件中,将版本定义为属性。

<properties>
  <my.version>1.30</my.version>
</properties>
...
<dependency>
  <groupId>com.acme</groupId>
  <artifactId>my-artifact</artifactId>
  <version>${my.version}</version>
</dependency>

然后在每个Jenkins矩阵迭代中提供一个测试版本。

mvn test -Dmy.version=1.31

谢谢,我之前不知道这个。虽然它不会寻找版本,但在找到更高级的方法之前,这可能是一种实用的方法。对于许多维度,由于要测试的依赖关系数量为O(2^m),其中m是依赖关系的数量(实际上只有半打),因此这可能会失控。 - Peter Tillemans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接