Maven:如何确保在classpath中使用带时间戳的快照版本?

时间:2011-07-13 21:33:43

标签: maven snapshot

我希望我们的功能测试使用类路径中的快照的时间戳版本(例如api-0.5.0-20110706.191935-1.jar)从Maven运行。但是,虽然我可以看到我们的Artifactory存储库中有时间戳的版本Maven指的是api-0.5.0-SNAPSHOT.jar并从本地存储库中解析它。

背景 我们的持续集成(CI)服务器设置了两个相关的构建。服务器构建运行mvn deploy,新的快照在正确构建的存储库中出现。

我们还有一个功能测试版本,可以获得最新的正确版本,部署到开发服务器,然后开始针对它运行测试。

似乎正在发生的是功能测试版本依赖于API-0.5.0-SNAPSHOT.jar。当Server构建运行时,它会替换本地存储库中的快照,并且我们开始从功能测试构建中获取NoClassDeFond错误。

因此,我希望功能测试版本使用带时间戳的版本。

我目前了解的选项:

  1. 在POM中声明一个快照存储库,并确保uniqueVersion为true(我将很快运行构建尝试此操作)。
  2. 使用version lock:snapshots目标将pom中的版本设置为带时间戳的版本。
  3. 考虑在CI服务器的一次调用中运行服务器构建和功能测试。 (即删除服务器版本)。

1 个答案:

答案 0 :(得分:1)

以下是简短的回答:不要在CI构建的项目之间使用SNAPSHOT依赖项。它们在本地计算机上运行良好,但CI环境往往效果不佳**。有关SNAPSHOT如何解决的已发布的算法,但它是一团糟。相反,只需使用普通依赖项,并在CI中生成一个发布作业,即生成版本。

换句话说,SNAPSHOTs应该被认为是非确定性的(至少从CI构建代理的角度来看)。

Versions plugin可能有助于跟踪相关性。

**我看到它一致工作的唯一方法是,如果为每个构建代理设置不同的存储库,然后在每次运行之间擦除它。剧烈,可怕,低效和不必要。