本文介紹如何在Linux服務器通過Docker搭建Nexus私服
一、安裝Nexus
docker run -d -p 8081:8081 --name nexus -v /srv/nexus/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
通過docker logs -f nexus
查看啓動日誌,當出現Started Sonatype Nexus OSS
說明啓動成功,這時通過http://ip:8081
即可訪問
點擊右上角Sign in進行登錄,賬號爲admin
,密碼需要去鏡像中查看
# 進入鏡像
docker exec -it nexus bash
# 查看密碼,路徑在登錄框會提示,然後複製即可,登陸成功後會讓你修改密碼
cat /nexus-data/admin-password
至此,就啓動完成了,進入主頁後點擊左邊菜單欄的Browse
即可查看你擁有的倉庫啦
二、Nexus倉庫
1、倉庫類型
Nexus有四種倉庫和四種倉庫類型
a、倉庫
倉庫名 | 描述 |
---|---|
maven-central | maven中央庫,默認從https://repo1.maven.org/maven... |
maven-releases | 私庫發行版jar |
maven-snapshots | 私庫快照(調試版本)jar |
maven-public | 倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用 |
b、類型
類型 | 描述 |
---|---|
group(倉庫組類型) | 用於方便開發人員自己設定的倉庫 |
hosted(宿主類型) | 內部項目的發佈倉庫(內部開發人員,發佈上去存放的倉庫) |
proxy(代理類型) | 從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠程倉庫的路徑) |
virtual(虛擬類型) | 虛擬倉庫(這個基本用不到,重點關注上面三個倉庫的使用) |
2、拉取jar包流程
Maven可直接從宿主倉庫下載構件,也可以從代理倉庫下載構件,而代理倉庫間接的從遠程倉庫下載並緩存構件,爲了方便,Maven可以從倉庫組下載構件,而倉庫組並沒有實際的內容(下圖中用虛線表示,它會轉向包含的宿主倉庫或者代理倉庫獲得實際構件的內容)
3、創建倉庫
進過上面的講解,我們對倉庫已經有了瞭解,接下來我們進行創建倉庫,分爲是代理倉庫(proxy)
、宿主倉庫(hosted)
、倉庫組(group)
,點擊主頁上面的小螺絲然後在選擇Repositories
進入倉庫管理列表,然後就可以開始創建我們的倉庫啦,選擇倉庫類型的時候一定要選擇maven2
a、proxy代理倉庫
我們使用阿里的中央倉庫
b、hosted宿主倉庫
這裏可以創建releases
和snapshot
類型的倉庫,這裏就演示一種
c、group倉庫組
三、項目配置
前兩章走完我們已經在Linux服務器部署好了nexus並且創建好了我們的倉庫,接下來我們就來試着在項目中配置
1、創建一個Maven項目
爲了演示,就隨便創建個工具類玩,以下是目錄結構
2、pom文件
這裏爲了演示我就配了release
倉庫,實際上應該同時要配置snapshot
倉庫,maven會判斷版本後面是否帶了-SNAPSHOT
,如果帶了就發佈到snapshots倉庫,否則發佈到release倉庫
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gjing</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<distributionManagement>
<repository>
<!--ID可以隨便寫,但是要與maven的setting文件中一致-->
<id>releases</id>
<!--指向倉庫類型爲hosted(宿主倉庫)的儲存類型爲Release的倉庫---->
<url>http://你nexus倉庫的IP:8081/repository/me-release/</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</build>
</project>
3、maven配置setting文件
id一定要和項目pom文件中的一致
<servers>
<server>
<id>releases</id><!--對應項目pom文件中設置的-->
<username>admin</username>
<password>admin123</password>
</server>
</servers>
四、發佈
如果使用的是IDEA開發工具可以直接在右邊工具欄Maven工具點擊deploy,也可以直接在命令行進入本項目根目錄進行mvn deploy
這時nexus私服上也會出現我們的jar包
到此就發佈成功啦
五、使用
讓maven項目使用nexus作爲遠程倉庫有兩種方式,第一種是在項目的pom.xml中進行更改,讓單個項目使用nexus倉庫;另一種是通過修改maven的配置文件settings.xml進行更改,讓所有項目都使用nexus倉庫。我們這裏採取第二種,只需要setting.xml就可以了。還有就是拉取jar的私服倉庫地址只要寫我們的倉庫組就ok,因爲在創建這個組的時候,裏面已經包含了其它三個倉庫
1、settings.xml文件
在maven的settings文件中找到mirrors
,加上我們組倉庫的mirror
,url填寫我們創建的組地址即可,id、name可以隨便填寫,mirrorOf可以和我寫一樣的
<mirrors>
<mirror>
<id>mynexus</id>
<name>myself nexus repository</name>
<url>http://xxx:8081/repository/me-group/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
2、驗證
只需要在其他項目中pom文件引入即可,成功引入且在項目中可以正常使用我們剛剛定義的工具類
到此整個流程就結束啦,如果有任何問題可以在評論區告訴我哦!!!