1. 程式人生 > >nexus搭建maven私服及私服jar包上傳和下載

nexus搭建maven私服及私服jar包上傳和下載

ive 校驗 public 我們 賬號 依賴 detail 接下來 triangle

nexus搭建maven私服及私服jar包上傳和下載

標簽: nexus管理maven庫snapshot 技術分享 分類:

一、nexus搭建maven私服及相關介紹

1、下載nexus-2.12.0-01-bundle.zip(版本隨意)

2、以管理員身份運行cmd,cd進入解壓文件的bin目錄,執行nexus.bat install

技術分享

若未以管理員身份運行則安裝不了,因為權限不夠

技術分享
3、開啟nexus服務,訪問nexus服務器地址:http://localhost:8081/nexus/,默認登錄賬戶為admin,默認密碼為admin123,登錄成功後點擊Repositories可看到私服有以下類型倉庫:

技術分享



1)hosted,宿主倉庫,部署自己的jar到這個類型的倉庫,包括releases和snapshot兩部分,Releases公司內部發布版本倉庫、 Snapshots 公司內部測試版本倉庫
2)proxy,代理倉庫,用於代理遠程的公共倉庫,如maven中央倉庫,用戶連接私服,私服自動去中央倉庫下載jar包或者插件。
3)group,倉庫組,用來合並多個hosted/proxy倉庫,通常我們配置自己的maven連接倉庫組。
4)virtual(虛擬):兼容Maven1 版本的jar或者插件

4、nexus倉庫默認在解壓文件的sonatype-work\nexus\storage目錄中:

技術分享


apache-snapshots:代理倉庫,存儲snapshots構件,代理地址https://repository.apache.org/snapshots/

central-m1:virtual類型倉庫,兼容Maven1 版本的jar或者插件

releases:本地倉庫,存儲releases構件。

snapshots:本地倉庫,存儲snapshots構件。

thirdparty:第三方倉庫

public:倉庫組


二、向maven私服上傳寫好的jar

1、需求:將項目子模塊ssm_dao這個工程打包成jar並上傳到私服

2、第一步:需要在客戶端即部署dao工程的電腦上配置 maven環境,並修改 settings.xml 文件,配置連接私服的用戶

和密碼。此用戶名和密碼用於私服校驗,因為私服需要知道上傳都 的賬號和密碼 是否和私服中的賬號和密碼 一致。

在maven文件夾下apache-maven-3.5.0\conf\settings.xml文件添加一下代碼:(<servers>節點內)

[html] view plain copy
  1. <server>
  2. <!--releases 連接發布版本項目倉庫-->
  3. <id>releases</id>
  4. <!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
  5. <username>admin</username>
  6. <password>admin123</password>
  7. </server>
  8. <server>
  9. <!--snapshots 連接測試版本項目倉庫-->
  10. <id>snapshots</id>
  11. <!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
  12. <username>admin</username>
  13. <password>admin123</password>
  14. </server>

3、在ssm_dao的pom.xml文件中添加一下代碼:

[html] view plain copy
  1. <!--將ssm_dao上傳私服 -->
  2. <distributionManagement>
  3. <!--pom.xml這裏<id> 和 settings.xml 配置 <id> 對應 -->
  4. <repository>
  5. <id>releases</id>
  6. <url>http://localhost:8081/nexus/content/repositories/releases/</url>
  7. </repository>
  8. <snapshotRepository>
  9. <id>snapshots</id>
  10. <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
  11. </snapshotRepository>
  12. </distributionManagement>

根據工程的版本號決定上傳到哪個宿主倉庫,如果版本為release則上傳到私服的release倉庫,如果版本為snapshot則上傳到私服的snapshot倉庫。

如:ssm_dao的工程的版本號為0.0.1-SNAPSHOT,則ssm_dao打包好的jar在本地倉庫snapshots可見

[html] view plain copy
  1. <modelVersion>4.0.0</modelVersion>
  2. <parent>
  3. <groupId>com.nocol</groupId>
  4. <artifactId>ssm_parent</artifactId>
  5. <version><span style="color:#FF0000;">0.0.1-SNAPSHOT</span></version>
  6. </parent>
  7. <artifactId>ssm_dao</artifactId>

4、正式上傳:首先啟動nexus服務,對ssm_dao工程執行deploy命令,看到BUILD SUCCESS則表示上傳成功了
技術分享

此時在\nexus-2.12.0-01-bundle\sonatype-work\nexus\storage\snapshots下能找到,但是在本地倉庫並沒有,因為jar包上傳在maven私服,接下來介紹如何能讓自己上傳的jar出現在本地倉庫

如圖:(本地snapshots)

技術分享

如圖:(私服)

技術分享

5、此時將ssm_dao工程關閉,可以看到依賴ssm_dao的ssm_service工程出現感嘆號(缺少了ssm_dao.jar)

三、maven私服自動下載jar包
1、在沒有配置nexus之前,如果本地倉庫沒有,去中央倉庫下載。有了私服之後,本地項目首先去本地倉庫找jar,如果沒有找到則連接私服從私服下載jar包,如果私服沒有jar包私服同時作為代理服務器從中央倉庫下載jar包,這樣提高了下載速度,項目連接私服下載jar包的速度要比項目連接中央倉庫的速度快的多。

2、nexus中包括很多倉庫,如上面介紹的hosted中存放的是自己發布的jar包及第三方公司的jar包,proxy中存放的是中央倉庫的jar,為了方便從私服下載jar包可以將多個倉庫組成一個倉庫組,每個工程需要連接私服的倉庫組下載jar包,這樣在項目中配置下載路徑只需要給倉庫組路徑即可,即:

http://localhost:8081/nexus/content/groups/public/

3、第一步:在客戶端的setting.xml中配置私服的倉庫,由於setting.xml中沒有repositories的配置標簽需要使用profile定義倉庫(profile節點內)

[html] view plain copy
  1. <profile>
  2. <!--profile的id-->
  3. <id>dev</id>
  4. <repositories>
  5. <repository>
  6. <!--倉庫id,repositories可以配置多個倉庫,保證id不重復-->
  7. <id>nexus</id>
  8. <!--倉庫地址,即nexus倉庫組的地址-->
  9. <url>http://localhost:8081/nexus/content/groups/public/</url>
  10. <!--是否下載releases構件-->
  11. <releases>
  12. <enabled>true</enabled>
  13. </releases>
  14. <!--是否下載snapshots構件-->
  15. <snapshots>
  16. <enabled>true</enabled>
  17. </snapshots>
  18. </repository>
  19. </repositories>
  20. <pluginRepositories>
  21. <!-- 插件倉庫,maven的運行依賴插件,也需要從私服下載插件 -->
  22. <pluginRepository>
  23. <!-- 插件倉庫的id不允許重復,如果重復後邊配置會覆蓋前邊 -->
  24. <id>public</id>
  25. <name>Public Repositories</name>
  26. <url>http://localhost:8081/nexus/content/groups/public/</url>
  27. </pluginRepository>
  28. </pluginRepositories>
  29. </profile>

使用profile定義倉庫需要激活才可生效,再在profile結束標簽後添加一下代碼:

[html] view plain copy
  1. <!--使用profile定義倉庫需要激活才可生效-->
  2. <activeProfiles>
  3. <activeProfile>dev</activeProfile>
  4. </activeProfiles>

4、配置成功後通過eclipse查看ssm_service工程下pom.xml的Effective POM選項,可看到如下代碼:

[html] view plain copy
  1. <repositories>
  2. <repository>
  3. <releases>
  4. <enabled>true</enabled>
  5. </releases>
  6. <snapshots>
  7. <enabled>true</enabled>
  8. </snapshots>
  9. <id>nexus</id>
  10. <url>http://localhost:8081/nexus/content/groups/public/</url>
  11. </repository>
  12. <repository>
  13. <snapshots>
  14. <enabled>false</enabled>
  15. </snapshots>
  16. <id>central</id>
  17. <name>Central Repository</name>
  18. <url>https://repo.maven.apache.org/maven2</url>
  19. </repository>
  20. </repositories>
  21. <pluginRepositories>
  22. <pluginRepository>
  23. <id>public</id>
  24. <name>Public Repositories</name>
  25. <url>http://localhost:8081/nexus/content/groups/public/</url>
  26. </pluginRepository>
  27. <pluginRepository>
  28. <releases>
  29. <updatePolicy>never</updatePolicy>
  30. </releases>
  31. <snapshots>
  32. <enabled>false</enabled>
  33. </snapshots>
  34. <id>central</id>
  35. <name>Central Repository</name>
  36. <url>https://repo.maven.apache.org/maven2</url>
  37. </pluginRepository>
  38. </pluginRepositories>

表示當該工程需要的jar在本地倉庫沒有時,根據這裏配置的訪問路徑自動去maven私服下載。此時再update一下父工程,發現ssm_service的感嘆號消失(此時ssm_dao還是close狀態),說明ssm_service工程已經在maven私服內下載了ssm_dao.jar,同時在本地倉庫也存在了該jar。

nexus搭建maven私服及私服jar包上傳和下載