源服務(wù)器:
系統(tǒng): win
nexus版本: nexus-3.70.1-02-java8-win64
目標(biāo)服務(wù)器:
系統(tǒng): linux
nexus版本: 最新版
jdk: 17
這里有坑,
1, nexus-3.70.x最高支持jdk11 ,但是我們的環(huán)境是jdk17, 所以運(yùn)行不了,
2, 另外nexus-3.70.x之前是OrientDB, 之后是h2
剛開始各種辦法都試過(guò)了, 什么覆蓋,什么cli工具, 反正沒(méi)一個(gè)成功的, 后來(lái)采用同bat腳本直接遍歷上傳, 將bat放在私庫(kù)目錄, 然后運(yùn)行就可以
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
cls
:: ====================== 你只需要改這里 ======================
set "SOURCE=http://源ip:8081"
set "S_USER=admin"
set "S_PASS=xxx"
set "S_REPO=maven-releases"
set "TARGET=http://目標(biāo)ip:8081"
set "T_USER=admin"
set "T_PASS=xxx"
set "T_REPO=maven-releases"
:: ==========================================================
echo.
echo ============ Nexus 遷移工具(穩(wěn)定無(wú)死循環(huán)) ============
echo.
set "token="
set "page=1"
:loop
echo 正在讀取第 !page! 頁(yè)...
:: 獲取一頁(yè)數(shù)據(jù)
curl -s -u "%S_USER%:%S_PASS%" "%SOURCE%/service/rest/v1/components?repository=%S_REPO%&continuationToken=!token!" -o c.json
:: 解析出所有 group|artifact|version
powershell -Command "$json=Get-Content c.json -Raw | ConvertFrom-Json; foreach($i in $json.items){Write-Host $i.group'|'$i.name'|'$i.version}" > list.txt
:: 開始上傳
for /f "tokens=1-3 delims=|" %%g in (list.txt) do (
set g=%%g
set a=%%h
set v=%%i
echo 遷移:!g!:!a!:!v!
:: 拼接路徑:com/xxx/xxx/1.0
set "path=!g:.=/!/!a!/!v!"
:: 上傳 pom
curl -s -u "%S_USER%:%S_PASS%" "%SOURCE%/repository/%S_REPO%/!path!/!a!-!v!.pom" | curl -s -u "%T_USER%:%T_PASS%" -X PUT -T - "%TARGET%/repository/%T_REPO%/!path!/!a!-!v!.pom"
:: 上傳 jar
curl -s -u "%S_USER%:%S_PASS%" "%SOURCE%/repository/%S_REPO%/!path!/!a!-!v!.jar" | curl -s -u "%T_USER%:%T_PASS%" -X PUT -T - "%TARGET%/repository/%T_REPO%/!path!/!a!-!v!.jar"
)
:: 獲取下一頁(yè) token(沒(méi)有就退出,絕對(duì)不會(huì)死循環(huán))
for /f "delims=" %%t in ('powershell -Command "$json=Get-Content c.json -Raw|ConvertFrom-Json; if($json.continuationToken){$json.continuationToken}else{''}"') do (
set "token=%%t"
)
if "!token!"=="" goto end
set /a page+=1
goto loop
:end
echo.
echo ? 遷移完成
del c.json list.txt
pause
exit /b