2013-02-09 16 views
17

Jak mogę używać Sonietype REST Api do pobrania kompilacji z najwyższą wersją (najnowsza wersja czasowa)?Sonatype Nexus REST Api pobrać najnowszą wersję kompilacji

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

Przekazywanie wersji kompilacji jako ARTIFACT_VERSION działa. Przekazywanie v=LATEST lub v=latest NIE zwraca najnowszej kompilacji.

+1

możliwy duplikat [Korzystanie z reszta Nexus API, aby uzyskać najnowszą wersję artefakt dla danego GroupID/artficatid] (http: // stac koverflow.com/questions/7911620/using-the-nexus-rest-api-to-get-latest-artifact-version-for-given-groupid-artfic) –

Odpowiedz

28

To nie jest udokumentowane, że/usługa/local/Lucene/support wyszukiwania "Najnowsze" jako parametr version [link] OSS reszta dokumentacja API twierdzi, że /service/local/artifact/maven [link] (aby pobrać plik artefakt POM) i /service/local/artifact/maven/content [ link] (aby uzyskać rzeczywistą zawartość pliku) nie obsługuje:

Wersja artefaktu (wymagane) obsługuje rozstrzygnięcia „Najnowsze”, „zwolnienie” i wersjach migawka („1,0-migawka”) też.

Więc myślę, że należy skorzystać z jednej z nich (będziesz musiał dostarczyć je również z repositoryId i GroupID) na przykład:

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

może chcesz używać & e = war or & e = jar like steinim zasugerował poniżej (btw jego rozwiązanie nie działa dla mnie) –

+0

dzięki za udostępnienie. skąd mogę uzyskać repoId? – OverrockSTAR

+2

Należy zachować ostrożność podczas korzystania z tej opcji: jeśli najnowsza wersja została ustawiona na stałą wartość w metadanych (w przypadku Sonatype Nexus dzieje się tak, gdy zostanie naciśnięty przycisk "Przebuduj metadane"), można uzyskać starszą wersję artefaktu zamiast najnowszej, jak wyjaśniono tutaj: http://articles.javatalks.ru/articles/32 – Giuseppe

18

miałem ten sam problem i rozwiązać go tak korzystania API wyszukiwania Lucene:

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 Search API umożliwiają również wyszukiwanie wyrażenia wersji:

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

Mam Linux OS i nie mam dostępu do REST API, więc użyłem następującego polecenia, aby pobrać najnowszą wersję migawek z Nexus:

Przykładowy migawek Maven-metadata.xml z WSO2 repozytorium:

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

Wyodrębnianie z najnowszej tag XML wewnątrz maven-metadata.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" 

Wyodrębnianie z wersji XML tagu wewnątrz maven-metadata.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" 

Wynikiem obu komend do dziś 14 wrz 2016 jest:

5.3.0-SNAPSHOT 
1

Po wypróbowaniu usługi REST z wersją LATEST (i odkrywanie it doesn't always work) skończyło się na tworzeniu tego jednego-liner komenda Linux dla parsowania pliku 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