Mavn Nexus

Maven nexus

1    開發環境

Maven

安裝

下載地址:http://maven.apache.org/download.html

解壓後在資源管理器中表現爲以下圖所示結構:

安裝Maven很簡單,通過配置環境變量“變量名:M2_HOME,變量值:Maven解壓目錄”,將M2_HOME解壓目錄下的bin目錄加入path系統變量即可,如下圖所示:

 修改Path環境變量

驗證安裝:通過批處理命令“mvn”或“mvn -version”,查看是否有相應的輸出信息來驗證Maven是否安裝正確,如下圖所示:

配置

conf/settings.xml:該文件用來自定義你機器上Maven的一些行爲。

~/.m2/setting.xml:自定義Maven配置文件,默認情況下不存在此文件,需要從conf目錄下考貝此文件。對~/.m2/setting.xml文件的配置,主要有本地倉庫位置

<localRepository></ localRepository>

鏡像路徑配置,如對本地倉庫的搜索,默認會到遠程倉庫搜索。

<mirrors>

<mirror></mirror>

</mirrors>

詳細配置見在Maven中使用Nexue及相關教程,此處略。

Nexus

Nexus是Maven倉庫管理器,用來搭建一個本地倉庫服務器,這樣做的好處是便於管理,節省網絡資源,速度快,還有一個非常有用的功能就是可以通過項目的SNAPSHOT版本管理,來進行模塊間的高效依賴開發,下面會一一描述。

雖然你可以通過中央倉庫來獲取你所需要的jar包,但是現實往往是存在很多問題:

網速慢,你可能需要花很長的時間來下載你所需要的jar如果你的公司很大,有幾百甚至幾千人再用Maven,那麼這些人都去通過中央倉庫來獲取jar,那麼這是一個很大的資源浪費如果存在模塊之間的依賴開發,你的snapshot版本是不能夠被你的夥伴很方便的獲取。在實際開發過程中,有些jar的版本可能在中央倉庫裏面不存在,或者更新不及時,你是獲取不 到這個jar的。

所有以上問題,通過Nexus這 個日益流行的倉庫管理器可以輕鬆的解決。

  這個倉庫是本地的,下載的速度是從遠程下載不可比的。可以爲你公司所有的Maven使用者服務,可以進行統一管理後面我會介紹如何通過nexus來進行存在模塊依賴的項目的 開發你可以添加自己的第三方包。

安裝

下載地址:http://nexus.sonatype.org/downloads/,可以選擇壓縮包或war包下載,解壓

對於windows 64位機,進入目錄nexus-oss-webapp-1.9.2.4/bin/jsw/windows-x86-64,運行Installnexus.bat即可以將nexus安裝爲系統服務。

Startnexus.bat用於啓動nexus服務,Stopnexus.bat用於停止服務,Uninstallnexus.bat用於卸載服務。當然啓動與停止服務也可以通過系統服務窗口中進行。

在任何瀏覽器中運行URL:http://localhost:8081/nexus

顯示以下界面即表示安裝成功。nexus默認登錄用戶名:admin 密碼:admin123,登錄後可以管理倉庫,配置Nexus系統,管理任務,管理用戶,角色,權限,查看系統的RSS源,管理及查看系統日誌,等等。到此我們已經安裝好Nexus,下面我來介紹下一些我們常用的功能和使用:

配置 中央倉庫

 在左邊菜單欄裏選擇Repositories,然後會出現右邊的畫面,右邊上半部分是列出來的repository,黑體字是類型爲group的repository. 這裏簡單介紹下幾種repository的類型:

  • hosted,本地倉庫,通常我們會部署自己的構件到這一類型的倉庫比如公司的第二方庫。
  • proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
  • group,倉庫組,用來合併多個hosted/proxy倉庫,當你的項目希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。

Maven central是Maven的中央倉庫,點擊它並選擇configuration標籤欄,我們會看到下面的頁面

這裏有幾個項目是我們可能會經常用到的:

  1. Override local storage location: 在這個選項你可以配置你的Nexus本地倉庫的存放地址,用來覆蓋其默認的存放地址
  2. Remote storage location: 這裏是遠程倉庫的地址,爲了提高代理速度,你可以修改爲國內的鏡像地址。默認值是http://repo1.maven.org/maven2/

Download remote indexes: 這裏配置是否下載遠程索引文件,模式是false, 建議配置爲true,這樣我們便可以通過索引文件來搜索我們需要的構件

添加代理倉庫

Maven central是一個比較大的代理倉庫,如果你需要添加的一個代理倉庫,那麼可以在點擊左邊慘淡欄裏面的Repositories,然後右邊的頁面點擊add -> add proxy repository, 之後出現以下頁面:


填寫相關信息保存即可。通常情況下,使用預設的代理倉庫已經能夠滿足大部分項目的需求了, 只有在特殊需求的情況下才會參加代理倉庫.

管理本地倉庫

我們前面講到類型爲hosted的爲本地倉庫,Nexus預定義了3個本地倉庫,分別是Releases, Snapshots, 3rd Party. 分別講一下這三個預置的倉庫都是做什麼用的:

  1. Releases: 這裏存放我們自己項目中發佈的構建, 通常是Release版本的, 比如我們自己做了一個FTP Server的項目, 生成的構件爲ftpserver.war, 我們就可以把這個構建發佈到Nexus的Releases本地倉庫. 關於符合發佈後面會有介紹.
  2. Snapshots: 這個倉庫非常的有用, 它的目的是讓我們可以發佈那些非release版本, 非穩定版本, 比如我們在trunk下開發一個項目,在正式release之前你可能需要臨時發佈一個版本給你的同伴使用, 因爲你的同伴正在依賴你的模塊開發, 那麼這個時候我們就可以發佈Snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本.
  3. 3rd Party: 顧名思義, 第三方庫, 你可能會問不是有中央倉庫來管理第三方庫嘛, 沒錯, 這裏的是指可以讓你添加自己的第三方庫, 比如有些構件在中央倉庫是不存在的. 比如你在中央倉庫找不到Oracle 的JDBC驅動, 這個時候我們就需要自己添加到3rd party倉庫.

你也可以創建自己的本地倉庫,點擊Repository面板上方的Add按鈕,然後選擇Hosted Repository,然後在下方的配置面板中輸入相關信息, 這裏我們不再需要填寫遠程倉庫地址,根據自己的需要選擇Release或者Snapshot

點擊 Add->Repository Group

出現New Repository Group界面後,填入ID, name 等相關信息, 在右邊Available Repositories 欄裏可以選擇你要添加的倉庫到你新建的倉庫組.  


好多公司處於安全考慮,用代理上網,而nexus 經常需要往maven repository中心下載東西,所以需要給nexus設置代理。 開始沒找到地方,後來發現可以從nexus後臺管理器界面上直接設置,地方很隱蔽:

登陸後進入管理頁面,從左邊菜單欄選擇Server 打開右邊tab頁,發現還是找不到,彆着急,仔細找會發現有行: default http proxy settings   前面有個checkbox 未勾選, 速度勾選之,馬上出現了您熟悉的  proxy host,proxy port , username , passowrd.  okay 代理設置完成,現在nexus能通過互聯網從maven repository中心下載東西了!

通過 Nexus 搜索構件

在我們實際使用構件的過程中通常遇到一個問題,有時候我緊緊知道我所需要的構建的大致名字,並不知道全稱或group id, 這是件非常頭疼的事情. Nexus基於Nexus indexer的搜索功能幫我們解決了這個問題.

要是用搜索功能, 必須要有索引文件, Nexus默認是不建立索引文件的,因爲像中央倉庫這樣的索引文件的建立需要耗費比較大的網絡資源,僅索引文件就要幾十兆. 要開啓中央倉庫的索引文件下載功能需要在Maven Central的配置頁面, 把Download Remote Indexes選擇true. 如圖:


這樣設置以後, Nexus會自動從遠程中央倉庫下載索引文件, 爲了檢驗索引文件自動下載是否生效,可以卻換到Browse:



如果出現先以上文件夾,那說明索引文件已經建立.

下面我試一下搜索功能, 在左邊菜單欄裏面有個Artifact Search, 在輸入框裏面輸入你想要搜索的構件名字,比如: testing你可以使用高級搜索,點擊高級搜索後,右邊界面會提供集中搜索方式:keyword, classname, GAV, checksum


比如我們這裏選擇GAV模式, 而且我只知道artiface name : testng和版本號5.8, 其他的我不知道, 那麼就在artifact 和 version處分別輸入testng 和 5.8 , 搜索結果如下:

你如果你不知道知道構件的名稱, 只知道classname, 那麼你也可以通過class name 的方式搜索,這裏就不再贅述

當你選擇一項搜索結果,在頁面的下方會出現這個構件的詳細信息, 並且會列出這個構件的Maven依賴配置, 你可以直接拷貝到你的pom文件中使用,這是個非常實用的功能:

Maven 中使用 Nexus

到此爲止我們介紹瞭如何安裝和使用Nexus以及其基本配置, 下面我們介紹下如何讓Maven來使用Nexus本地倉庫用來替代使用遠程倉庫. 在Maven使用Nexus本地倉庫只需稍作配置, 在settings.xml中加入以下代碼:

<profile>
       <id>dev</id>
          <repositories>
             <repository>
                 <id>nexus</id>
                 <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
                 <releases>
                    <enabled>true</enabled>
                 </releases>
                 <snapshots>
                    <enabled>true</enabled>
                 </snapshots>
              </repository>
            </repositories>            
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <url>http://127.0.0.1:8081/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                   </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

 


這裏配置了repository和pluginRepository, Maven在使用第三方構件和插件時是分開來配置的,所以如果我們也希望插件的下載也通過我們的本地倉庫來下載,那麼我們就需要配置pluginRepository.

<releases> <enabled>true</enabled></releases>這個標籤的作用是設定是否允許下載

release版本的載構件, 同樣snapshots標籤可以設定是否允許下載snapshot版本的構件.

通常,我們不建議下載snapshot版本的構件,因爲它是不穩定的版本, 除非你有特殊的需求

構件部署

有些時候我們需要部署構件到Nexus的3rd party, 比如我們在中央倉庫找不到我們需要的構件, 我們可以通過Nexus的UI來上傳構件:

點擊左邊菜單欄的 Repositories, 然後點擊右邊界面的3rd party, 選擇界面下方的Artifact Upload, 這個時候出現以下界面:


上傳構件需要兩個步驟,一個是定義文件的上傳,再就是構件的實體文件.

第一部分定義文件可以是POM文件, 這也是比較推薦的方式, 如果沒有pom文件,可以選擇以參數的形式輸入.第二部分是上傳構件的實體文件,這裏簡單說一下Classifier和Extension, 這兩個都是選填相, Classifier用來區別同功能的構件用於不同的場景, 比如這個構件是分別針對JDK14和JDK15做了2個功能一樣的Jar, 這個時候你就需要指定這個構件的Classifier爲JDK14還是JDK15. Extension是指擴展名,如果不提供,那麼會自動取這個構件的Packaging Type作爲擴展名, 比如 ear, jar, war 等等. (Packaging Type是在第一步中通過pom文件或者手工輸入得到的)剛纔說了3rd party的部署, 關於releases 和 snapshots的UI部署也是一樣的操作過程.我們之前也講過, 這裏的releases和snapshots是用來部署我們自己的項目構件的, 通過UI部署是可以,但是不是最高效的, 我們可以通過配置Maven來自動部署我們的項目構件,這也是我們建立自己的倉庫的一個非常重要的原因, 下面就讓我們看看如何配置:首先需要在POM文件中加入以下代碼:

<project>    
…    
<distributionManagement>    
  <repository>    
    <id> nexus-releases</id>    
      <name> Nexus Release Repository</name>    
      <url> http://127.0.0.1:8081/nexus/content/repositories/releases/</url>    
  </repository>    
  <snapshotRepository>    
    <id> nexus-snapshots</id>    
    <name> Nexus Snapshot Repository</name>    
    <url> http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>    
  </snapshotRepository>    
</distributionManagement>    
…    
</project>    
這裏配置,讓Maven知道當我要發佈release版本或者snapshot版本是需要發佈到哪個地址.

然後我們需要在setting.xml裏面配置一下Nexus的帳號和密碼:

<settings>    
…    
<servers>    
  <server>    
    <id> nexus-releases</id>    
    <username> admin</username>    
    <password> admin123</password>    
  </server>    
  <server>    
    <id> nexus-snapshots</id>    
    <username> admin</username>    
    <password> admin123</password>    
  </server>       
</servers>    
…    
</settings> 
到此爲止, 我們就可以通過命令mvn deploy或者通過IDE的可視化界面點擊deploy來發布我們項目到本地倉庫了. 通過這種方式我們可以很方便的進行模塊間的依賴開發

web項目中使用maven

創建普通的web項目(勾選add Maven support

如果配置好maven後,創建的maven項目,會從nexus上去下載相應的包文件,如果找不到會從遠程中心去下載,下載後nexus會儲存你所下載的。並且nexus你還可以拷貝到你自己的電腦上啓動服務,這樣在沒有網絡的情況下也可以進行maven開發了。

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