我正在尝试使用nexus REST api来获取最新版本的maven工件。我可以使用http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9
浏览到我要查找的特定版本,如果删除版本参数,我可以看到每个版本。但是,当我尝试使用RELEASE或LATEST作为版本时,它返回零结果。
我在nexus中检查了磁盘上的maven-metadata.xml,并且有最新和发布的条目。我需要采取另一个步骤来返回最新版本吗?
我目前正在使用:
Nexus v.1.9.2
答案 0 :(得分:60)
以下URL将检索最新版本的log4j 1.2.x:
记录here
使用curl的示例:
curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar
Log4j 1.2自2015年夏季以来一直是EOL,并且已知在Java 9中被破解。
以下是Log4j工件的链接:
答案 1 :(得分:23)
在Nexus中,LATEST旨在使用 maven插件,而不是使用常规工件。 Nexus根本不保证LATEST在其他情况下工作。如果现在它返回正确版本的工件,明天这可能会停止工作,例如如果您为Nexus存储库运行Rebuild Metadata。您是否希望依赖可能随时中断的机制(例如在发布过程中?)。我怀疑。请阅读this article以获取更多信息。
为了找到LATEST工件版本,您应该编写自己的脚本来调用Search API并根据需要对工件版本进行排序。或者你可以为Nexus编写自己的插件。
或者,如果您的工作流程允许,您可以使用SNAPSHOT而不是发行版本。如果不增加数字部分,则x.y.z-SNAPSHOT
将始终返回最新的二进制文件。
最后一点:不要使用最新版本的工件,在绝大多数情况下,如果你有这样的用例,那么你的部署(或者你正在做的任何事情)都有问题。一般来说,你应该知道你将要使用的确切版本。
答案 2 :(得分:15)
此答案已复制自:https://stackoverflow.com/a/39485361/1450799
我有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
答案 3 :(得分:3)
尝试使用LATEST
版本的REST服务后,发现它并不总是有效(参见@Stanislav response)我最终创建了这个用于解析元数据的单行Linux命令。 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
只需更改为适当的网址即可,它应该适合您。
干杯
答案 4 :(得分:0)
在最新版本的Nexus API中记录了如何检索组件的最新版本,并按存储库,组,工件和基本版本进行过滤
示例: 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 =罐子
答案 5 :(得分:0)
对于最新版本的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
使用卷曲:
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