2011-10-27 34 views
35

Tôi đang cố gắng sử dụng api REST của Nexus để lấy phiên bản mới nhất của tạo phẩm maven. Tôi có thể duyệt đến phiên bản cụ thể mà tôi đang tìm kiếm bằng cách sử dụng http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9 và nếu tôi xóa thông số phiên bản, tôi có thể thấy mọi phiên bản. Tuy nhiên khi tôi thử và sử dụng RELEASE hoặc LATEST làm phiên bản thì nó trả về kết quả bằng không. Tôi đã kiểm tra maven-metadata.xml trên đĩa trong nexus và có các mục nhập mới nhất và phát hành. Có bước nào khác mà tôi cần thực hiện để trả lại phiên bản mới nhất không?Sử dụng API còn lại của Nexus để nhận phiên bản tạo tác mới nhất cho nhóm/artifactId nhất định

Tôi hiện đang sử dụng:

Nexus v 1.9.2

Trả lời

57

URL sau sẽ lấy phiên bản mới nhất của log4j 1.2.x:.

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

dự liệu here

Cập nhật

Ví dụ sử dụng curl:

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

Cập nhật cho Log4j2

Log4j 1.2 là EOL kể từ mùa hè năm 2015 và được biết đến bị phá vỡ trong Java 9.

Dưới đây là liên kết cho các hiện vật Log4j:

+1

tôi đã có thể tải về phiên bản mới nhất của tạo tác bằng cách thay thế 'local/data_index?' Với 'local/vật/maven/chuyển hướng?' Và thêm một tham số kho. Cũng nhờ liên kết tới tài liệu =) – chrisst

+0

nếu tạo phẩm không phải là tệp jar? Tôi đã xuất bản thư viện aar Android –

+2

@DeanWild thêm '& p = aar' – sbk

22

Trong Nexus LATEST được thiết kế để hoạt động với plugin maven thay vì với các hiện vật thông thường. Nexus chỉ đơn giản là không đảm bảo LATEST hoạt động trong các trường hợp khác. Nếu ngay bây giờ nó trả về cho bạn phiên bản chính xác của hiện vật, ngày mai điều này có thể ngừng hoạt động, ví dụ: nếu bạn chạy Siêu dữ liệu xây dựng lại cho kho lưu trữ Nexus. Bạn có muốn dựa vào cơ chế có thể xảy ra bất cứ lúc nào (ví dụ: trong quá trình phát hành không?). Tôi nghi ngờ. Đọc this article để có thông tin chi tiết hơn.

Để tìm phiên bản tạo tác MỚI NHẤT, bạn nên viết tập lệnh của riêng mình để gọi API tìm kiếm và sắp xếp các phiên bản tạo tác như bạn muốn. Hoặc bạn có thể viết plugin của riêng bạn cho Nexus.

Hoặc, nếu quy trình làm việc của bạn cho phép, bạn có thể sử dụng SNAPSHOT thay vì các phiên bản phát hành. Nếu bạn không tăng phần số, thì x.y.z-SNAPSHOT sẽ luôn trả về nhị phân mới nhất.

Điểm cuối: không sử dụng các phiên bản hiện vật mới nhất, trong phần lớn trường hợp nếu bạn có trường hợp sử dụng như vậy, thì có vấn đề với triển khai của bạn (hoặc bất kỳ điều gì bạn đang làm). Nói chung, bạn nên biết chính xác phiên bản bạn sẽ sử dụng.

+0

Một ví dụ đơn giản cho "phiên bản mới nhất" sẽ là môi trường nhà phát triển. các nhà phát triển thường muốn làm mọi thứ trên bản dựng cập nhật nhất, ví dụ: kiểm tra xem thay đổi mới nhất của họ ảnh hưởng như thế nào đến phần mềm hoàn chỉnh mà họ đang làm việc. – erikbwork

+0

Để bạn xây dựng một đường ống - phiên bản được xác định trên giai đoạn Xây dựng và sau đó được chuyển đến các công việc tiếp theo. Bạn không bao giờ sử dụng LATEST cho điều này ít nhất vì bạn sẽ kết thúc với phiên bản khác nhau được triển khai trong các phần khác nhau của đường ống (do các điều kiện chủng tộc). –

+0

Bạn không thêm điều này vào các bước tự động hóa của mình. Nhưng nhà phát triển của bạn sử dụng nó để tự động 'wget' mới nhất' install_bundle.tar.gz' ví dụ (hoặc 'pip install ' etc) – erikbwork

10

Câu trả lời này đã được sao chép từ: https://stackoverflow.com/a/39485361/1450799

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 cho đến ngày 14 tháng 9 năm 2016 là:

5.3.0-SNAPSHOT 
+0

Không chắc chắn tại sao tất cả các phiếu bầu xuống? Cách tiếp cận này đặc biệt hữu ích cho những người trong chúng ta sử dụng Nexus 3, không lâu sau có API REST –

+1

Tôi biết rằng có một huy hiệu trong Stackoverflow đạt được bằng cách cho một phiếu bầu phủ định một bài đăng. Vì lý do này, nhiều người tìm kiếm và bỏ phiếu phủ định điều đầu tiên mà họ không thể undrestand để đạt được huy hiệu :) –

1

Sau khi thử các dịch vụ REST với phiên bản LATEST, và phát hiện ra nó không phải lúc nào làm việc (Xem @Stanislav response) tôi đã kết thúc việc tạo ra một liner Linux lệnh này để phân tích các tập tin 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 

Just thay đổi url thích hợp, và nó sẽ làm việc cho bạn.

Cheers

+1

Đối với Nexus 3.0 trở lên không còn tồn tại, bạn có thể sử dụng dannrob

+0

@dannrob cảm ơn, đã cập nhật! – idelvall

+1

@dannrob Tôi đã cập nhật tập lệnh để hỗ trợ cả hai tùy chọn – idelvall

Các vấn đề liên quan