Korzystanie z Nexus REST API, aby uzyskać najnowszą wersję artifact dla danego groupid/artifactId

Próbuję użyć Nexus REST api, aby uzyskać najnowszą wersję artefaktu Mavena. Jestem w stanie przejrzeć konkretną wersję, której szukam za pomocą http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9 i jeśli usunę parametr version, mogę zobaczyć każdą wersję. Jednak gdy próbuję użyć wersji RELEASE lub LATEST jako Wersji, to zwraca zero wyników. Sprawdziłem metadane Mavena.xml na dysku w Nexusie i tam są wpisy do najnowszego i Wydania. Czy jest inny krok, który muszę podjąć, aby zwrócić najnowszą wersję?

I aktualnie używam:

Nexus V. 1. 9. 2

Author: rpax, 2011-10-27

4 answers

Poniższy adres URL pobierze najnowszą wersję log4j 1.2.x:

Http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST

Tutaj

Update

Przykład użycia curl:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar

Aktualizacja dla Log4j2

Log4j 1.2 jest EOL od lata 2015 i jest znany z łamania w Javie 9.

Oto link do artefaktów Log4j:

 59
Author: Mark O'Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-01 07:39:06

W Nexusie Najnowszy jest zaprojektowany do pracy z maven plugins, a nie z zwykłymi artefaktami. Nexus po prostu nie gwarantuje, że najnowsze będą działać w innych przypadkach. Jeśli teraz zwróci Ci poprawną wersję artefaktu, jutro może to przestać działać np. po uruchomieniu Rebuild metadane dla repozytorium Nexus. Czy chcesz polegać na mechanizmie, który może ulec awarii w dowolnym momencie(np. podczas procesu wydawania?). Wątpię. Przeczytaj Ten artykuł aby dowiedzieć się więcej insight.

Aby znaleźć najnowszą wersję artifact należy albo napisać własny skrypt, aby wywołać API wyszukiwania i sortować wersje artifact, jak chcesz. Możesz też napisać własną wtyczkę do Nexusa.

Alternatywnie, jeśli pozwala na to przepływ pracy, możesz używać migawek zamiast wersji release. Jeśli nie zwiększysz części numerycznej, to x.y.z-SNAPSHOT zawsze zwróci najnowszą wartość binarną.

Ostatni punkt: nie używaj najnowszych wersji artefaktów, w zdecydowanej większości przypadków jeśli masz taki przypadek użycia, to coś jest nie tak z Twoimi wdrożeniami (lub cokolwiek robisz). Ogólnie rzecz biorąc, powinieneś znać dokładną wersję, której zamierzasz użyć.

 23
Author: Stanislav Bashkyrtsev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 12:46:38

Ta odpowiedź została skopiowana z: https://stackoverflow.com/a/39485361/1450799

Mam System Operacyjny Linux i nie mam dostępu do REST API, więc użyłem następujących poleceń, aby pobrać najnowszą wersję migawek z Nexusa:

Przykład migawki maven-metadane.xml z repozytorium WSO2:

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

Wydobywanie z najnowszego znacznika 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 tagu XML version 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"

Wynik oba polecenia do dzisiaj 14 wrz 2016 to:

5.3.0-SNAPSHOT
 13
Author: Reza Rahimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:24

Po wypróbowaniu usługi REST z wersją LATEST i odkryciu, że nie zawsze działa (Patrz @Stanislav response) skończyłem tworząc tę jednoliniową Linuksową komendę do parsowania metadanych.plik 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

Po prostu zmień adres URL na odpowiedni, A powinien działać dla Ciebie.

Cheers

 1
Author: idelvall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:47