Maven私服Nexus安裝與使用

轉自:https://blog.csdn.net/ThinkWon/article/details/94346681

隨時隨地閱讀更多技術實戰乾貨,獲取項目源碼、學習資料,請關注源代碼社區公衆號(ydmsq666)、加博主微信(guyun297890152)可以進入微信技術交流羣、QQ技術交流羣(183198395)。

Nexus介紹
Nexus是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。這些優點使其日趨成爲最流行的Maven倉庫管理器。除此之外,Nexus還可以管理Docker鏡像。

注:Maven簡介可參考Maven簡介

私服的好處
沒有私服時:本地倉庫沒有,則去中央倉庫下載

搭建私服後:本地倉庫沒有,再去私服下載,私服沒有,再去中央倉庫下載

  • 減少網絡帶寬流量
  • 加速Maven構建
  • 部署第三方構件
  • 提高穩定性、增強控制
  • 降低中央倉庫的負載

使用Docker安裝Nexus私服
注意:請先自行安裝Docker

查找Nexus3鏡像

docker search nexus3

拉取Nexus3鏡像 

docker pull sonatype/nexus3

注:最新版本的Nexus3.18在下載依賴時有點問題,建議安裝3.17版本的Nexus

具體報錯是這樣的:Caused by: org.apache.maven.wagon.authorization.AuthorizationException: Not authorized

查看鏡像

docker images

運行Nexus容器

#進入/opt目錄,創建宿主機掛載目錄並設置權限
cd /opt
mkdir nexus-data
chown -R 200 nexus-data
#運行nuxus私服
# -d:後臺運行
# -p:將容器內部端口向外映射,第一個參數是宿主機端口,第二個參數容器端口
# --name:命名容器名稱
# --restart always在容器退出時總是重啓容器
# -v:將容器內配置、日誌、數據文件等文件夾掛載到宿主機指定目錄
docker run -d --name nexus3 -p 8081:8081 --restart always -v /opt/nexus-data:/nexus-data sonatype/nexus3

如果沒有設置權限,運行nexus時就會報如下錯誤

Warning:  Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning:  Forcing option -XX:LogFile=/tmp/jvm.log
Unable to update instance pid: Unable to create directory /nexus-data/instances
/nexus-data/log/karaf.log (No such file or directory)
Unable to update instance pid: Unable to create directory /nexus-data/instances
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory

登錄Nexus

訪問web地址:http://ip:8081

Nexusé¦æ¬¡ç»å½çé¢

從3.17版本開始默認密碼不再是admin123,密碼是隨機生成。首次登錄頁面會顯示admin用戶的密碼在/nexus-data/admin.password

注意:我們剛纔安裝的時候把/nexus-data目錄掛載到宿主機的/opt/nexus-data,所以密碼在/opt/nexus-data/admin.password

執行命令vim /opt/nexus-data/admin.password,即可查看到如9c3ac7fb-4264-4457-8e48-4aa84c71e7ad這樣的密碼,然後登錄即可。用戶名:admin,密碼:/opt/nexus-data/admin.password裏面的密碼

登錄後會讓用戶設置新的密碼。這裏把用戶名和密碼設置爲admin/admin123

登錄後界面如下
Nexusç»å½åçé¢

 默認倉庫說明

maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar
maven-releases:私庫發行版jar,初次安裝請將Deployment policy設置爲Allow redeploy
maven-snapshots:私庫快照(調試版本)jar
maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml或項目pom.xml中使用

倉庫類型

Group:這是一個倉庫聚合的概念,用戶倉庫地址選擇Group的地址,即可訪問Group中配置的,用於方便開發人員自己設定的倉庫。maven-public就是一個Group類型的倉庫,內部設置了多個倉庫,訪問順序取決於配置順序,3.x默認Releases,Snapshots,Central,當然你也可以自己設置。	
Hosted:私有倉庫,內部項目的發佈倉庫,專門用來存儲我們自己生成的jar文件
3rd party:未發佈到公網的第三方jar (3.x去除了)
Snapshots:本地項目的快照倉庫
Releases: 本地項目發佈的正式版本
Proxy:代理類型,從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage屬性的值即被代理的遠程倉庫的路徑),如可配置阿里雲maven倉庫
Central:中央倉庫
Apache Snapshots:Apache專用快照倉庫(3.x去除了)

配置阿里雲公共倉庫

Nexus的maven-group的默認查找方式爲:maven-releases --> maven-snapshots --> maven-central,我們在中間再加一個阿里雲倉庫,加快訪問速度。

éç½®é¿éäºå¬å±ä»åº1

選擇proxy類型

å¨è¿éæå¥å¾çæè¿° 

信息填寫如下

倉庫名字:maven-aliyun
阿里雲遠程maven倉庫地址:http://maven.aliyun.com/nexus/content/groups/public/
其他選項:默認即可

éç½®é¿éäºå¬å±ä»åº3 

修改maven-public中的倉庫引用及順序:

éç½®é¿éäºå¬å±ä»åº4 

至此,配置完畢!我們在maven使用maven-public倉庫地址的時候,會按照如下順序訪問:本地倉庫 --> 私服maven-releases --> 私服maven-snapshots --> 遠程阿里雲maven倉庫 --> 遠程中央倉庫。

Maven配置使用Nexus私服
Maven配置私服下載依賴方式
maven配置私服下載有兩種方式

  • setting.xml:該文件配置的是全局模式

  • pom.xml:該文件的配置的是項目獨享模式

 若pom.xml和setting.xml同時配置了,以pom.xml爲準

setting.xml文件配置

這個時候不需要再配置pom.xml文件,即可使用私服下載jar依賴包

配置私服鏡像

<mirrors>   
    <mirror>
      <!--該鏡像的唯一標識符。id用來區分不同的mirror元素。 -->
      <id>nexus-releases</id>
      <!--*指的是訪問任何倉庫都使用我們的私服-->
      <mirrorOf>*</mirrorOf>    
      <!--該鏡像的URL。構建系統會優先考慮使用該URL,而非使用默認的服務器URL。 -->
      <url>http://10.172.0.201:8081/repository/maven-public/</url>     
    </mirror>    
    <mirror>     
      <id>nexus-snapshots</id>     
      <mirrorOf>*</mirrorOf>     
      <url>http://10.172.0.201:8081/repository/maven-snapshots/</url>     
    </mirror>  
</mirrors>

鏡像的URL可以從頁面中的copy按鈕直接複製

éåçURL

配置從私服下載jar包

<profiles>

    <profile>
        <!--profile的id-->
        <id>nexus</id>
        <repositories>
            <repository>
                <!--倉庫id,repositories可以配置多個倉庫,保證id不重複-->
                <id>nexus-releases</id>
                <!--倉庫地址,即nexus倉庫組的地址-->
                <url>http://nexus-releases</url>
                <releases>
                    <!--是否下載releases構件-->
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>nexus-snapshots</id>
                <url>http://nexus-snapshots</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
        <pluginRepositories>
            <!-- 插件倉庫,maven的運行依賴插件,也需要從私服下載插件 -->
            <pluginRepository>
                <!-- 插件倉庫的id不允許重複,如果重複後邊配置會覆蓋前邊 -->
                <id>nexus-releases</id>
                <url>http://nexus-releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
            <pluginRepository>
                <id>nexus-snapshots</id>
                <url>http://nexus-snapshots</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    </profile>  

</profiles>

<!--激活profile-->
<activeProfiles>    
    <activeProfile>nexus</activeProfile>    
</activeProfiles>

 

pom.xml文件配置

如果你配置了pom.xml,則以pom.xml爲準

<repositories>
	<repository>
		<id>maven-nexus</id>
		<name>maven-nexus</name>
		<url>http://10.172.0.201:8081/repository/maven-public/</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
</repositories>

配置Maven連接私服打包上傳項目

第一步,修改setting.xml文件,指定releases和snapshots server的用戶名和密碼

<servers>
	<server>
		<id>releases</id>
		<username>admin</username>
		<password>admin123</password>
	</server>
	<server>
		<id>snapshots</id>
		<username>admin</username>
		<password>admin123</password>
	</server>
</servers>

第二步,在項目的pom.xml文件中加入distributionManagement節點

注意:repository裏的id需要和第一步裏的server id名稱保持一致

<distributionManagement>
	<repository>
		<id>releases</id>
		<name>Releases</name>
		<url>http://10.172.0.201:8081/repository/maven-releases/</url>
	</repository>
	<snapshotRepository>
		<id>snapshots</id>
		<name>Snapshot</name>
		<url>http://10.172.0.201:8081/repository/maven-snapshots/</url>
	</snapshotRepository>
</distributionManagement>

第三步,執行發佈

mvn deploy

登錄Nexus,查看對應的倉庫已經有相關的依賴包了。

注意以下幾點:

  • 若項目版本號末尾帶有 -SNAPSHOT,則會發布到snapshots快照版本倉庫
  • 若項目版本號末尾帶有 -RELEASES 或什麼都不帶,則會發布到releases正式版本倉庫

上傳第三方jar包

ä¸ä¼ ç¬¬ä¸æ¹jarå 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章