Maven私服-Nexus

一、什麼是私服

私服不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫,架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。
如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候我們不得不爲自己的團隊搭建屬於自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。

以下是有無私服的對比:

二、Nexus下載與安裝

Nexus安裝的先決條件:

不管是NexusOpen Source還是Nexus Professional,因爲基於JAVA開發,所以需要JRE運行環境。

下載Nexus:

Nexus有2個版本,Nexus Open Source 和 NexusProfessional。
NexusOpen Source是可基於EPL協議免費使用修改分發的全功能倉庫管理系統。Nexus Professional主要用於需要複雜大型企業或組織。

本文只介紹NexusOpen Source,下文簡稱Nexus。
Nexus下載地址,有完整版,有war版。前者可以單獨運行爲一個基於jetty的服務,後者是運行在ServletConstainer的Web應用。

安裝Nexus

安裝Nexus非常簡單。解壓下載的文件到任意目錄,不過要小心權限問題已經Windows下帶空格文件夾引起的問題。然後配置NEXUS_HOME。
解壓出來的目錄下除了nexus外,還有一個sonatype-work文件夾。這個文件夾包含了所有nexus的倉庫以及配置數據,這麼做使得更加容易更新到新版的nexus。當然,這個目錄的路徑也能通過NEXUS_HOME/conf/nexus.properties修改

1. 下載Nexus

官網http://www.sonatype.org/nexus/ 下載最新的Nexus。

2. Bundle方式安裝Nexus

  • 首先看下解壓後的目錄,結構:解壓後存在兩個文件夾:nexus-2.4.0-01(不同版本版本號不同)和sonatype-work。nexus-2.4.0-01: 該目錄包含了Nexus運行所需要的文件,如啓動腳本、依賴jar包等。sonatype-work:該目錄包含Nenus生成的配置文件、日誌文件、倉庫文件等。第一個目錄是運行Nexus必須的,而第二個不是必須的,Nexus會在運行的時候動態創建該目錄。

3. 運行Nexus

  1. 當你運行Nexus時,你實際運行的是一個運行在0.0.0.0:8081的web server。Nexus運行在一個Jetty的servlet容器內,然後通過一個本地的封裝服務Tanuki Java Service Wrapper來啓動。它可以通過配置將nexus運行爲一個unix或者windows的一個服務。bin目錄下的nexus或者nexus.bat就是服務的起點,通過你的系統來選擇對應的版本。
  2. 配置Path,啓動Nexus(在windows操作系統上)首先在環境變量path下加入如下地址:C:\nexus\nexus-2.6.2-01-bundle\nexus-2.6.2-01\bin;之後在cmd下啓動Nexus服務,啓動成功後,可以打開打開瀏覽器訪問http://localhost:8081/nexus 就可以看到Nexus的界面了。8081爲默認的端口號,要修改端口號可進入nexus-2.1.2-bundle\nexus-2.1.2\conf\打開nexus.properties文件,修改application-port屬性值就可以了,這時你可以單擊界面右上角的Login進行登錄,Nexus默認管理用戶名和密碼爲admin/admin123。
  3. 在linux上切換到/opt/nexus/nexus-2.14.0-01/bin目錄下,存在nexus及nexus.bat文件,可以使用./nexus start 啓動nexus,這時候可能會報錯。
  • 這時候提示:

WARNING – NOTRECOMMENDED TO RUN AS ROOT

If you insist running as root, then set theenvironment variable RUN_AS_USER=root before running this script.

大概意思就是要在環境配置export RUN_AS_USER=root,臨時配置

在命令行下輸入:

export RUN_AS_USER=root

然後執行,就不會再提示了

./nexus start

也可以在系統裏面永久配置

vi /etc/profile  加入export RUN_AS_USER=root

4. 配置Nexus爲服務
啓動後,你就能通過瀏覽器訪問http://localhost:8081/nexus 
當你把Nexus用於生產環境時,你應該將Nexus配置爲一個服務,讓他在後臺運行以及在服務器重啓後恢復服務。方法是 bin/nexus start

三、常用功能

Nexus常用功能就是:指定私服的中央地址、將自己的Maven項目指定到私服地址、從私服下載中央庫的項目索引、從私服倉庫下載依賴組件、將第三方項目jar上傳到私服供其他項目組使用。

開啓Nexus服務後訪問url地址http://localhost:8081/nexus, (推薦使用自己的ip地址),之後登錄系統,用戶名密碼分別是:admin/admin123.

倉庫類別:

開啓Nexus服務後訪問url地址http://localhost:8081/nexus/(推薦使用自己的ip地址),之後登錄系統,用戶名密碼分別是:admin/admin123.

 

最頻繁的就是點擊左側菜單欄的Repositories按鈕

 

 

倉庫類別:

Hosted代表宿主倉庫,用來發布一些第三方不允許的組件,其中自帶倉庫類型中3rd一般用來發布第三方無法在中央倉庫獲取的jar包,比如oraclejdbcjar包,Releases一般存放公司內的封版的項目,Snapshots用來存放正在開發的版本。

Proxy代表代理遠程的倉庫,最典型的就是Maven官方中央倉庫、JBoss倉庫等等。如果構建的Maven項目本地倉庫沒有依賴包,那麼就會去這個代理站點去下載,那麼如果代理站點也沒有此依賴包,就回去遠程中央倉庫下載依賴,這些中央倉庫就是proxy。代理站點下載成功後再下載至本機。筆者認爲,其實Maven這個自帶的默認倉庫一般情況下已經夠大多數項目使用了。

group 倉庫是一個“倉庫組”,爲開發人員便於開發設置的倉庫,可以將多個已存在的其他倉庫配置其中提供給大家使用,在nexus中配置的時候注意的是左側是配置倉庫組使用的倉庫。

 

virtual倉庫是用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫,即在當此M2倉庫中爲M1格式的倉庫構件緩存提供出來的。

maven項目索引

下載Maven項目索引,項目索引是爲了使用者能夠在私服站點查找依賴使用的功能

 

例如:

 

就可以檢索出它的相關信息,包括怎麼配置依賴信息。我們要想使用這個私服倉庫,先在項目pom中配置相關私服信息

四、使用配置

以下爲在pom中聲明指定使用私服的方式:

指定倉庫

<repositories> 

<repository> 

<id>nexus</id> 

<name>nexus</name> 

<url>http://192.168.1.103:8081/nexus/content/groups/public/</url> 

<releases> 

<enabled>true</enabled> 

</releases> 

<snapshots> 

<enabled>true</enabled> 

</snapshots> 

</repository> 

</repositories> 

 

指定插件倉庫

<pluginRepositories> 

<pluginRepository> 

<id>nexus</id> 

<name>nexus</name> 

<url>http://192.168.1.103:8081/nexus/content/groups/public/</url> 

<releases> 

<enabled>true</enabled> 

</releases> 

<snapshots> 

<enabled>true</enabled> 

</snapshots> 

</pluginRepository> 

</pluginRepositories> 

這樣只有本項目纔在私服下載組件

總:

pom.xml配置私服下載如下:

在setting.xml配置私服下載如下:

 

這樣這個Maven項目構建的時候會從私服下載相關依賴,當構建項目的時候,maven會從私服將構件下載到本地倉庫,當然這個配置僅僅是在此項目中生效,對於其他項目還是不起作用。如果相對Maven的其他項目也生效的話。需要修改全局的settings.xml文件。

 

修改settings.xml爲

<profiles>

……………

<profile> 

         <id>myprofile</id> 

         <repositories> 

               <repository> 

                   <id>central</id>                                    

                   <url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>                       

                   <releases> 

                       <enabled>true</enabled> 

                   </releases> 

                   <snapshots> 

                       <enabled>true</enabled> 

                   </snapshots> 

               </repository> 

           </repositories>    

            <pluginRepositories> 

               <pluginRepository> 

                 <id>central</id> 

                 <url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url> 

                 <releases> 

                   <enabled>true</enabled> 

                 </releases> 

                 <snapshots> 

                   <enabled>false</enabled> 

                 </snapshots> 

               </pluginRepository> 

           </pluginRepositories> 

       </profile>

……………

<profiles>

 

追加激活profile

<activeProfiles> 

<activeProfile>central</activeProfile> 

</activeProfiles> 

之後所有本機的Maven項目就在私服下載組件。


五、上傳

分別選中填寫信息就最後Upload構件就可以了

deploy命令部署構件到Nexus

  1. 在POM中配置
<project>
  ... 
  <distributionManagement>
<snapshotRepository>
        <id>user-snapshots</id>
        <name>User Project SNAPSHOTS</name>
        <url>http://localhost:8081/nexus/content/repositories/MyUserReposSnapshots/</url>
    </snapshotRepository>
      <repository>
          <id>user-releases</id>
          <name>User Project Release</name>
          <url>http://localhost:8081/nexus/content/repositories/MyUserReposRelease/</url>
      </repository>
  </distributionManagement>
   ...
</project>

settings.xml中配置認證信息,Nexus的倉庫對於匿名用戶是隻讀的。

<servers>
 
    <server>
      <id>user-snapshots</id>
      <username>lb</username>
      <password>123456</password>
    </server>
        
    <server>
      <id>user-releases</id>
      <username>lb</username>
      <password>123456</password>
    </server>
        
  </servers>

 

注意Respository中的id一定要和server下的id一致,切記!!否則出現權限問題。

然後運行發佈

mvn clean deploy

在控制檯發佈成功

然後進入到私服上的倉庫中,看一下確實存在剛剛發佈的項目

 

 

 

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