背景
- 純內網環境,無法連互聯網
- 待初始化maven私服在內網,無法通過配置代理完成初始化
- 通過nexus部署私服,初始化maven依賴和npm依賴
初始化思路
- 通過nexus管理端上傳組件功能上傳組件,支持maven組件和npm組件
- 通過maven插件命令行指令上傳組件,僅能上傳maven組件
- 通過nexus的api接口上傳組件,支持maven組件和npm組件
其中前兩個思路適用于少量組件需要上傳的情況,若需要上傳的組件成百上千個,則建議要么想辦法打通網絡通過網絡初始化,要么使用程序循通過api批量上傳。
通過 nexus 管理端功能上傳組件
使用有權限的賬戶登錄 nexus 后在倉庫頁的左側菜單里選擇【Upload】功能上傳組件,無論是maven組件還是npm組件只能上傳到 hosted 類型的倉庫中。
1、maven組件可上傳的文件有jar、pom
2、npm組件可上傳的文件是 tgz 文件
3、這個功能僅支持上傳 Release 版本的依賴,nexus3 會根據上傳文件的版本判斷是否符合要求,比如版本號帶有 SNAPSHOT 標識,則認為是快照版,不允許上傳


上傳maven依賴

1、同時上傳 jar 和 pom 文件
分別瀏覽兩個文件,點擊 Browse 按鈕,分別選擇要上傳的 jar 和 pom文件,當 pom 文件選擇完之后,Component coordinates 區域會自動取消(即此時 nexus 自動從 pom 文件中提取相關內容)。
2、僅上傳 pom 文件
當需要上傳的是類似父模塊的時候,這種情況不存在 jar,只有 pom 文件,選中 pom 后,Components coordinates 區域同樣會自動取消。
3、僅上傳 jar 文件
當僅上傳 jar 文件時,需要填寫 Components coordinates 對應的信息,即 Group ID、Artifact ID、Version,這種情況基本遇不到。
命令行通過 maven 命令上傳
1、在 maven 配置文件中配置具有上傳權限的用戶信息,也可以給匿名用戶臨時賦管理員權限(這有風險,萬一用完后忘了收回呢)
2、確保maven依賴的插件在本地倉庫里是存在的,否則命令無法正常執行
在settings.xml中配置用戶信息,用戶名密碼根據實際情況配置
<servers>
<server>
<id>local-nexus3</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
注意:若需要上傳的 jar 、pom 文件在本地倉庫里,先將文件從本地倉庫復制到其他目錄,否則會上傳失敗
1、同時上傳 jar 和 pom
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.jar -DpomFile=XXX.pom
-s:指定maven使用的配置文件
-Durl:maven 倉庫地址,注意倉庫類型 Release、Snapshot、Mixed
-Dfile:要上傳的jar文件
-DpomFile:與jar文件對應的pom文件
-DrepositoryId:倉庫id,給maven工具使用的,主要是用來獲取上邊 server 里配置的用戶信息,這個值要跟 server 里配置的 id 里的值一樣
2、僅上傳 pom
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.pom -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0.0-SHAPSHOT -Dpackaging=pom
--Dfile為對應的pom文件
groupId、artifactId、packaging、version的值從pom文件中復制
3、僅上傳 jar
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.jar -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0.0 -Dpackaging=jar
若上傳失敗,可以增加 -e 和 -X 參數,查看輸出的日志信息,一般是因為缺少 maven 依賴
通過rest api接口上傳
api接口文檔在:管理員賬號登錄--》設置--》System--》API,組件相關接口查看Components 里的內容


自己通過程序循環調用 api 接口將依賴上傳至 nexus 私服。
注意上傳權限問題,在http請求頭里設置Authorization:Basic[空格][用戶名:密碼對應的base64編碼字符串],比如admin:admin123對應為YWRtaW46YWRtaW4xMjM=
注意:調用api實際使用時不能用admin:admin123去做認證,因為nexus認為admin123是admin的默認密碼,默認密碼驗證會不通過。
附:上傳程序:
https://pan.baidu.com/s/1kJExCa974xk_wkqYXFgd9w?pwd=akc2
1、上傳程序里的日志文件要先創建
2、權限認證字符串根據實際調整
參考:
- nexus3:https://help.sonatype.com/docs
- maven deploy插件:https://maven.Apache.org/plugins/maven-deploy-plugin/usage.html
- 前端依賴離線下載:https://github.com/Meir017/node-tgz-downloader
歡迎交流、指正。