介紹一下背景,項目要遷移進坑人的離線的內網開發,將在同事那編譯通過的代碼和maven倉庫拷進內網,打算編譯通過之后再上傳私服,結果配好maven之后,本地庫中的部分jar包顯示沒有引入,如下面的波浪線
想到可能是idea提示的不正確,直接編譯吧,結果編譯失敗,主要錯誤信息如下
[ERROR] Failed to execute goal on project zeus-common-redis: Could not resolve dependencies for project com.hsjry:zeus-common-redis:jar:1.0.0-SNAPSHOT: Cannot access hundsun-nexus (http://10.253.40.200:6060/nexus/content/groups/public) in offline mode and the artifact redis.clients:jedis:jar:2.9.0 has not been downloaded from it before. -> [Help 1]
查看本地倉庫,是存在該jar包的
問題出在目錄中的多余文件,它們主要包含下載未成功的文件(.lastUpdated),遠程倉庫的配置信息(_remote.repositories),每次在更新maven項目的時候,每一個jar包路徑下的_remote.repositories文件都會同setting.xml中設置的倉庫地址id進行判斷,如果沒有匹配,會自動更新該jar包的相關文件,如果未聯網則會出現jar無法發現的錯誤,導致即使jar存在,maven項目也無法使用該jar的情況。同時由於未聯網,當下載失敗,會生成后綴為.lastUpdated的文件。如果使用公司的內網倉庫,_remote.repositories文件變為_maven.repositories。
刪除整個倉庫的后綴為.repositories,.lastUpdated的文件,同時為保險,我也刪除了校驗文件(.sha1后綴),idea中刪除整個項目(root項目)的依賴,重新引入之后,問題解決。
刪除后綴為.lastUpdated的文件腳本
windows下:delLastUpdated.bat
@echo off rem create by NettQun rem 這里寫你的倉庫路徑 set REPOSITORY_PATH=E:\java12\ProgRepository\zeusRepository rem 正在搜索... for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do ( echo %%i del /s /q "%%i" ) rem 搜索完畢 pause