【问题标题】:Sonatype Nexus REST Api fetch latest build versionSonatype Nexus REST Api 获取最新的构建版本
【发布时间】:2013-01-24 21:14:49
【问题描述】:

如何使用 Sonatype REST Api 获取最高版本的构建(最新的临时构建)?

http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION

ARTIFACT_VERSION 的形式传递构建版本有效。传递 v=LATESTv=latest 不会返回最新版本。

【问题讨论】:

标签: rest build repository nexus sonatype


【解决方案1】:

没有记录 /service/local/lucene/search 支持“LATEST”作为版本参数 [link] OSS rest api 文档指出 /service/local/artifact/maven [link] (获取工件 pom 文件)和 /service/local/artifact/maven/content [link] (获取实际文件内容)确实支持它:

工件的版本(必需)支持解析“最新”, “RELEASE”和快照版本(“1.0-SNAPSHOT”)也是如此。

所以我认为您应该使用其中之一(您还必须为它们提供 repositoryId 和 groupId) 例如:

http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST

【讨论】:

  • 您可能喜欢使用 &e=war 或 &e=jar,就像下面建议的 steinim 一样(顺便说一句,他的解决方案对我不起作用)
  • 使用时要小心:如果最新版本已在元数据中设置为固定值(在 Sonatype Nexus 上,它会在点击“重建元数据”时发生),你可能会得到一个旧版本您的工件而不是最新的,如下所述:articles.javatalks.ru/articles/32
  • 如果你的神器不是jar,添加e参数,例如:http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST&e=zip
  • 确实对nexus 3不起作用。您还有其他解决方案吗?
  • 那个解决方案对我不起作用。我尝试了这个,我有应该匹配的工件:curl -u admin:admin123 -L "http://127.0.0.1:8081/nexus/service/local/artifact/maven/content?r=maven-group&g=xml-apis&a=art&v=LATEST" 但我收到 404 错误...
【解决方案2】:

我遇到了同样的问题,并使用 lucene search api 解决了这个问题:

if [[ "${REPO}" == "snapshots" ]]; then
  version=$( curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestSnapshot>\(.*\)</latestSnapshot>|\1|p' | sed -e 's/^[ \t]*//' | tail -1 )
else
  version=$( curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestRelease>\(.*\)</latestRelease>|\1|p' | sed -e 's/^[ \t]*//' | tail -1 )
fi

curl -o ~/${ARTIFACT}-${VERSION}.zip -L -#  "http://${HOST}/nexus/service/local/artifact/maven/redirect?r=${REPO}&g=${GROUP_ID}&a=${ARTIFACT}&e=zip&v=${VERSION}"

【讨论】:

    【解决方案3】:

    Lucene 搜索 API 还允许关键字搜索版本:

    http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.*
    

    【讨论】:

      【解决方案4】:

      我有 Linux 操作系统,但无法访问 REST API,因此我使用以下命令从 Nexus 获取最新版本的快照:

      来自 WSO2 存储库的示例快照 maven-metadata.xml:

      $ curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml"
      <?xml version="1.0" encoding="UTF-8"?>
      <metadata>
        <groupId>org.wso2.is</groupId>
        <artifactId>wso2is</artifactId>
        <versioning>
          <latest>5.3.0-SNAPSHOT</latest>
          <release></release>
          <versions>
            <version>5.1.0-SNAPSHOT</version>
            <version>5.2.0-SNAPSHOT</version>
            <version>5.3.0-SNAPSHOT</version>
          </versions>
          <lastUpdated>20160914062755</lastUpdated>
        </versioning>
      </metadata>
      

      从 maven-metadata.xml 中的最新 XML 标签中提取:

      curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
      grep "<latest>.*</latest>" | \
      sed -e "s#\(.*\)\(<latest>\)\(.*\)\(</latest>\)\(.*\)#\3#g"
      

      从 maven-metadata.xml 中的版本 XML 标签中提取:

      curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
      grep "<version>.*</version>" | \
      sort | uniq | tail -n1 | \
      sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g"
      

      直到今天 2016 年 9 月 14 日这两个命令的结果是:

      5.3.0-SNAPSHOT
      

      【讨论】:

      • 我会推荐带有 --xpath 标志的 xmllint 而不是“grep”
      【解决方案5】:

      在尝试使用 LATEST 版本的 REST 服务(并发现 it doesn't always work)之后,我最终创建了这个用于解析 metadata.xml 文件的单行 Linux 命令:

      wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
      

      【讨论】:

      • 我会推荐带有 --xpath 标志的 xmllint 而不是“grep”
      猜你喜欢
      • 2013-07-21
      • 2016-02-19
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多