沉澱,成長,突破,幫助他人,成就自我。
大家好,我是冰河~~
在研發的過程中,很多企業都會針對自身業務特點來定製研發一些工具類庫,但是這些工具類庫又不會對外公開,那如何在組織內部共享這些類庫呢?一種很好的方式就是在公司內部搭建一套Maven私服倉庫。
一、背景知識
搭建Maven私服倉庫可以提高項目構建和部署的效率、穩定性和安全性,同時方便管理內部開發的組件和私有庫,比較適用於企業內部或者特定場景下的需求。
就拿我們星球的分佈式IM即時通訊系統來說,對於後端服務,我們將其劃分成了 多系統共用模型與工具、即時通訊後端服務、大後端平臺、即時通訊SDK、OpenAI大模型接入服務 等。
其中,多系統共用模型與工具會被其他服務依賴,即時通訊SDK和OpenAI大模型接入服務也會被其他服務依賴,並且多系統共用模型與工具、即時通訊SDK和OpenAI大模型接入服務都是我們開發分佈式IM即時通訊系統時的私有庫和組件,所以,在設計和研發分佈式IM即時通訊系統的過程中,我們也需要搭建一套自己的Maven私服來統一管理這些私有庫和組件。
好了,那接下來,我們就一起搭建Maven私服倉庫吧。
二、環境說明
- 服務器版本:CentOS7
- 主機名:binghe102
- IP地址:192.168.106.102
- Maven私服鏡像:sonatype/nexus3
三、環境搭建
基於Docker搭建Maven私服的步驟如下所示。
3.1下載Nexus3鏡像
在服務器命令行輸入如下命令,下載Nexus3鏡像。
docker pull sonatype/nexus3
這裏,視網絡情況,可能需要耐心等待一會兒。
3.2 查看Nexus3鏡像
在服務器命令行輸入如下命令,查看下載的Nexus3鏡像。
[root@binghe102 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sonatype/nexus3 latest 589f7296a4a2 23 months ago 655MB
可以看到,已經成功下載Nexus3鏡像。
3.3 創建Nexus3掛載文件夾
在服務器命令行輸入如下命令,創建nexus的掛載文件夾。
mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data
3.4 啓動Nexus3容器
在服務器命令行輸入如下命令,啓動Nexus3容器。
docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data --restart=always sonatype/nexus3
可以看到,在上述啓動命令中,我們將Nexus3容器的/nexus-data
目錄映射到了宿主機的/usr/local/nexus-data
目錄。此時,Nexus3容器運行過程中,在/nexus-data
目錄產生的文件和日誌都會在宿主機的/usr/local/nexus-data
目錄中查看到。
3.5 查看Nexus3容器啓動狀態
在服務器命令行輸入如下命令,查看Nexus3容器啓動狀態。
[root@binghe102 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59e27830bbaa sonatype/nexus3 "sh -c ${SONATYPE_DI…" 2 minutes ago Up 2 minutes 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp nexus
可以看到,Nexus3容器啓動成功,監聽了8081端口。
四、Nexus3配置
搭建完Nexus3環境後,我們還需要對其進行配置,具體配置的步驟如下所示。
4.1 打開Nexus3頁面
Nexus3容器啓動時監聽的端口和宿主機端口都是8081,所以,我們在瀏覽器地址欄輸入http://192.168.106.102:8081
打開Nexus3頁面,如圖1所示。
4.2 登錄Nexus3
點擊Nexus3右上角的登錄,如圖2所示。
點擊後會彈出如圖3所示的提示框。
根據提示得知,初始密碼的存放位置爲/nexus-data/admin.password
,因爲我們在啓動Nexus3容器時,將Nexus3容器的/nexus-data
目錄映射到了宿主機的/usr/local/nexus-data
目錄,所以,我們在宿主機的/usr/local/nexus-data
目錄中也能夠查詢到admin.password
文件。
所以,在宿主機中輸入如下命令即可查看到admin.password文件。
ll /usr/local/nexus-data
具體如圖4所示。
輸入如下命令查看admin.password
文件的內容。
[root@binghe102 ~]# cat /usr/local/nexus-data/admin.password
517842df-1a2d-49c9-b4c3-b9ad4cf0fe00
此時,我們就查看到登錄Nexus3的admin賬號的密碼爲517842df-1a2d-49c9-b4c3-b9ad4cf0fe00
,將admin賬號和對應的密碼輸入到圖3所示的提示框中,即可登錄Nexus3,如圖5所示。
登錄後的界面如圖6所示。
可以看到,首次登錄後會自動彈出完成必要設置的提示框,點擊Next按鈕,設置新密碼,如圖7所示。
這裏,自行記錄新設置的密碼,用於後續登錄Nexus。
點擊Next按鈕,選擇nable anonymous access
,如圖8所示。
點擊Next按鈕,如圖9所示。
點擊Finish按鈕,即可完成設置。
4.3 配置阿里雲代理倉庫
Nexus默認使用的遠程倉庫爲maven-central
,從這個遠程倉庫下載依賴很慢,經常連不上,如圖10所示。
鼠標單機maven-central
倉庫,查看maven-central
倉庫配置的遠程鏈接,如圖11所示。
可以看到,maven-central
倉庫配置的遠程鏈接爲https://repo1.maven.org/maven2/
,從這個遠程倉庫下載依賴很慢,經常連不上,所有我們需要配置阿里雲遠程代理倉庫。
回到圖10所示的頁面,點擊Create repository
按鈕,如圖12所示。
點擊後進入選擇倉庫類型的頁面,這裏我們選擇maven2(proxy)
類型,如圖13所示。
點擊選則maven2(proxy)
類型後,進入配置遠程代理倉庫的頁面,如圖14所示。
其中,每個配置項如下所示。
- Name:aliyun-central
- Version policy:Release
- Layout policy:Strict
- Remote storage:http://maven.aliyun.com/nexus/content/groups/public
接下來,拖動3-14頁面右側的滾動條,滑到最下面,點擊Create repository按鈕,如圖15所示。
點擊Create repository按鈕後,就可以在Repositories列表中看到新配置的阿里雲代理倉庫了,如圖16所示。
並且Status顯示的是Online - Ready to connect
,說明阿里雲遠程倉庫配置成功。
4.4 配置倉庫組
接下來,需要將aliyun-central配置到倉庫組,並且將aliyun-central排在maven-central上面。具體步驟如下所示。
在Repositories列表中,點擊maven-public
,如圖17所示。
點擊後進入如圖18所示的頁面。
下拉頁面右側的滾動條,找到如圖19所示的配置。
將aliyun-central移動到右側,並排在最上面,如圖20所示。
點擊Save按鈕保存配置。
4.5 創建用戶
接下來,創建一個用於上傳Jar包到倉庫的用戶,具體步驟如下所示。
點擊Security菜單下的Users菜單,如圖21所示。
點擊Users菜單後,點擊Create local user按鈕,如圖22所示。
隨後,按照圖23所示設置用戶的基本信息。
這裏,自行記錄用戶的密碼,用於後續上傳jar文件使用,配置好之後,點擊底部的Create local user按鈕即可。點擊後在Security菜單下的Users菜單的用戶列表中,可以查看到新創建的本地用戶,如圖24所示。
至此,Nexus3配置完畢。
五、配置本地Maven倉庫
配置完Nexus後,接下來,還需要對本地的Maven倉庫進行配置,主要就是對Maven的的settings.xml文件進行配置。
5.1 複製settings文件
複製setting.xml文件爲setting-binghe.xml文件,如圖25所示。
5.2 配置servers節點
在settings-binghe.xml文件中,找到servers節點,在servers節點中,配置5.5節創建的用戶,如下所示。
<server>
<id>binghe</id>
<username>binghe</username>
<password>binghe123</password>
</server>
5.3 配置mirrors節點
在settings-binghe.xml文件中,找到mirrors節點,在mirrors節點中,配置倉庫地址,如下所示。
<!--本地私服倉庫地址-->
<mirror>
<id>central</id>
<name>Local Repository</name>
<url>http://192.168.106.102:8081/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
<!--阿里雲倉庫地址-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
5.4 配置profiles節點
在settings-binghe.xml文件中,找到profiles節點,在profiles節點中,配置倉庫信息,如下所示。
<profile>
<id>maven-public</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
<repositories>
<repository>
<id>nexus-public</id>
<url>http://192.168.106.102:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
至此,Maven私服倉庫搭建完畢,並且本地Maven也已經配置完畢。
後續使用Maven構建項目時,指定使用binghe-settings.xml文件即可將依賴的Jar文件和生成的Jar文件上傳到Maven私服倉庫,如果使用IDEA編譯項目,也需要在IDEA中,將Maven的配置文件指定爲settings-binghe.xml。
注意:我已經將settings-binghe.xml文件上傳到本節對應源碼分支的environment/maven
目錄下,大家自行獲取即可。
六、項目pom.xml配置
搭建完Maven私服倉庫,配置好本地Maven倉庫後,還需要在項目的pom.xml文件中進行相應的配置,具體如下所示。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!--發佈代碼Jar插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!--發佈源碼插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<!--這裏的id與settings.xml中的servers節點配置的用戶ID一直,這樣才能使用配置的用戶去上傳到maven私有倉庫 -->
<!--此倉庫對應的爲RELEASE版本的jar-->
<id>binghe</id>
<url>http://192.168.106.102:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!--這裏的id與settings.xml中的servers節點配置的用戶ID一直,這樣才能使用配置的用戶去上傳到maven私有倉庫 -->
<!--此倉庫對應的爲SNAPSHOT版本的jar-->
<id>binghe</id>
<url>http://192.168.106.102:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
是不是很簡單?你照着文章一步步實操,就可以基於Docker搭建屬於自己的Maven私服倉庫了。
七、寫在最後
這些真實場景的項目設計與落地實現,在冰河的知識星球除了分佈式IM即時通訊系統外,還有其他5個項目,這些項目的需求、方案、架構、落地等均來自互聯網真實業務場景,讓你真正學到互聯網大廠的業務與技術落地方案,並將其有效轉化爲自己的知識儲備
好了,今天就到這兒吧,我是冰河,我們下期見~~