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

标签 maven snapshot

我希望我们的功能测试使用类路径中快照的时间戳版本(例如 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 错误。

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

我目前知道的选项:

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

    这是简短的回答:不要在 CI 构建的项目之间使用 SNAPSHOT 依赖项。它们在您的本地机器上很好,但 CI 环境往往无法正常工作**。有一个关于如何解决 SNAPSHOT 的已发布算法,但它是一团糟。相反,只需使用普通的依赖项,并在您的 CI 中有一个发布作业来生成发布。

    换句话说,快照应该被认为本质上是不确定的(至少从 CI 构建代理的角度来看)。

    Versions plugin可能有助于跟踪依赖项。

    ** 我看到它始终如一地工作的唯一方法是为每个构建代理设置不同的存储库,然后在每次运行之间将其清除。激烈的、可怕的、低效的和不需要的。

    关于Maven:如何确保在类路径中使用带时间戳的快照版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685971/

    相关文章:

    MySQL:回滚时间更长?

    linux - 列出最近的 ZFS 快照

    java - 找不到参数的方法 compile() [com.android.support :cardview-v7:27. 0.2]

    maven - 找不到处理执行的市场条目

    java - Maven 测试构建失败

    混帐 : How to get a snapshot of a git repository

    java - 如何从 maven SNAPSHOT 存储库下载 SNAPSHOT 版本?

    ios - 给定纬度和经度生成快照的最佳方法是什么,真的鼓励跳过 MKMapView

    java - 在使用斯坦福 NLP 时遇到与内存相关的异常该怎么办?

    java - 如何在eclipse中使用maven和jpa连接mysql数据库?