2011-10-27 57 views
35

我試圖使用Nexus REST API來獲取最新版本Maven構件的最新神器版本。我可以使用http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9瀏覽到我正在尋找的特定版本,如果刪除版本參數,我可以看到每個版本。但是,當我嘗試使用RELEASE或LATEST作爲版本時,它會返回零結果。 我檢查了nexus中磁盤上的maven-metadata.xml,並且有最新和發佈的條目。我需要採取另一個步驟來返回最新版本嗎?使用Nexus休息API來獲取給定的groupid/artifactId的

我目前正在使用:

的Nexus v 1.9.2

回答

57

以下URL將檢索最新版本的log4j的1.2.x的:

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

記錄在案here

更新

實施例使用curl:

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

更新Log4j2

Log4j的1.2是因爲EOL夏季2015,並且已知在Java中被打破9.

這裏是鏈接的Log4j的構件:

+1

我能夠通過更換'本地/ data_index用於?'和'本地/工件/行家/重定向?'和添加庫參數來下載最新版本的神器。 也感謝鏈接到文檔=) – chrisst

+0

如果工件不是jar文件,該怎麼辦?我已經發佈一個Android AAR庫 –

+2

@DeanWild加上'&P = aar' – sbk

22

Nexus LATEST被設計爲與maven插件一起使用,而不是使用常規工件。 Nexus並不保證最新版本可以在其他情況下使用。如果現在它會返回正確版本的工件,明天這可能會停止工作,例如,如果您運行Nexus存儲庫的重建元數據。你是否想要依賴可能在任何時候破壞的機制(例如在發佈過程中?)。我懷疑。閱讀this article瞭解更多信息。

爲了找到最新版本神器您應該編寫自己的腳本來調用搜索API和排序工件版本,只要你想。或者你可以編寫你自己的Nexus插件。

另外,如果您的工作流程允許,您可以使用快照,而不是發行版本。如果您不增加數字部分,那麼x.y.z-SNAPSHOT將始終返回最新的二進制。

最後一點:如果你有這樣的情況下,使用不使用最新版本的文物,在絕大多數情況下,那麼什麼是錯的與你的部署(或任何你正在做的)。一般來說,你應該知道你要使用的確切版本。

+0

「最新版本」的一個簡單例子就是開發者環境。開發人員通常希望在最新的版本上做些事情,例如檢查他們的最新變化如何影響他們正在開發的完整軟件。 – erikbwork

+0

爲了構建一條管道 - 版本在Build階段確定,然後傳遞給下一個作業。你至少不會使用LATEST,至少因爲你最終會在管道的不同部分(由於競爭條件)部署不同的版本。 –

+0

當然,您不會將其添加到自動化步驟中。但是,你的開發人員使用的是手動'wget'最新'install_bundle.tar.gz'例如(或'PIP安裝'等) – erikbwork

10

這個答案已被複制來自:https://stackoverflow.com/a/39485361/1450799

我有Linux操作系統和我沒有訪問REST API,所以我用下面的命令來獲得Nexus獲得最新版本的快照:

的示例快照maven-metadata。從WSO2庫中的XML:

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

提取從最新的XML標籤內的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" 

從版本XML標籤中提取的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" 

這兩個命令的直到今天2016年9月14日的結果是:

5.3.0-SNAPSHOT 
+0

不知道爲什麼所有的下跌票?這種方法對於我們這些使用的Nexus 3,這是任何長有REST API –

+1

我知道有在#1徽章其通過給反對票後達到特別有用。爲此,許多人的搜索和投票負,他們不能undrestand的第一件事到達徽章:) –

1

LATEST版本試圖REST服務,並發現它並不總是工作(見@Stanislav response)後,我結束瞭解析metadata.xml文件中創建這一個班輪Linux命令:

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 

剛改爲合適的網址,它應該爲你工作。

乾杯

+1

適用於Nexus 3.0及以上不再存在,建議您可以使用 dannrob

+0

@dannrob感謝,更新了! – idelvall

+1

@dannrob我更新了腳本以支持這兩個選項 – idelvall