我希望我们的功能测试使用类路径中快照的时间戳版本(例如 api-0.5.0-20110706.191935-1.jar)从 Maven 运行。但是,虽然我可以看到我们的 Artifactory 存储库中有带时间戳的版本,但 Maven 指的是 api-0.5.0-SNAPSHOT.jar 并从本地存储库解析它。
背景
我们的持续集成 (CI) 服务器有两个相关的build设置。服务器构建运行 mvn deploy
并且新快照出现在正确构建的存储库中。
我们还有一个功能测试构建,它获取最新的正确构建,部署到开发服务器,然后开始对其运行测试。
似乎正在发生的是功能测试构建依赖于 API-0.5.0-SNAPSHOT.jar。当服务器构建运行时,它会替换本地存储库中的快照,我们开始从功能测试构建中获取 NoClassDeFond 错误。
因此,我希望功能测试版本使用带时间戳的版本。
我目前知道的选项:
version lock:snapshots
目标是将 pom 中的版本设置为带时间戳的版本。 最佳答案
这是简短的回答:不要在 CI 构建的项目之间使用 SNAPSHOT 依赖项。它们在您的本地机器上很好,但 CI 环境往往无法正常工作**。有一个关于如何解决 SNAPSHOT 的已发布算法,但它是一团糟。相反,只需使用普通的依赖项,并在您的 CI 中有一个发布作业来生成发布。
换句话说,快照应该被认为本质上是不确定的(至少从 CI 构建代理的角度来看)。
Versions plugin可能有助于跟踪依赖项。
** 我看到它始终如一地工作的唯一方法是为每个构建代理设置不同的存储库,然后在每次运行之间将其清除。激烈的、可怕的、低效的和不需要的。
关于Maven:如何确保在类路径中使用带时间戳的快照版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685971/