Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 2 使用nexusrestapi获取给定groupid/artifactId的最新工件版本_Maven 2_Maven_Nexus - Fatal编程技术网

Maven 2 使用nexusrestapi获取给定groupid/artifactId的最新工件版本

Maven 2 使用nexusrestapi获取给定groupid/artifactId的最新工件版本,maven-2,maven,nexus,Maven 2,Maven,Nexus,我正在尝试使用NexusRESTAPI来获取maven工件的最新版本。我可以使用http://repo.local/service/local/data_index?a=local-turbogears服务器&from=0&g=com.turbo&c=bin&v=1.1.9,如果删除版本参数,我可以看到每个版本。然而,当我尝试使用RELEASE或LATEST作为版本时,它返回零结果。 我检查了nexus中磁盘上的maven-metadata.xml,其中有最新版本和最新版本的条目。是否需要采取其

我正在尝试使用NexusRESTAPI来获取maven工件的最新版本。我可以使用
http://repo.local/service/local/data_index?a=local-turbogears服务器&from=0&g=com.turbo&c=bin&v=1.1.9
,如果删除版本参数,我可以看到每个版本。然而,当我尝试使用RELEASE或LATEST作为版本时,它返回零结果。 我检查了nexus中磁盘上的maven-metadata.xml,其中有最新版本和最新版本的条目。是否需要采取其他步骤返回最新版本

我目前正在使用:


Nexus v。1.9.2以下URL将检索log4j 1.2.x的最新版本:

记录

更新 使用curl的示例:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar
curl -L -X GET "http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip" --output myZip.zip

Log4j2的更新 Log4j 1.2自2015年夏季起即为EOL,已知在Java 9中已被破坏

以下是Log4j工件的链接:

  • log4japi:
  • log4j核心:

在Nexus最新版本中,设计用于maven插件,而不是常规工件。Nexus根本不能保证最新版本在其他情况下也能正常工作。如果现在它向您返回工件的正确版本,明天可能会停止工作,例如,如果您运行Nexus存储库的重建元数据。您是否希望依赖可能在任何时候(例如,在释放过程中)断裂的机制。我怀疑。阅读更多的见解

为了找到最新的工件版本,您应该编写自己的脚本来调用搜索API,并根据需要对工件版本进行排序。或者你也可以为Nexus编写自己的插件

或者,如果您的工作流程允许,您可以使用快照而不是发布版本。如果不增加数字部分,则
x.y.z-SNAPSHOT
将始终返回最新的二进制文件


最后一点:不要使用最新版本的工件,在绝大多数情况下,如果您有这样的用例,那么您的部署(或您正在做的任何事情)就有问题。一般来说,您应该知道要使用的确切版本。

此答案是从以下内容复制而来的:

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

在使用
最新版本的
尝试REST服务后,发现它并不总是有效(请参阅),我最终创建了一行Linux命令来解析metadata.xml文件:

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

wget-O--O/dev/nullhttps://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml |grep-Po'(?在NexusAPI的最新版本中记录了检索组件最新版本的方法,按存储库、组、工件和基本版本进行过滤

例如: http://localhost:8081/service/rest/v1/search/assets/download?sort=version&repository=maven-snapshots&maven.groupId=org.foo.bar&maven.artifactId=project&maven.baseVersion=1.2.3-SNAPSHOT&maven.extension=jar

参考文件:

对于最新版本的Nexus(自3.16.0起):使用浏览器从
maven releases
存储库下载最新版本(以zip文件格式存储)的示例:

http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip

http:///service/rest/v1/search/assets/download?sort=version&repository=maven-发布&maven.groupId=&maven.artifactId=&maven.extension=zip
使用curl:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar
curl -L -X GET "http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip" --output myZip.zip

curl-L-xget”http:///service/rest/v1/search/assets/download?sort=version&repository=maven-发布&maven.groupId=&maven.artifactId=&maven.extension=zip”--输出myZip.zip

我可以通过将
本地/data\u索引?
替换为
本地/artifact/maven/redirect?
并添加一个存储库参数来下载最新版本的工件。同时感谢指向文档的链接=)如果工件不是jar文件怎么办?我已经发布了一个安卓aarlibrary@DeanWild添加
&p=aar
@DeanWild搜索结果屏幕(可从Nexus UI获得)将包含指向工件的链接。我无法在公司内部Nexus中使用此功能。我如何计算您提供的链接与我的系统中需要的链接之间的差异?我只得到了HTTP 404,就这样。不知道为什么所有的反对票?这种方法对于我们使用Nexus3的人特别有用,因为Nexus3不再有其他的API了。我知道Stackoverflow中有一个徽章,它通过投反对票来达到目的。出于这个原因,许多人搜索并投反对票——他们无法解开的第一件事就是拿到徽章:)在Nexus 3上非常有效。我想补充的是:<代码>排序-版本排序工作得更好:它将考虑1.0.9,1.0.10,1.0.11作为正确的顺序,而不是字母排序,默认为(1.0.10,1.0.11,1.0.9)阅读MaveMeta。XML是一个好主意,但是似乎元素不可靠,如在其他答案中所描述的,请参阅。对于不再存在的Nexus 3.0及更高版本,您可以使用@dannrob I更新脚本以支持这两个选项“最新版本”的一个简单示例是开发人员环境。开发人员通常希望在最新的构建上做一些事情,例如检查他们的最新更改如何影响他们正在使用的整个软件。为此,您构建了一个管道-版本在构建阶段确定,然后传递给下一个作业。您永远不会为此使用最新版本,至少因为最终会在管道的不同部分部署不同的版本(由于竞争条件)。当然,您不会将其添加到自动化步骤中。但是您的开发人员使用它手动
wget
安装最新的
包.tar.gz
(或
pip安装
等)
curl -L -X GET "http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip" --output myZip.zip