qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Nexus搭建私服

          Nexus搭建私服

           

          首先介紹一下背景,公司訪問(wèn)外網(wǎng)有限制,項(xiàng)目組大部分人員不能訪問(wèn)maven的central repository,因此在局域網(wǎng)里找一臺(tái)有外網(wǎng)權(quán)限的機(jī)器,搭建nexus私服,然后開(kāi)發(fā)人員連到這臺(tái)私服上 

          環(huán)境是:nexus-2.1.1、maven-3.0.4、jdk-1.6.0_32 

          一、用admin用戶(hù)登陸n(yōu)exus 

          nexus的下載和安裝都很簡(jiǎn)單,網(wǎng)上也有很多介紹,本文就不重復(fù)了。主要介紹一下安裝之后的配置 

          nexus的配置需要用admin角色完成,默認(rèn)的密碼是admin123,進(jìn)入nexus首頁(yè)之后,點(diǎn)擊右上角,進(jìn)行登錄 



          然后就可以在左邊的菜單中進(jìn)行配置了 



          二、為nexus配置代理服務(wù)器 

          由于這臺(tái)機(jī)器需要通過(guò)代理才能訪問(wèn)外網(wǎng),所以首先要配置代理服務(wù)器,在Administration-->Server中進(jìn)行配置 



          配置之后,nexus才能連上central repository,如果私服所在機(jī)器可以直接上外網(wǎng),則可以省略這一步 

          三、配置repository 

          在Views/Repositories-->Repositories里進(jìn)行配置 



          nexus里可以配置3種類(lèi)型的倉(cāng)庫(kù),分別是proxy、hosted、group 

          proxy是遠(yuǎn)程倉(cāng)庫(kù)的代理。比如說(shuō)在nexus中配置了一個(gè)central repository的proxy,當(dāng)用戶(hù)向這個(gè)proxy請(qǐng)求一個(gè)artifact,這個(gè)proxy就會(huì)先在本地查找,如果找不到的話(huà),就會(huì)從遠(yuǎn)程倉(cāng)庫(kù) 下載,然后返回給用戶(hù),相當(dāng)于起到一個(gè)中轉(zhuǎn)的作用 

          hosted是宿主倉(cāng)庫(kù),用戶(hù)可以把自己的一些構(gòu)件,deploy到hosted中,也可以手工上傳構(gòu)件到hosted里。比如說(shuō)oracle的驅(qū)動(dòng)程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted里 

          group是倉(cāng)庫(kù)組,在maven里沒(méi)有這個(gè)概念,是nexus特有的。目的是將上述多個(gè)倉(cāng)庫(kù)聚合,對(duì)用戶(hù)暴露統(tǒng)一的地址,這樣用戶(hù)就不需要在pom中配置多個(gè)地址,只要統(tǒng)一配置group的地址就可以了 

          nexus裝好之后,已經(jīng)初始化定義了一些repository,我們熟悉之后,就可以自行刪除、新增、編輯 

          右邊那個(gè)Repository Path可以點(diǎn)擊進(jìn)去,看到倉(cāng)庫(kù)中artifact列表。不過(guò)要注意瀏覽器緩存。我今天就發(fā)現(xiàn),明明構(gòu)件已經(jīng)更新了,在瀏覽器里卻看不到,還以為是BUG,其實(shí)是被瀏覽器緩存了 

          四、配置Central Repository的proxy 

          最關(guān)鍵的一個(gè)配置,可能就是Central Repository的proxy配置,因?yàn)榇蟛糠值臉?gòu)件,都是要通過(guò)這個(gè)proxy得到的 



          在安裝完nexus之后,這個(gè)proxy是預(yù)置的,需要做的就是把Download Remote Indexes改為true,這樣nexus才會(huì)從central repository下載索引,才能在nexus中使用artifact search的功能 

          網(wǎng)絡(luò)上有一些其他公開(kāi)的maven倉(cāng)庫(kù),可以用同樣的辦法,在nexus中設(shè)置proxy,但是并不是所有maven倉(cāng)庫(kù),都提供了nexus index,這種情況下,就無(wú)法建立索引了 

          五、配置hosted repository 

          一般會(huì)配置3個(gè)hosted repository,分別是3rd party、Snapshots、Releases,分別用來(lái)保存第三方j(luò)ar(典型的比如ojdbc6.jar),項(xiàng)目組內(nèi)部的快照、項(xiàng)目組內(nèi)部的發(fā)布版 



          這里并沒(méi)有什么特別的配置,只是Deployment Policy這個(gè)選項(xiàng),一般Snapshots會(huì)配置成允許,而Releases和3rd party會(huì)設(shè)置為禁止 

          六、配置group repository 

          前面說(shuō)過(guò),group其實(shí)是一個(gè)虛擬的倉(cāng)庫(kù),通過(guò)對(duì)實(shí)體倉(cāng)庫(kù)(proxy、hosted)進(jìn)行聚合,對(duì)外暴露一個(gè)統(tǒng)一的地址 



          這里要注意的是,放到左邊的倉(cāng)庫(kù),才是會(huì)被聚合的倉(cāng)庫(kù)。我昨天一直搞錯(cuò)了,把倉(cāng)庫(kù)都放到右邊,結(jié)果group什么都沒(méi)有聚合到,是一個(gè)空的倉(cāng)庫(kù)。。。 

          七、配置用戶(hù)密碼 

          在Security-->Users中配置,在deployment用戶(hù)上點(diǎn)擊右鍵,選擇Set Password,然后設(shè)置一個(gè)密碼,做這個(gè)操作是為了后面提交做準(zhǔn)備 



          八、在用戶(hù)機(jī)器上配置settings.xml 

          經(jīng)過(guò)前面的7個(gè)步驟,nexus就配置好了,接下來(lái)需要在每個(gè)開(kāi)發(fā)人員的開(kāi)發(fā)機(jī)器上進(jìn)行配置了 

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

          Xml代碼  

          <?xml version="1.0" encoding="UTF-8"?>  

            

          <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   

                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

                    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  

             

            <servers>  

              

              <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個(gè)元素<mirrors>和<servers> 

          首先這里配置了一個(gè)id為nexus的鏡像倉(cāng)庫(kù),地址是前面配置的public group的URL,然后鏡像目標(biāo)是central 

          maven里的超級(jí)pom,里面配置了這樣一段: 

          Xml代碼  

          29 <repositories>  

          30     <repository>  

          31       <id>central</id>  

          32       <name>Central Repository</name>  

          33       <url>http://repo.maven.apache.org/maven2</url>  

          34       <layout>default</layout>  

          35       <snapshots>  

          36         <enabled>false</enabled>  

          37       </snapshots>  

          38     </repository>  

          39   </repositories>  

          40   

          41   <pluginRepositories>  

          42     <pluginRepository>  

          43       <id>central</id>  

          44       <name>Central Repository</name>  

          45       <url>http://repo.maven.apache.org/maven2</url>  

          46       <layout>default</layout>  

          47       <snapshots>  

          48         <enabled>false</enabled>  

          49       </snapshots>  

          50       <releases>  

          51         <updatePolicy>never</updatePolicy>  

          52       </releases>  

          53     </pluginRepository>  

          54   </pluginRepositories>  


          因此,當(dāng)本地的maven項(xiàng)目,找不到需要的構(gòu)件(包括jar包和插件)的時(shí)候,默認(rèn)會(huì)到central里獲取 

          所以我們剛剛配置的鏡像倉(cāng)庫(kù),id也是central,這樣本地maven項(xiàng)目對(duì)central repository的請(qǐng)求,就會(huì)轉(zhuǎn)到鏡像倉(cāng)庫(kù)上,也就是我們?cè)O(shè)置的nexus私服上 

          由于我們?cè)陧?xiàng)目的pom里,不會(huì)再配置其他的<repositories>和<pluginRepositories> 元素,所以只要配置一個(gè)central的mirror,就足以阻止所有的外網(wǎng)訪問(wèn)。如果pom中還配置了其他的外網(wǎng)倉(cāng)庫(kù),比如jboss repository等,可以把<mirrorOf>改為* 

          至于<servers>元素,是因?yàn)槲覀儼秧?xiàng)目?jī)?nèi)部的構(gòu)件上傳到nexus的倉(cāng)庫(kù)中時(shí),nexus會(huì)進(jìn)行權(quán)限控制,所以這里需要設(shè)置 權(quán)限相關(guān)的信息。注意這里的<id>nexus-snapshots</id>,和后面maven工程里的pom設(shè)置是一致的 

          由于我們這里已經(jīng)屏蔽了對(duì)外網(wǎng)倉(cāng)庫(kù)的請(qǐng)求,所以就不需要配置代理服務(wù)器了,如果需要配置代理服務(wù)器,可以用<proxies>元素 

          九、配置maven項(xiàng)目的pom文件 

          下面是簡(jiǎn)化后的pom文件: 

          Xml代碼  

          55 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

          56     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  

          57   

          58     <modelVersion>4.0.0</modelVersion>  

          59     <groupId>com.huawei.inoc.wfm.task</groupId>  

          60     <artifactId>task-sla</artifactId>  

          61     <version>0.0.1-SNAPSHOT</version>  

          62     <name>task-sla</name>  

          63   

          64     <!-- 配置部署的遠(yuǎn)程倉(cāng)庫(kù) -->  

          65     <distributionManagement>  

          66         <snapshotRepository>  

          67             <id>nexus-snapshots</id>  

          68             <name>nexus distribution snapshot repository</name>  

          69             <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>  

          70         </snapshotRepository>  

          71     </distributionManagement>  

          72   

          73 </project>  


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

          配置這個(gè)的目的,是當(dāng)執(zhí)行maven deploy時(shí),才知道要將生成的構(gòu)件部署到哪個(gè)遠(yuǎn)程倉(cāng)庫(kù)上,注意這里的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里的,所以開(kāi)發(fā)人員A提交到snapshots的構(gòu)件,開(kāi)發(fā)人員B也可以從public group里獲取到 

          十、eclipse中的設(shè)置 

          經(jīng)過(guò)前面的配置,已經(jīng)可以通過(guò)命令行進(jìn)行maven操作了。不過(guò)實(shí)際開(kāi)發(fā)中,一般都是使用eclipse的m2e插件,所以還需要對(duì)eclipse進(jìn)行一些額外的配置 

          在Preferences-->Maven-->User Settings中,點(diǎn)擊Update Settings,加載剛才我們對(duì)settings.xml的更改 



          然后在Maven Repositories視圖里,可以看到倉(cāng)庫(kù)的情況 



          可以看到,從超級(jí)pom繼承來(lái)的central被置灰了,不可用,后面的mirrored by nexus表示對(duì)該倉(cāng)庫(kù)的所有請(qǐng)求,都會(huì)轉(zhuǎn)到鏡像nexus中 

          十一、nexus的目錄結(jié)構(gòu) 

          nexus會(huì)安裝在%USER_HOME%/sonatype-work/nexus下,有以下目錄 



          其中的storage目錄,就是構(gòu)件實(shí)際存放的地址了 

          posted on 2014-03-26 13:19 順其自然EVO 閱讀(1144) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): maven

          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 黄冈市| 中方县| 客服| 霍邱县| 芦山县| 松原市| 南涧| 陆河县| 托克托县| 中西区| 满城县| 凤阳县| 合肥市| 平武县| 德江县| 正镶白旗| 桂林市| 聂荣县| 柘城县| 和顺县| 林西县| 安泽县| 扎鲁特旗| 镇原县| 和平县| 滦南县| 三台县| 淳安县| 福海县| 蓬莱市| 石柱| 桃源县| 渭南市| 克什克腾旗| 青龙| 平阴县| 凭祥市| 琼海市| 开平市| 新蔡县| 奉新县|