2013-02-09 29 views
17

Làm thế nào tôi có thể sử dụng Sonatype REST Api để tìm bản dựng có phiên bản cao nhất (bản dựng thời gian mới nhất)?Sonatype Nexus REST Api tìm phiên bản mới nhất

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

Chuyển phiên bản xây dựng là ARTIFACT_VERSION hoạt động. Việc vượt qua v=LATEST hoặc v=latest KHÔNG trả về bản dựng mới nhất.

+1

có thể trùng lặp [Sử dụng API nghỉ ngơi Nexus để lấy phiên bản tạo tác mới nhất cho nhóm/artficatid nhất định] (http: // stac koverflow.com/questions/7911620/using-the-nexus-rest-api-to-get-latest-artifact-version-for-given-groupid-artfic) –

Trả lời

28

Nó không phải là tài liệu mà/dịch vụ/local/Lucene/hỗ trợ tìm kiếm "MỚI NHẤT" như tham số phiên bản [link] Các OSS tài liệu api còn lại khẳng định rằng /service/local/artifact/maven [link] (để tải tệp vật pom) và /service/local/artifact/maven/content [ link] (để có được nội dung tập tin thực tế) không hỗ trợ nó:

phiên bản của vật (Bắt buộc) Hỗ trợ giải quyết các "MỚI NHẤT", "CHÍ" và các phiên bản ảnh chụp ("1,0-sNAPSHOT") quá.

Vì vậy, tôi nghĩ rằng bạn nên sử dụng một trong số họ (bạn sẽ phải cung cấp cho họ cũng với repositoryId và groupId) ví dụ:

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

bạn có thể muốn sử dụng & e = war hoặc & e = jar như steinim đề nghị dưới đây (btw giải pháp của ông đã không làm việc cho tôi) –

+0

cảm ơn bạn đã chia sẻ. từ nơi tôi có thể nhận được repoId? – OverrockSTAR

+2

Hãy cẩn thận khi sử dụng điều này: nếu phiên bản mới nhất đã được đặt thành giá trị cố định trong siêu dữ liệu (trên Sonatype Nexus nó xảy ra khi "Rebuild metadata" được nhấn), bạn có thể nhận phiên bản cũ của sản phẩm thay vì mới nhất, như được giải thích ở đây: http://articles.javatalks.ru/articles/32 – Giuseppe

18

tôi đã cùng một vấn đề và giải quyết nó như thế này sử dụng api tìm kiếm 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 API tìm kiếm cũng cho phép tìm kiếm từ khóa cho phiên bản:

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

tôi có hệ điều hành Linux và tôi không có quyền truy cập vào API REST, vì vậy tôi sử dụng lệnh sau đây để có được phiên bản mới nhất của bức ảnh chụp từ Nexus:

Một ví dụ ảnh chụp nhanh maven-metadata.xml từ kho 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> 

Extracting từ thẻ XML mới nhất bên trong 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" 

Trích xuất từ ​​phiên bản thẻ XML bên trong 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" 

Kết quả của cả hai lệnh đến ngày hôm nay ngày 14 tháng 9 năm 2016 là:

5.3.0-SNAPSHOT 
1

Sau khi thử các dịch vụ REST với phiên bản LATEST (và khám phá it doesn't always work) tôi đã kết thúc việc tạo ra một-liner Lệnh Linux để phân tích cú pháp tệp 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 
Các vấn đề liên quan