Maven nexus v = LATEST不工作

问题描述 投票:6回答:3

我有maven nexus本地存储库,在运行时我从maven repo下载/获取jar / war文件并将其复制到tomcat。我正在使用以下网址来下载jar / war文件。

http://localhost/maven/nexus/service/local/artifact/maven/redirect?r=releases&g=com.rdc.app&a=rum&v=LATEST&p=war&c

当我通过param v = 1.2.4我可以下载特定版本的战争,如果我想要最新版本,我发现v = LATEST将在repo中返回最新版本的jar / war文件。

问题是maven repo的最新版本是12.53.3当我使用v = LATEST它正在下载12.46.1 i再次更新12.53.3并再次尝试v = LATEST但结果与之前相同。

此外,如果最新的jar是SNAPSHOT其他,那么释放jar / war v = LATEST仅支持发行版本。

我尝试了以下文档,但似乎无法正常工作。

repository.sonatype.org/nexus-core-documentation-plugin/core/docs/rest.artifact.maven.redirect.html
maven repository nexus
3个回答
4
投票

这个问题和答案现在已经有6年了。请注意,sonatype有一个新版本的Nexus,带有修改后的后端。

以下是有关计划任务的文档的更新链接,其中一个是“重建Maven元数据文件”:

Original answer

听起来像元数据问题。 Nexus有一个scheduled task,可用于重建存储库的元数据。


6
投票

如果你问我,这就是一个错误。我也面对过它。

基本上,LATEST版本并不意味着1.2.3中的“最新版本”与1.2.2相比,它意味着“最近部署的工件的版本”。因此 - 如果您有多个项目分支并且工件由持续集成服务器部署,则您不能信任LATEST。

更新:检查Tari aka Manga的回复,了解Nexus中的更新行为。


2
投票

有人提出建议(例如:@carlspring),“LATEST”实际上没有指向可用的最高版本,考虑到版本和快照;他们建议是最近部署的,但我不同意。这就是Sonatype Nexus™2.11.2-0所发生的情况:

假设开始于:

<metadata modelVersion="1.1.0">
    <groupId>com.acme</groupId>
    <artifactId>versioningtest</artifactId>
    <versioning>
        <latest>1.0.3-SNAPSHOT</latest>
        <release>1.0.1</release>
        <versions>
            <version>1.0.0-SNAPSHOT</version>
            <version>1.0.0</version>
            <version>1.0.1-SNAPSHOT</version>
            <version>1.0.1</version>
            <version>1.0.2-SNAPSHOT</version>
            <version>1.0.3-SNAPSHOT</version>
        </versions>
        <lastUpdated>20150928081006</lastUpdated>
    </versioning>
</metadata>

(A)发布新的1.0.2-SNAPSHOT只增加“lastupdated”时间戳,它不会改变“最新”。

现在发布1.0.3:

<metadata>
    <groupId>com.acme</groupId>
    <artifactId>versioningtest</artifactId>
    <versioning>
        <latest>1.0.3</latest>
        <release>1.0.3</release>
        <versions>
            <version>1.0.0-SNAPSHOT</version>
            <version>1.0.0</version>
            <version>1.0.1-SNAPSHOT</version>
            <version>1.0.1</version>
            <version>1.0.2-SNAPSHOT</version>
            <version>1.0.3-SNAPSHOT</version>
            <version>1.0.3</version>
        </versions>
        <lastUpdated>20150928081408</lastUpdated>
    </versioning>
</metadata>

(B)从这里开始,发布一个新的1.0.2-SNAPSHOT只增加“lastupdated”时间戳,它不会改变“最新”。另外,发布1.0.2只会增加“lastupdated”时间戳,它不会更改“最新”:

<metadata>
    <groupId>com.acme</groupId>
    <artifactId>versioningtest</artifactId>
    <versioning>
        <latest>1.0.3</latest>
        <release>1.0.3</release>
        <versions>
            <version>1.0.0-SNAPSHOT</version>
            <version>1.0.0</version>
            <version>1.0.1-SNAPSHOT</version>
            <version>1.0.1</version>
            <version>1.0.2-SNAPSHOT</version>
            <version>1.0.2</version>
            <version>1.0.3-SNAPSHOT</version>
            <version>1.0.3</version>
        </versions>
        <lastUpdated>20150928081620</lastUpdated>
    </versioning>
</metadata>

总之:

  • 在两个快照之间,即使年轻人更近,最老的出版物也会赢得最新版本,如果版本更高的话。 (一个)
  • 在发布Vs快照之间,较高版本赢得了LATEST点。 (B)

因此,考虑到发布和快照,Sonatype Nexus™2.11.2-0,“最新”指向可用的最高版本。

证明完毕

热门问题
推荐问题
最新问题