Nexus:如何使用nexus rest api

时间:2017-02-10 07:49:13

标签: maven deployment nexus devops artifact

我想从Nexus下载最新的次要版本的工件。如下所示:

http://local:8081/service/local/artifact/maven/content?g=com.mycompany&a=my-app&v=3.0.x

Nexus rest api不接受 3.0.x 3.0。* 等版本。

  

我无法使用 v = LATEST ,因为它可能会更改主要版本。

有没有办法解决这个问题。

2 个答案:

答案 0 :(得分:0)

假设您使用Nexus 2.x,则可以使用

http://local:8081/service/local/lucene/search?repositoryId=someRep&a=my-app

获取列出相关工件的XML响应。从这里,您可以推断出您想要的版本。

答案 1 :(得分:0)

通过添加groovy with ant解决了这个问题并创建了一个宏来从nexus中获取最新的次要版本。

<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="Ant-library/groovy-all-2.2.1.jar"/>

<macrodef name="fetchLatestMinor">
    <attribute name="group" default="NOT SET"/>
    <attribute name="artifact" default="NOT SET"/>
    <attribute name="majorVersion" default="NOT SET"/>
    <attribute name="repo" default="NOT SET"/>
    <attribute name="packaging" default="NOT SET"/>
    <attribute name="destination" default="NOT SET"/>
    <sequential>
        <property name="latestVersion" value=""/>
        <groovy>
            def url = "http://local:8081/nexus/service/local/lucene/search?a=@{artifact}&amp;v="+@{majorVersion}+".*-SNAPSHOT"
            def xml = url.toURL().text
            def root = new XmlParser().parseText(xml)
            properties["latestVersion"] = root.data.artifact[0].version.text()
            println root.data.artifact[0].version.text()
        </groovy>
        <get src="http://local:8081/nexus/service/local/artifact/maven/content?g=@{group}&amp;a=@{artifact}&amp;v=${latestVersion}&amp;r=@{repo}&amp;p=@{packaging}" dest="@{destination}"/>
    </sequential>
</macrodef>

<target name="run">
    <fetchLatestMinor group="<group_name>" artifact="<artifact_name>" majorVersion="2.0" repo="<repo_name>" packaging="war" destination="abc.war" />
</target>