gpt4 book ai didi

ivy - 这个 Ivy changedPattern/SNAPSHOT 配置有什么问题?

转载 作者:行者123 更新时间:2023-12-01 10:02:22 25 4
gpt4 key购买 nike

更新快照依赖项时,我无法让 Ivy 更新缓存。解析器(具有以下设置:

<url name="xxx" m2compatible="false" 
checkmodified="true" changingMatcher="regexp"
changingPattern=".*-SNAPSHOT.*">

一个示例 Artifactory 文件名(在 Artifactory 中)是:
my-jar-1.999-SNAPSHOT.jar

详细的 Ant 解析日志包括:
[NOT REQUIRED] com.myorg#my-module;1.999-SNAPSHOT!my-jar.jar

Artifactory 上没有 POM。

解析器位于链式解析器下方;他们都有所有相关的属性集。我已阅读 https://issues.apache.org/jira/browse/IVY-938https://issues.apache.org/jira/browse/IVY-1221 ,包括所有评论和 AFAICT(可能是错误的!)没有任何变通办法是相关的。

我是否应该放弃快照而只使用带有“integration.latest”动态版本依赖的显式版本?我担心当我们为多个主要版本进行集成构建时,这可能最终会失败。那时,我们需要将主要版本拆分到单独的存储库中,或者将主要版本号放在 Artifactory 名称中,或者同样笨拙的东西,只是为了使“integration.latest”工作。

最佳答案

在与 Maven 存储库管理器交谈时,我不喜欢使用 url 解析器。
问题是 Maven 对快照修订有特殊且相当独特的处理...... url 解析器更适合用于 ivy 存储库。

我使用 Nexus,但以下内容也应该适用于 Artifactory。以下设置文件设置 Maven Central 和我的两个托管存储库(Maven 存储库有两种风格,发布或快照):

<ivysettings>
<settings defaultResolver="repos" />
<resolvers>
<chain name="repos">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="my-releases" m2compatible="true" root="https://myhost/releases"/>
<ibiblio name="my-snapshots" m2compatible="true" root="https://myhost/snapshots"/>
</chain>
</resolvers>
</ivysettings>

你会注意到我正在使用 ibilio具有内部逻辑来破译 Maven 的特殊快照处理的解析器。

当我需要快照修订时,我认为明确声明如下:
<ivy-module version="2.0">
<info organisation="myOrg" module="Demo"/>
<dependencies>
<dependency org="myOrg" name="myModule" rev="2.7-SNAPSHOT"/>
..
</dependencies>
</ivy-module>

在引擎盖下 ibilio解析器正在读取 Maven 存储库元数据文件,以确定应从快照存储库中获取哪个带时间戳的 Artifactory 。

更新

我建议阅读以下演示文稿:
  • Continuous delivery with Maven

  • 它很好地概述了将发布与开发构建(或快照)分开的 Maven 哲学。它还解释了 Maven 非常笨拙的方面之一......发布 Artifactory 的两种不同方式......

    我怀疑您正在尝试做的是按照作者的思路,即设置 CD 管道。在这种情况下,每个构建都是一个潜在的版本,应该这样对待(没有快照允许的动态依赖关系)。

    我建议将快照限制为仅限开发人员构建。仅部署候选版本。这种方法的问题在于管理大量的发布。一些存储库管理器(Nexus、Artifactory、Archiva)提供“暂存”功能,可以验证或丢弃未通过质量关卡的版本。

    更新 2

    如果您使用 ivy 将快照发布到 Maven 存储库中,那么有几个问题:
  • Ivy doesn't support the publication of snapshots with timestamps
  • Ivy doesn't update the Maven module's metadata.xml file

  • 在我看来,时间戳文件首先是使用快照的杀手级功能之一。使用 ivy 只能提供最新的文件(覆盖以前的最新文件)。

    有一些变通方法可以解决这些问题:
  • 正如第二个链接中所建议的,您可以完全忽略元数据(将“useMavenMetadata”属性设置为false)并默认回到 Ivy 比较文件名的旧机制。这只解决了 Ivy 客户的问题。
  • 存储库管理器应该能够重新生成元数据文件(Nexus 至少有一个任务来执行此操作)。
  • 使用 Maven ANT 任务。

  • 最后一个建议并不像看起来那么疯狂。首先,这是我知道的唯一支持时间戳快照的方法,其次,Maven 客户端似乎做了很多额外的处理(更新模块元数据),这些处理基本上没有记录。

    关于ivy - 这个 Ivy changedPattern/SNAPSHOT 配置有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445268/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com