Nexus簡介
? ? ? ? ? ?Nexus是Sonatype推出的強大Maven倉庫管理器產品,要比以前TSS上介紹的Artifactory要好使用的多,也是一個拆箱即用的Java App,內嵌Jetty容器和Java Wrapper做Windows服務,安裝簡單到解壓然后雙擊install即可。更詳細的幫助手冊請上官方網站查看,這里推薦一個翻譯中的書籍——《Maven權威指南》(在線閱讀英文版,中文版),一本全面介紹Maven的書,其中也有介紹Nexus的章節,猛擊這。Nexus的優點這里得啰嗦一下(摘抄自Maven中文Blog):
代理遠程倉庫。配置Nexus代理中央倉庫,其它任何公開的Maven倉庫,將你組織內部的Maven配置指向Nexus,這樣所有構件都將從Nexus下載,如果Nexus沒有你要的構件,它會自動先去外部倉庫下載到本地,僅一次。
本地宿主倉庫。Nexus可以在服務器上建立本地的宿主倉庫,你可以往這個倉庫里提交任意的Maven規范構件,包括不能從公開倉庫下載到的構件,或者你組織內部產生的構件。
倉庫組。有了倉庫組,你就能將很多倉庫聚合起來,對外公開一個統一的接口提供構件服務。
構件搜索。Nexus能下載遠程的倉庫索引,并在本地構件自己的倉庫索引,有了該索引,你就能很快速方便的搜索任何你感興趣的構件。
事情RSS源。Nexus服務器上發生的幾乎任何事情,你都能用RSS監視,方便管理。
Release和Snapshots區分。配置Nexus提供Release構件服務或者Snapshots服務,能更清晰的管理構件。
路由。Nexus的路由能夠管理為特定的請求提供特定的倉庫。加入你在一個組中配置了很多倉庫,一條路由能夠極大提高某些特定請求的響應速度。
上傳構件。使用Nexus你能很方便的在web界面上上傳一些特殊的構件至倉庫。
高用戶體驗的UI。使用AJAX和REST技術開發的Nexus,在界面上為提供了很舒適的用戶體驗。
?? ?初始化
1 下載nexus安裝包? 網址:http://www.sonatype.org/nexus/
?? 建議下載最新的版本,最新的版本支持比較新的jdk版本
2 啟動nexus服務
??? 進入nexus的文件目錄:D:\nexus-oss-webapp-1.9.2.4-bundle\nexus-oss-webapp-1.9.2.4\bin\jsw\windows-x86-32下面,
? ??Installnexus.bat 表示安裝nexus服務到window服務中去。
?????Startnexus.bat? 表示啟動nexus服務。
?????nexus.bat? 表示啟動nexus應用程序 。
??? Resumenexus.bat? 表示重啟nexus 。
?????Stopnexus.bat? 表示停止nexus服務
?? 啟動nexus 無需啟動tomcat,只需要點擊“nexus.bat "就可以啟動。
?? 啟動成功后 在瀏覽器地址欄中輸入:
?? http://localhost:8081/nexus/index.html
?? 如果看到nexus界面 說明啟動成功。
默認安裝后的訪問路徑為http://localhost:8081/nexus/, 管理員登錄為admin/admin123,UI是用Ext搭建的,熟悉Ext的人根本沒有操作障礙,登錄后最重要的事情就是打開遠程索引下載,操作為進入Repository菜單,修改 Apache Snapshots,Codehaus Snapshots,Maven Central的Download Remote indexs 為true.? 并右擊每一個倉庫的 repair Index ,進行更新index? 并把所有的proxy類型的倉庫添加到public repository中去。,這一步別忘,我當時搭建的時候就忘了Re-Index,結果等了一天還 沒任何索引文件。
自己覺得比較好的其他的代理倉庫如下:
? 添加新的repository 即代理倉庫
? http://repository.jboss.org/nexus/content/groups/public/
? https://repository.jboss.org/nexus/content/groups/developer/
? http://morphia.googlecode.com/svn/mavenrepo/
Re-Index后,Nexus會從后臺去官方地址下載倉庫索引文件,大概20M大小,根據網速快慢下載相應時間后選擇倉庫時會以樹形目錄的方式顯示倉庫內容。
?

角色權限
Nexus的操作權限完全仿照RBAC角色權限模型,默認三個用戶:admin、anonymous、deployment,對應的是管理用戶、匿 名訪問用戶和部署用戶,管理用戶用于倉庫管理和系統配置,匿名用戶用于倉庫查詢和倉庫下載,部署用戶用于私人jar包的上傳。在這里,我對 deployment的默認角色Nexus Deployment Role做了自定義修改,加入了"All M2 Repositories"的create和update權限,并且加入了"UI:Base UI Privaties"權限,用意稍后解釋。
Nexus的使用
從瀏覽器里打開訪問地址后,通過"Artifact Search"菜單可以進行構件搜索。
對于一些特殊的構件,比如sqlserver2005的jdbc驅動,你可以通過管理員登錄然后從第三方上傳構件
提供倉庫組的概念,對于遠程代理倉庫和本地宿主倉庫,還有第三方倉庫,全部創建為一個public-group,然后通過訪問組就可以訪問所有的倉庫構件了,這就是所謂的分散存儲,統一訪問
和Maven結合也很簡單,首先是要配置Maven,打開$user$/.m2/下的settings.xml(沒有的話創建一個),然后拷貝以下內容到文件中:settings.xml?
<settings><mirrors><mirror><!--This sends everything else to /public --><id>nexus</id><mirrorOf>*</mirrorOf><url>http://服務器IP地址:8081/nexus/content/groups/public</url></mirror></mirrors><profiles><profile><id>nexus</id><!--Enable snapshots for the built in central repo to direct --><!--all requests to nexus via the mirror --><repositories><repository><id>central</id><url>http://central</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://central</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile></profiles><activeProfiles><!--make the profile active all the time --><activeProfile>nexus</activeProfile></activeProfiles> </settings>
?
然后,在從你的工程里的pom.xml中加入以下內容:
?
<repositories><repository><id>nexus</id><name>nexus</name><url>http://192.168.1.59:8080/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.59:8080/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories>
解釋一下:
settings.xml中的proxies/proxy節點配置的是部署服務器訪問屬性,deployment/deploy對應的是部署用戶名和密 碼;mirrors/mirror配置的是maven訪問倉庫的地址,這里使用的是Nexus提供的群組概念,將多個倉庫組成一個public- group的方式進行訪問;profiles/profile則主要用來描述倉庫部署的訪問配置。
上傳jar到本地倉庫,如第三方的jar包 gearman 相關的jar包
選中3rd party 點擊Artifact Upload標簽? ?
??
?
點擊 select artifact(s) 按鈕 選擇要上傳到jar包 然后再add artiffact 如圖所示
?
點擊 uplaod artiffacts 上傳jar包
配置中央倉庫
?????在左邊菜單欄里選擇Repositories, 會看到如下的界面:
?
?
其中右邊欄上半部分列出當前nexus管理的repository,黑體字是類型為group的repository. 這里簡單介紹下幾種repository的類型:
hosted,本地倉庫。通常我們會部署自己的構件到這一類型的倉庫。比如公司/組織開發的項目
proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫或一些第三方公共倉庫。
group,倉庫組,用來合并多個hosted/proxy倉庫,當你的項目希望在多個repository使用依賴項時,無需引用多個倉庫了,只需要引用一個類型為group的repository即可。
Maven central是Maven的中央倉庫,點擊它并選擇configuration標簽欄,我們會看到下面的頁面:
這里有幾個配置項是經常用到的:
Override local storage location:??該選項允許配置?Nexus本地倉庫的存放地址,用來覆蓋其默認的存放地址
Remote storage location: 該選項允許配置遠程倉庫的地址。一般為了提高代理速度,你可以將其修改為國內的鏡像地址。默認值是http://repo1.maven.org/maven2/
Download remote indexes: 該選項配置是否下載遠程索引文件。 建議配置為true,這樣我們便可以通過nexus的搜索功能來搜索我們需要的依賴項。
?
?添加代理倉庫(proxy)
?? ? nexus默認提供了Maven central這個代理倉庫,如果你需要添加其他代理倉庫,那么可以點擊左邊欄頁面上的Repositories鏈接,然后在右邊欄頁面上依次點擊add -> add proxy repository, 隨后出現以下頁面:
根據提示填寫相關信息保存即可。?
管理本地倉庫(hosted)
?Nexus預定義了三種本地倉庫,分別是Releases, Snapshots, 3rd Party. 下面分別介紹一下這三種類型倉庫的作用
Releases: ?存放穩定版本的構件。比如我們完成了一個版本的下數組件的開發,就可以把它發布到這里。
Snapshots: 存放快照版本的構件。 比如一個下數組件在完成所有開發和測試工作之前,是不應該發布到release倉庫的,但可能其他項目只需用到這個組件的某些接口,只要這些接口完成了開發并通過測試,就可以拿來使用, 從而實現多個項目并行開發。
3rd Party: ?存放其他第三方構件。你可能會問, 不是有中央倉庫和其他第三方公共倉庫來管理這些依賴項了嗎?沒錯。但由于某些開源項目出現的時間比maven要早,因此他們大都沒有采用maven方式進行構建。?其他還包括包括一些非開源或使用maven 1.x構建的組件.?我們可以把這類組件通通添加到這里。
創建本地倉庫的方法很簡單。點擊Repository面板上方的Add按鈕,然后選擇Hosted Repository,然后在下方的配置面板中輸入相關信息。 注意根據自己的需要選擇本地倉庫的類型
?倉庫組(group)
? ? ??通過前面介紹我們了解到, 可以建立多個代理倉庫和本地倉庫. 但如果沒有倉庫組的概念,那么當需要引用這些倉庫時, 就需要將他們逐個添加到pom.xml或setting.xml.?倉庫組是為了簡化倉庫的引用而提出的。有了倉庫組的概念, 我們可以把倉庫根據不同目的進行分組,比如把常用的歸到一組或根據訪問權限分組, 然后直接聲明引用某個倉庫組即可. 下面是pom.xml中聲明引用一個nexus倉庫組的例子:?
???????
<repositories><repository><id>nexus-public</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>
?
?可以看到聲明引用一個倉庫組和一個普通的遠程倉庫,配置的寫法完全一樣。
maven本身沒有倉庫組的概念
?Nexus中預設了2個倉庫組, 分別是public repositories和public snapshot repositories. 如圖:
?
?
public repository默認包含本地倉庫的Releases, snapshots和3rd party以及代理倉庫的Maven Central. 你可以在Configuration配置頁添加其他倉庫到這個倉庫組。 如果需要,你還可以創建一個倉庫組,方法是點擊 Add->Repository Group, 當New Repository Group界面后,填入ID, name 等相關信息, 然后在右邊Available Repositories 欄里可以選擇你要添加的倉庫到你新建的倉庫組.?
??
通過?Nexus?搜索構件
? ? ? 在開發過程中過程中,我們往往只記得某個構件的大致名字,這時我們可以通過nexus提供的構件搜索功能查詢該構件的完整配置信息(groupId,artifactId,version).如果通過nexus搜不到某個的構件,那說明這個構件不在當前nexus所登記的倉庫中,可能需要添加額外的代理倉庫或手工上傳某個構件。
? ? ?在使用nexus的搜索功能之前,必須先讓nexus所登記的倉庫建立索引文件, Nexus默認是不為每個倉庫建立索引文件的,因為建立像中央倉庫這樣的索引文件需要耗費比較大的網絡帶寬和事件,僅索引文件就要幾十兆. 要開啟中央倉庫的索引文件下載功能需要在Maven Central的配置頁中, 把Download Remote Indexes改為true. 如圖:
? 這樣設置之后, Nexus會自動從遠程中央倉庫下載索引文件, 為了檢驗索引文件自動下載是否生效,可以切換到Browse標簽頁,如圖:
????下面我們試一下搜索功能, ?搜索欄輸入testing, 查詢結果如下:
這是模糊查詢的結果,當然如果你知道更多信息,比如版本號等,你可以使用高級搜索,點擊高級搜索后,右邊界面會提供集中搜索方式:keyword, classname, GAV, checksum
?
?比如我們這里選擇GAV模式. 假設我只知道artifact的名字(如testng)和版本號(如5.8), 其他的我不知道, 那么就在artifact 和 version處分別輸入testng 和 5.8 , 搜索結果如下:
?
如果你不知道知道構件的名稱, 只知道classname, 那么你也可以通過class name 的方式搜索,這里就不再贅述。
當你選中某項搜索結果, 頁面的下方會出現這個構件的詳細信息, 并且會列出這個構件的Maven依賴配置, 你可以直接拷貝到你的pom文件中使用,這是個非常實用的功能:
?
?
在?Maven?中使用Nexus
到此我們介紹了如何安裝和使用Nexus以及其基本配置, 那么如何在Maven來使用Nexus本地倉庫呢?其實和配置遠程倉庫的方法一樣。下面是在settings.xml中添加了一個nexus本地倉庫的例子:?
????????
<profiles>...<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><activeProfiles><activeProfile>dev</activeProfile></activeProfiles>
?
你也可以在pom.xml中聲明引用某個nexus倉庫。
資料:
http://my.oschina.net/shootercn/blog/12269
http://my.oschina.net/zb0423/blog/60010
http://my.oschina.net/aiguozhe/blog/101537