【问题标题】:Maven: How to ensure timestamped versions of snapshots are used in classpath?Maven:如何确保在类路径中使用时间戳版本的快照?
【发布时间】:2011-10-04 21:14:20
【问题描述】:

我希望使用类路径中快照的时间戳版本(例如 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。当服务器构建运行时,它会替换本地存储库中的快照,并且我们开始从功能测试构建中收到 NoClassDeFond 错误。

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

我目前知道的选项:

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

【问题讨论】:

    标签: maven snapshot


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你能提供一个已发布算法的链接吗?我发布了一个类似的问题,因为我们无法找到它。
    • 如果您提供链接,请回答此问题:stackoverflow.com/questions/7662009/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多