本文使用docker鏡像實作nexus的一鍵部署,并且進行相關配置,測試完成maven工程的打包上傳
文章目錄
-
- 一 利用Docker鏡像搭建Nexus倉庫
-
-
- 1 建立 nexus-data 資料卷
- 2 啟動鏡像
-
- 二 完成Nexus設定
-
-
- 修改密碼
- 添加使用者
- 擷取倉庫url
-
- 三 配置本地Maven
-
-
- 0 maven 配置檔案基礎知識
- 1 配置 servers
- 2 配置profile
- 3 配置activeProfiles
- 4 配置鏡像
-
- 四 配置pom檔案
- 五 測試
- 六 其他
一 利用Docker鏡像搭建Nexus倉庫
這部分直接參考 https://hub.docker.com/r/sonatype/nexus3/ 就好
啟動大概需要兩三分鐘,預設的 使用者/密碼 是:admin / admin123
1 建立 nexus-data 資料卷
docker volume create --name nexus-data
2 啟動鏡像
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
二 完成Nexus設定
輸入對應的ip:port進入首頁,點右上角的 Sign in 按鈕用預設賬号登入,看到的界面大緻如下

左邊的選項寫得很清楚,分别是檢索、浏覽、上傳功能。
修改密碼
建議新使用者登入立即修改密碼
點選右上角的admin進入賬戶管理,點選Change password按鈕,輸入舊密碼驗證通過後即可修改密碼
添加使用者
點選上面齒輪圖示進入系統設定,選擇Security下的Users,Create local user建立一個本地使用者,如下
這裡我将所有的角色都賦予了LinShen,使其擁有最大的權限,要定制合理角色權限的話到 Roles 選項設定
擷取倉庫url
預設的倉庫清單如下,主要用到的有 maven-public(共有倉庫,不區分snapshots和releases),maven-snapshots(snapshots私有倉庫),maven-releases(relsases私有倉庫)
複制出url,下面配置倉庫url要用到
三 配置本地Maven
配置本地Maven安裝目錄下的 conf/settings.xml 檔案,建議先把原檔案備份
這裡settings.xml的寫法主要參考阿裡雲私有倉庫給的配置檔案
0 maven 配置檔案基礎知識
首先根據activeProfiles找到對應id的profile,profile下管理了repositories和pluginRepositories兩大子產品,其下有各個具體倉庫,倉庫配置了id,url,releases和snapshots支援資訊等。根據id尋找倉庫url的時候會根據mirror下的mirrorOf規則比對到對應的鏡像倉庫url,并用鏡像倉庫url代替原倉庫url
1 配置 servers
配置servers節點如下
<servers>
<server>
<id>lin-releases</id>
<username>LinShen</username>
<password>密碼</password>
</server>
<server>
<id>lin-snapshots</id>
<username>LinShen</username>
<password>密碼</password>
</server>
</servers>
2 配置profile
配置 id為nexus的 profile節點,profile節點下有id,repositories和pluginRepositories三個主要部分,repositories和pluginRepositories下有各自有releases、snapshots版本的共有倉庫和releases、snapshots版本的私有倉庫,私有倉庫的id和servers的id統一即可
這裡将私有倉庫的url根據releases、snapshots配置,其他的統一用共有倉庫的url即可
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://120.79.168.114:9081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://120.79.168.114:9081/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>lin-releases</id>
<url>http://120.79.168.114:9081/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>lin-snapshots</id>
<url>http://120.79.168.114:9081/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://120.79.168.114:9081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://120.79.168.114:9081/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>lin-releases</id>
<url>http://120.79.168.114:9081/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>lin-snapshots</id>
<url>http://120.79.168.114:9081/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
3 配置activeProfiles
使上文的profile生效
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
4 配置鏡像
這個其實是很關鍵的,下面的作用就是給id為 lin-releases 和 lin-snapshots 之外的倉庫配置鏡像位址,是以,其實上面可以不用配置那麼多的…
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>!lin-releases,!lin-snapshots</mirrorOf>
<name>mirror</name>
<url>http://120.79.168.114:9081/repository/maven-public</url>
</mirror>
</mirrors>
四 配置pom檔案
在pom檔案添加如下内容即可
<distributionManagement>
<repository>
<id>lin-releases</id>
<url>http://120.79.168.114:9081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>lin-snapshots</id>
<url>http://120.79.168.114:9081/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
五 測試
在pom檔案所在目錄下執行
mvn clean deploy
即可,注意,不要使用
deploy:deploy
,否則容易出錯
前者将在每個循環中運作所有步驟(除非你自己選擇跳過),包括安裝(如編譯,打包,測試等)。後者甚至不會編譯或打包你的代碼,它隻會運作那一個目标。
運作輸出應該如下
這個時候去Nexus看一下,先點Browse,再選擇maven-snapshots倉庫,可以看到如下
如果是去看maven-central内容會更多
六 其他
其實,搭這個東西本身不難,隻是體驗一下而已,生産開發我還是推薦直接使用阿裡雲 雲效 的私有倉庫
https://repomanage.rdc.aliyun.com/my/repo ,友善快捷,直接使用阿裡雲鏡像倉庫服務
如果工程開發中想跳過上傳步驟,可以在pom檔案中添加如下配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>