这个Ivy changingPattern/SNAPSHOT配置出了什么问题?

Ed *_*aub 3 ivy artifactory

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

<url name="xxx" m2compatible="false" 
     checkmodified="true" changingMatcher="regexp" 
     changingPattern=".*-SNAPSHOT.*">
Run Code Online (Sandbox Code Playgroud)

示例工件文件名(在Artifactory中)是:

my-jar-1.999-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

详细的Ant解析日志包括:

[NOT REQUIRED] com.myorg#my-module;1.999-SNAPSHOT!my-jar.jar
Run Code Online (Sandbox Code Playgroud)

工件上没有POM.

旋转变压器位于链式旋转变压器下方; 它们都具有所有相关属性集.我已阅读https://issues.apache.org/jira/browse/IVY-938https://issues.apache.org/jira/browse/IVY-1221,包括所有评论和AFAICT(可能不正确! )没有一个解决方法是相关的.

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

Mar*_*nor 5

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

我使用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>
Run Code Online (Sandbox Code Playgroud)

您会注意到我正在使用具有内部逻辑的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>
Run Code Online (Sandbox Code Playgroud)

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

更新

我建议阅读以下演示文稿:

它很好地概述了将版本与开发版本(或快照)分开的Maven理念.它还解释了Maven非常笨重的一个方面......两种不同的方式来发布工件......

我怀疑你要做的是沿着作者设置CD管线的路线.在这种情况下,每个构建都是一个潜在的版本,应该被视为这样(没有快照允许的动态依赖).

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

更新2

如果您使用常春藤将快照发布到Maven存储库,那么有几个问题:

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

有解决这些问题的解决方法:

  1. 如第二个链接所示,您可以完全忽略元数据(将"useMavenMetadata"属性设置为false),并默认返回到ivy比较文件名的旧机制.这只能解决常春藤客户端的问题.
  2. 存储库管理器应该能够重新生成元数据文件(Nexus至少有一个任务来执行此操作).
  3. 使用Maven ANT任务.

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