用nexus搭建maven私服

首先介紹一下背景,公司訪問外網有限制,項目組大部分人員不能訪問maven的central repository,所以在局域網裏找一臺有外網權限的機器,搭建nexus私服,而後開發人員連到這臺私服上 

環境是:nexus-professional-2.11.2-0六、maven-3.3.一、jdk1.7.0_72
apache

nexus安裝windows

 

爲何要搭建nexus私服,緣由很簡單,有些公司都不提供外網給項目組人員,所以就不能使用maven訪問遠程的倉庫地址,因此頗有必要在局域網裏找一臺有外網權限的機器,搭建nexus私服,而後開發人員連到這臺私服上,這樣的話就能夠經過這臺搭建了nexus私服的電腦訪問maven的遠程倉庫。瀏覽器

 

1.首先肯定咱們的環境安裝好maven,jdk等必須的環境緩存

 

2.這些都準備好以後,去下載最新版本的nexus    下載地址:http://www.sonatype.org/nexus/go 服務器

 

    我本地安裝的是 nexus-professional-2.11.2-06網絡

 

3.打開目錄nexus-professional-bundle-latest\nexus-professional-2.11.2-06\bin\jsw這個目錄下面你會發現有不少系統版本的nexus環境oracle

 

   個人電腦是win7 (64)爲的系統,因此我選擇的是windows-x86-64這個版本,固然能夠根據我的的電腦系統選擇對應的版eclipse

打開一個版本你會看到以下:maven

我通常都是將nexus安裝成windows服務,因此點擊install-nexus.bat這個,訪問http://localhost:8081/nexus/ 啓動後以下頁面,在右上角有個Log in 的超連接,點擊登陸

1、用admin用戶登錄nexus 

nexus的下載和安裝都很簡單,網上也有不少介紹,本文就不重複了。主要介紹一下安裝以後的配置 

nexus的配置須要用admin角色完成,默認的密碼是admin123,進入nexus首頁以後,點擊右上角,進行登陸 

 

而後就能夠在左邊的菜單中進行配置了 

 

2、爲nexus配置代理服務器 

因爲這臺機器須要經過代理才能訪問外網,因此首先要配置代理服務器,在Administration-->Server中進行配置 



配置以後,nexus才能連上central repository,若是私服所在機器能夠直接上外網,則能夠省略這一步 

3、配置repository 

在Views/Repositories-->Repositories裏進行配置 



nexus裏能夠配置3種類型的倉庫,分別是proxy、hosted、group 

proxy是遠程倉庫的代理。好比說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,若是找不到的話,就會從遠程倉庫下載,而後返回給用戶,至關於起到一箇中轉的做用 

hosted是宿主倉庫,用戶能夠把本身的一些構件,deploy到hosted中,也能夠手工上傳構件到hosted裏。好比說oracle的驅動程序,ojdbc6.jar,在central repository是獲取不到的,就須要手工上傳到hosted裏 

group是倉庫組,在maven裏沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不須要在pom中配置多個地址,只要統一配置group的地址就能夠了 

nexus裝好以後,已經初始化定義了一些repository,咱們熟悉以後,就能夠自行刪除、新增、編輯 

右邊那個Repository Path能夠點擊進去,看到倉庫中artifact列表。不過要注意瀏覽器緩存。我今天就發現,明明構件已經更新了,在瀏覽器裏卻看不到,還覺得是BUG,實際上是被瀏覽器緩存了 
url

添加代理倉庫

以 Sonatype 爲例,添加一個代理倉庫,用於代理 Sonatype 的公共遠程倉庫。點擊菜單 Add - Proxy Repository :

 

填寫Repository ID - sonatype;Repository Name - Sonatype Repository;

 

Remote Storage Location - http://repository.sonatype.org/content/groups/public/ ,save 保存:

將添加的 Sonatype 代理倉庫加入 Public Repositories 倉庫組。選中 Public Repositories,在 Configuration 選項卡中,將 Sonatype Repository 從右側 Available Repositories 移到左側 Ordered Group Repositories,save 保存:


4、配置Central Repository的proxy 

最關鍵的一個配置,可能就是Central Repository的proxy配置,由於大部分的構件,都是要經過這個proxy獲得的 



在安裝完nexus以後,這個proxy是預置的,須要作的就是把Download Remote Indexes改成true,這樣nexus纔會從central repository下載索引,才能在nexus中使用artifact search的功能 

網絡上有一些其餘公開的maven倉庫,能夠用一樣的辦法,在nexus中設置proxy,可是並非全部maven倉庫,都提供了nexus index,這種狀況下,就沒法創建索引了 

5、配置hosted repository 

通常會配置3個hosted repository,分別是3rd party、Snapshots、Releases,分別用來保存第三方jar(典型的好比ojdbc6.jar),項目組內部的快照、項目組內部的發佈版 



這裏並無什麼特別的配置,只是Deployment Policy這個選項,通常Snapshots會配置成容許,而Releases和3rd party會設置爲禁止 

6、配置group repository 

前面說過,group實際上是一個虛擬的倉庫,經過對實體倉庫(proxy、hosted)進行聚合,對外暴露一個統一的地址 



這裏要注意的是,放到左邊的倉庫,纔是會被聚合的倉庫。我昨天一直搞錯了,把倉庫都放到右邊,結果group什麼都沒有聚合到,是一個空的倉庫。。。 

7、配置用戶密碼 

在Security-->Users中配置,在deployment用戶上點擊右鍵,選擇Set Password,而後設置一個密碼,作這個操做是爲了後面提交作準備 



8、在用戶機器上配置settings.xml 

通過前面的7個步驟,nexus就配置好了,接下來須要在每一個開發人員的開發機器上進行配置了 

配置文件在%USER_HOME%/.m2/settings.xml 

Xml代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   
  4.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  6.    
  7.   <servers>  
  8.     
  9.     <server>  
  10.         <id>nexus-snapshots</id>  
  11.         <username>deployment</username>  
  12.         <password>deployment</password>  
  13.     </server>  
  14.   
  15.   </servers>  
  16.     
  17.   <mirrors>  
  18.     
  19.     <mirror>  
  20.         <id>nexus</id>  
  21.         <name>internal nexus repository</name>  
  22.         <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>  
  23.         <mirrorOf>central</mirrorOf>  
  24.     </mirror>  
  25.       
  26.   </mirrors>  
  27.     
  28. </settings>  


這裏只配置了2個元素<mirrors>和<servers> 

首先這裏配置了一個id爲nexus的鏡像倉庫,地址是前面配置的public group的URL,而後鏡像目標是central 

maven裏的超級pom,裏面配置了這樣一段: 

Xml代碼   收藏代碼
  1. <repositories>  
  2.     <repository>  
  3.       <id>central</id>  
  4.       <name>Central Repository</name>  
  5.       <url>http://repo.maven.apache.org/maven2</url>  
  6.       <layout>default</layout>  
  7.       <snapshots>  
  8.         <enabled>false</enabled>  
  9.       </snapshots>  
  10.     </repository>  
  11.   </repositories>  
  12.   
  13.   <pluginRepositories>  
  14.     <pluginRepository>  
  15.       <id>central</id>  
  16.       <name>Central Repository</name>  
  17.       <url>http://repo.maven.apache.org/maven2</url>  
  18.       <layout>default</layout>  
  19.       <snapshots>  
  20.         <enabled>false</enabled>  
  21.       </snapshots>  
  22.       <releases>  
  23.         <updatePolicy>never</updatePolicy>  
  24.       </releases>  
  25.     </pluginRepository>  
  26.   </pluginRepositories>  


所以,當本地的maven項目,找不到須要的構件(包括jar包和插件)的時候,默認會到central裏獲取 

因此咱們剛剛配置的鏡像倉庫,id也是central,這樣本地maven項目對central repository的請求,就會轉到鏡像倉庫上,也就是咱們設置的nexus私服上 

因爲咱們在項目的pom裏,不會再配置其餘的<repositories>和<pluginRepositories>元素,因此只要配置一個central的mirror,就足以阻止全部的外網訪問。若是pom中還配置了其餘的外網倉庫,好比jboss repository等,能夠把<mirrorOf>改成* 

至於<servers>元素,是由於咱們把項目內部的構件上傳到nexus的倉庫中時,nexus會進行權限控制,因此這裏須要設置權限相關的信息。注意這裏的<id>nexus-snapshots</id>,和後面maven工程裏的pom設置是一致的 

因爲咱們這裏已經屏蔽了對外網倉庫的請求,因此就不須要配置代理服務器了,若是須要配置代理服務器,能夠用<proxies>元素 

9、配置maven項目的pom文件 

下面是簡化後的pom文件: 

Xml代碼   收藏代碼
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.   
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.huawei.inoc.wfm.task</groupId>  
  6.     <artifactId>task-sla</artifactId>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <name>task-sla</name>  
  9.   
  10.     <!-- 配置部署的遠程倉庫 -->  
  11.     <distributionManagement>  
  12.         <snapshotRepository>  
  13.             <id>nexus-snapshots</id>  
  14.             <name>nexus distribution snapshot repository</name>  
  15.             <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>  
  16.         </snapshotRepository>  
  17.     </distributionManagement>  
  18.   
  19. </project>  


這裏配置了<distributionManagement>元素,其中的<id>nexus-snapshots</id>,與前面說的settings.xml中的<servers>元素中的配置必須一致 

配置這個的目的,是當執行maven deploy時,才知道要將生成的構件部署到哪一個遠程倉庫上,注意這裏的URL填的就不是public group的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/ 

而是snapshots的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/ 

可是在nexus中,snapshots也是聚合到public group裏的,因此開發人員A提交到snapshots的構件,開發人員B也能夠從public group裏獲取到 

10、eclipse中的設置 

通過前面的配置,已經能夠經過命令行進行maven操做了。不過實際開發中,通常都是使用eclipse的m2e插件,因此還須要對eclipse進行一些額外的配置 

在Preferences-->Maven-->User Settings中,點擊Update Settings,加載剛纔咱們對settings.xml的更改 

 

而後在Maven Repositories視圖裏,能夠看到倉庫的狀況 



能夠看到,從超級pom繼承來的central被置灰了,不可用,後面的mirrored by nexus表示對該倉庫的全部請求,都會轉到鏡像nexus中 

11、nexus的目錄結構 

nexus會安裝在%USER_HOME%/sonatype-work/nexus下,有如下目錄 

 

其中的storage目錄,就是構件實際存放的地址了  

相關文章
相關標籤/搜索