6

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

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

当我通过参数 v=1.2.4 时,我可以下载特定版本的 war,如果我想要最新版本,我发现 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
4

3 回答 3

6

如果你问我,这是一个错误。我也遇到过。

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

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

于 2013-01-05T17:37:12.643 回答
4

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

这是计划任务文档的更新链接,其中之一是“重建 Maven 元数据文件”:

原始答案

听起来像是元数据问题。Nexus 有一个计划任务,可用于重建存储库的元数据。

于 2013-01-05T14:47:52.340 回答
2

有些人建议(例如:@carlspring)“最新”实际上并不指向可用的最高版本,考虑到发布和快照;他们建议是最近部署的,但我不同意。这就是 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”时间戳,它不会改变“latest”。

现在发布 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”时间戳,它不会改变“latest”。此外,发布 1.0.2 只会增加“lastupdated”时间戳,它不会更改“latest”:

<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>

所以总而言之:

  • 在两个快照之间,即使较年轻的版本较新,如果版本较高,最旧的已发布将赢得最新位置。(一种)

  • 在发布与快照之间,更高的版本赢得了最新的位置。(乙)

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

量子点

于 2015-09-28T08:25:32.037 回答