Nexus2.0.0入門指南(圖文)
Nexus介紹
Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜尋功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的記憶體,基於簡單檔案系統而非資料庫。這些優點使其日趨成為最流行的Maven倉庫管理器。
下載和安裝
Nexus提供了兩種安裝方式,一種是內嵌Jetty的bundle,只要你有JRE就能直接執行。第二種方式是WAR,你只須簡單的將其釋出到web容器中即可使用。
Bundle方式安裝
解壓nexus-webapp-1.3.0-bundle.zip 至任意目錄,如D:\dev_tools ,然後開啟CMD,cd至目錄D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32 ,執行Nexus.bat 。你會看到Nexus的啟動日誌,當你看到“Started [email protected]:8081”之後,說明Nexus啟動成功了,然後開啟瀏覽器,訪問http://127.0.0.1:8081/nexus,你會看到如下的頁面:
要停止Nexus,Ctrl+C即可,此外InstallNexus.bat可以用來將Nexus安裝成一個windows服務,其餘的指令碼則對應了啟動,停止,暫停,恢復,解除安裝Nexus服務。
WAR方式安裝
你需要有一個能執行的web容器,這裡以Tomcat為例,加入Tomcat的安裝目錄位於D:\dev_tools\apache-tomcat-6.0.18 ,首先我們將下載的nexus-webapp-1.3.0.war 重新命名為nexus.war ,然後複製到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,然後啟動CMD,cd到D:\dev_tools\apache-tomcat-6.0.18\bin\ 目錄,執行startup.bat 。一切OK,現在可以開啟瀏覽器訪問http://127.0.0.1:8080/nexus,你會得到和上圖一樣的介面。
代理外部Maven倉庫
登陸
要管理Nexus,你首先需要以管理員身份登陸,點選介面右上角的login,輸入預設的登入名和密碼:admin/admin123,登陸成功後,你會看到左邊的導航欄增加了很多內容:
這裡,可以管理倉庫,配置Nexus系統,管理任務,管理使用者,角色,許可權,檢視系統的RSS源,管理及檢視系統日誌,等等。你會看到Nexus的功能十分豐富和強大,本文,筆者只介紹一些最基本的管理和操作。
代理Maven中央倉庫
點選左邊導航欄的Repositories,介面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的Type欄位的值有group,hosted,proxy,virtual。這裡我們不關心virtual,只介紹下另外三種類型:
- hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。
- proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。
- group,倉庫組,用來合併多個hosted/proxy倉庫,通常我們配置maven依賴倉庫組。
由此我們知道,我們需要配置一個Maven中央倉庫的proxy,其實Nexus已經內建了Maven Central,但我們需要做一些配置。點選倉庫列表中的Maven Central,你會注意到它的Policy是release,這說明它不會代理遠端倉庫的snapshot構件,這是有原因的,遠端倉庫的snapshot版本構件不穩定且不受你控制,使用這樣的構件含有潛在的風險。然後我們發現主面板下方有三個Tab,分別為Browse,Configuration和Mirrors,我們點選Configuration進行配置,你現在需要關心的是兩個配置項:“Remote Storage Location”為遠端倉庫的地址,對於Maven Central來說是http://repo1.maven.org/maven2/;“Download Remote Indexes”顧名思義是指是否下載遠端索引檔案,Maven Central的該欄位預設為False,這是為了防止大量Nexus無意識的去消耗中央倉庫的頻寬(中央倉庫有大量的構件,其索引檔案也很大)。這裡我們需要將其設定為True,然後點選Save。在Nexus下載的中央倉庫索引檔案之後,我們就可以在本地搜尋中央倉庫的所有構件。下圖展示了我們剛才所涉及的配置:
新增一個代理倉庫
這裡我們再舉一個例子,我們想要代理Sonatype的公共倉庫,其地址為:http://repository.sonatype.org/content/groups/public/。步驟如下,在Repositories面板的上方,點選Add,然後選擇Proxy Repository,在下方的配置部分,我們填寫如下的資訊:Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/。其餘的保持預設值,需要注意的是Repository Policy,我們不想代理snapshot構件,原因前面已經描述。然後點選Save。配置頁面如下:
管理本地Maven倉庫
Nexus預定義了3個本地倉庫,分別為Releases,Snapshots,和3rd Party。這三個倉庫都有各自明確的目的。Releases用於部署我們自己的release構件,Snapshots用於部署我們自己的snapshot構件,而3rd Party用於部署第三方構件,有些構件如Oracle的JDBC驅動,我們不能從公共倉庫下載到,我們就需要將其部署到自己的倉庫中。
當然你也可以建立自己的本地倉庫,步驟和建立代理倉庫類似,點選Repository面板上方的Add按鈕,然後選擇Hosted Repository,然後在下方的配置面板中輸入id和name,注意這裡我們不再需要填寫遠端倉庫地址,Repository Type則為不可修改的hosted,而關於Repository Policy,你可以根據自己的需要選擇Release或者Snapshot,如圖:
管理Maven倉庫組
Nexus中倉庫組的概念是Maven沒有的,在Maven看來,不管你是hosted也好,proxy也好,或者group也好,對我都是一樣的,我只管根據groupId,artifactId,version等資訊向你要構件。為了方便Maven的配置,Nexus能夠將多個倉庫,hosted或者proxy合併成一個group,這樣,Maven只需要依賴於一個group,便能使用所有該group包含的倉庫的內容。
Nexus預定義了“Public Repositories”和“Public Snapshot Repositories”兩個倉庫組,前者預設合併所有預定義的Release倉庫,後者預設合併所有預定義的Snapshot倉庫。我們在本文前面的部分建立了一個名為“Sonatype Repository”的倉庫,現在將其合併到“Public Repositories”中。
點選倉庫列表中的“Public Repositories”,然後選擇下方的"Configuration" Tab,在配置面板中,將右邊“Avaiable Repositories”中的“Sonatype Repository”拖拽到左邊的“Ordered Group Repository”中,如圖:
建立倉庫組和建立proxy及hosted倉庫類似,這裡不再贅述。需要注意的是format欄位需要填寫“maven2”,新增你感興趣的倉庫即可。
搜尋構件
在浩大的Maven倉庫中一下下點選連結,瀏覽路徑以尋找感興趣的構件是一件很鬱悶的事情。Nexus基於nexus-indexer提供構件搜尋功能,要想對倉庫進行搜尋,無論是hosted,proxy,或者group,你都必須確認索引檔案存在。這一點對於代理倉庫尤其重要,有些遠端倉庫可能根本就沒有索引,所以你無法搜尋這些代理倉庫。有些遠端倉庫的遠端索引非常大,如中央倉庫達到了70M左右,那麼第一次下載索引需要花很多時間,所以要期望得到搜尋結果,確保看到如下的檔案:
一旦你的Nexus擁有了本地或者遠端倉庫的索引檔案,你就可以享受Nexus的構件搜尋功能了。不論登陸與否,你都可以使用關鍵字進行模糊搜尋,比如我在左邊導航欄上部的搜尋框內輸入junit,然後點選搜尋按鈕,右邊立刻會分頁顯示500多條的junit相關構件資訊。如果你瞭解更多的資訊,你也可以通過限定groupId,artifactId,version進行搜尋,點選導航欄中的“Advanced Search”,點選右邊所有頁面左上角的下拉框,選擇“GAV Search”。筆者這裡輸入junit:junit:4.4,然後回車:
選擇一項搜尋結果,在頁面下方會顯示“Artifact Information”的面板,你可以點選"artifact"或者"pom"下載對應檔案,而該面板右邊更顯示了一個Maven依賴配置,你可以直接複製該配置到Maven POM中,這是個十分方便的特性。
此外,值得一提的是,Nexus還支援基於classname的搜尋,你只需點選搜尋頁面右上角的下拉框,選擇“Classname Search”,然後輸入類名即可,這裡我不再贅述。
配置Maven使用Nexus
預設情況下,Maven依賴於中央倉庫,這是為了能讓Maven開箱即用,但僅僅這麼做明顯是錯誤的,這會造成大量的時間及頻寬的浪費。既然文章的前面已經介紹瞭如何安裝和配置Nexus,現在我們就要配置Maven來使用本地的Nexus,以節省時間和頻寬資源。
我們可以將Repository配置到POM中,但一般來說這不是很好的做法,原因很簡單,你需要為所有的Maven專案重複該配置。因此,這裡我將Repository的配置放到$user_home/.m2/settings.xml中:
Xml程式碼- <settings>
- ...
- <profiles>
- <profile>
- <id>dev</id>
- <repositories>
- <repository>
- <id>local-nexus</id>
- <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- </repositories>
- </profile>
- </profiles>
- <activeProfiles>
- <activeProfile>dev</activeProfile>
- </activeProfiles>
- ...
- </settings>
由於我們不能直接在settings.xml中插入<repositories>元素,這裡我們編寫了一個profile,並添加了一個profile並使用<activeProfile>元素自動將這個profile啟用。這裡的local-nexus倉庫指向了剛才我們配置的Nexus中“Public Repositories”倉庫組,也就是說,所有該倉庫組包含的倉庫都能供我們使用。此外,我們通過<releases>和<snapshots>元素激活了Maven對於倉庫所有型別構件下載的支援,當然你也可以調節該配置,比如說禁止Maven從Nexus下載snapshot構件。
使用該配置,Maven就會從你的Nexus伺服器下載構件了,速度和從Central下載可不是一個數量級的。
部署構件至Nexus
Nexus提供了兩種方式來部署構件,你可以從UI直接上傳,也可以配置Maven部署構件。
通過Nexus UI部署
有時候有個jar檔案你無法從公共Maven倉庫找到,但是你能從其它得到這個jar檔案(甚至是POM),那麼你完全可以將這個檔案部署到Nexus中,使其成為標準流程的一部分。步驟如下:
點選左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如“3rd Party”,然後會看到頁面下方有四個tab,選擇最後一個“Upload”,你會看到構件上傳介面。選擇你要上傳的構件,並指定POM,(或者手工編寫GAV等資訊),最後點選Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。如圖:
通過Maven部署
更常見的用例是:團隊在開發一個專案的各個模組,為了讓自己開發的模組能夠快速讓其他人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其他人只需要在POM新增一個對於你開發模組的依賴,就能隨時拿到最新的snapshot。
以下的pom.xml配置和settings.xml能讓你通過Maven自動化部署構件:
pom.xml
Xml程式碼- <project>
- ...
- <distributionManagement>
- <repository>
- <id>nexus-releases</id>
- <name>Nexus Release Repository</name>
- <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>
- </repository>
- <snapshotRepository>
- <id>nexus-snapshots</id>
- <name>Nexus Snapshot Repository</name>
- <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>
- </snapshotRepository>
- </distributionManagement>
- ...
- </project>
settings.xml
Xml程式碼- <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>
這裡我們配置所有的snapshot版本構件部署到Nexus的Snapshots倉庫中, 所有的release構件部署到Nexus的Releases倉庫中。由於部署需要登陸,因為我們在settings.xml中配置對應Repository id的使用者名稱和密碼。
然後,在專案目錄中執行mvn deploy ,你會看到maven將專案構件部署到Nexus中,瀏覽Nexus對應的倉庫,就可以看到剛才部署的構件。當其他人構建其專案時,Maven就會從Nexus尋找依賴並下載。
總結
本文介紹強大的倉庫管理器——Nexus,包括如何下載安裝Nexus,配置Nexus代理中央倉庫,管理Nexus的代理倉庫,本地倉庫,以及倉庫組。並幫助你瞭解如何通過Nexus搜尋構件。最後,如何在Maven中配置Nexus倉庫,以及如何部署構件到Nexus倉庫中。這些都是Nexus中最基本也是最常用的功能。隨著使用的深入,你會發現Nexus還有很多其它的特性,如使用者管理,角色許可權管理等等。
Nexus的OSS版本是完全開源的,如果你有興趣,你可以學習其原始碼,甚至自己實現一個REST客戶端。
馬上擁抱Nexus吧,它是免費的!
相關推薦
Nexus2.0.0入門指南(圖文)
Nexus介紹 Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus
Nexus入門指南(圖文)
Nexus介紹 Nexus是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿
Scratch 3.0建站指南(二)後臺技術選型
上一節,我們簡單講了一下Scratch 3.0的背景介紹,以及如何在本地編譯執行的內容,對於採用面對面的教學方式,如果部署在區域網,這種方式應該也足夠了。Scratch 3.0的指令碼可以存放在本地,如果是公用電腦,可以使用目錄的方式分開存放,如果是學生自帶的
Scratch 3.0建站指南(三)課程管理
轉載僅供個人學習,原文地址:https://blog.csdn.net/fancy_kevin/article/details/84110975 Scratch 3.0建站指南(三)課程管理 線下機構是否需要針對線上進行課程管理? 1.是否需要將線上作為一種獲客來源 2.是否需要線上課程為線下授
springboot2.0入坑指南(一)
跟隨專案,長期記錄自己的踩坑經歷。。 一、springboot介紹 呃,,首先簡單介紹 一下springboot,一個微服務框架,能夠快速整合第三方框架(傳統的ssm、ssh等等),完全採用註解化,簡化配置,內建嵌入Http伺服器。傳統框架(如SS
【數據庫】9.0 MySQL入門學習(九)——獲得數據庫和表的信息、日期計算、查詢
編輯 輸入 3.0 dog tro ron 學習 後來 spec 1.0 SELECT語句用來從數據表中檢索信息。 SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to_s
ECMAScript 6.0基礎入門教程(一)-ES6基礎入門教程
ECMAScript 6.0基礎入門教程(一) 1、ES6簡介 1.1 ES6的歷史 ECMAScript簡稱ECMA或ES ECMAScript與JavaScript的關係 ECMA是European Computer Manu
Thinkphp5.0快速入門筆記(1)
學習來源與說明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 測試與部署均在windows10下進行學習。 Composer安裝和更新 Composer 是 PHP 用來管理依賴(dependency)關係的工具。可以在自己
Maven入門指南(二)
deploy ... web服務器 快速 repos 必須 轉載 關於 net 轉載自並發編程網 – ifeve.com本文鏈接地址: Maven入門指南(二) Maven目錄結構 Maven有一個標準的目錄結構。如果你在項目中遵循Maven的目錄結構,就無需在pom文件中
貓都能學會的Unity3D Shader入門指南(一)
val int 系列 opengl 概念 想要 ble 結果 shade 動機 自己使用Unity3D也有一段時間了,但是很多時候是流於表面,更多地是把這個引擎簡單地用作腳本控制,而對更深入一些的層次幾乎沒有了解。雖然說Unity引擎設計的初衷就是創建簡單的不需要開發者操
Drools規則引擎入門指南(二)
本篇部落格主要講解Drools常用的屬性以及函式 屬性 首先我們在resources\rules資料夾下建立一個Property.drl,還有一個DroolsApplicationPropertyTests 1. salience優先順序 salience 屬性的值預設為0,它的值越大執行的
機器學習之python入門指南(二)元組、集合、字典的使用
Python3中元組、集合、字典的使用 Python中元組的用法元組的建立與訪問 元組和列表類似,不同之處在於元組不能修改,元組使用小括號,列表使用方括號,注意元組中如果只包含以個元素需要在後面加,否則會被當作運算子使用 元組與字串類似,下標索引從0開始,可以進行擷取,取捨
Maven入門指南(一)
原文連結 譯文連結 譯者:nkcoder 校對:方騰飛 Maven介紹: Maven是一個強大的Java專案構建工具。當然,你也可以使用其它工具來構建專案,但由於Maven是用Java開發的,因此Maven被更多的用於Java專案中。 這篇教程的目的是幫助你理解Maven的工作機制。因此
Asp.Net MVC4入門指南(2):新增一個控制器
MVC代表: 模型-檢視-控制器 。MVC是一個架構良好並且易於測試和易於維護的開發模式。基於MVC模式的應用程式包含: · Models: 表示該應用程式的資料並使用驗證邏輯來強制實施業務規則的資料類。 · Views: 應用程式動態生成 HTML所使用的模板檔案。 · Controllers: 處理
Asp.Net MVC4入門指南(6):驗證編輯方法和編輯檢視
在本節中,您將開始修改為電影控制器所新加的操作方法和檢視。然後,您將新增一個自定義的搜尋頁。 在瀏覽器位址列裡追加/Movies, 瀏覽到Movies頁面。並進入編輯(Edit)頁面。 Edit(編輯)連結是由Views\Movies\Index.cshtml檢視中的Html.ActionLink方法
Asp.Net MVC4入門指南(7):給電影表和模型新增新欄位
在本節中,您將使用Entity Framework Code First來實現模型類上的操作。從而使得這些操作和變更,可以應用到資料庫中。 預設情況下,就像您在之前的教程中所作的那樣,使用 Entity Framework Code First自動建立一個數據庫,Code First為資料庫所新增的表,將幫
Asp.Net MVC4入門指南(4):新增一個模型
在本節中,您將新增一些類,這些類用於管理資料庫中的電影。這些類是ASP.NET MVC 應用程式中的"模型(Model)"。 您將使用.NET Framework 資料訪問技術Entity Framework,來定義和使用這些模型類。Entity Framework(通常稱為 EF) 是支援程式碼優先的開發
Asp.Net MVC4入門指南(8):給資料模型新增校驗器
在本節中將會給Movie模型新增驗證邏輯。並且確保這些驗證規則在使用者建立或編輯電影時被執行。 保持事情 DRY ASP.NET MVC 的核心設計信條之一是DRY: "不要重複自己(Don’t Repeat Yourself)"。ASP.NET MVC鼓勵您指定功能或者行為,只做一次,然後將它應用到應用
Asp.Net MVC4入門指南(3):新增一個檢視
在本節中,您需要修改HelloWorldController類,從而使用檢視模板檔案,乾淨優雅的封裝生成返回到客戶端瀏覽器HTML的過程。 您將建立一個檢視模板檔案,其中使用了ASP.NET MVC 3所引入的Razor檢視引擎。Razor檢視模板檔案使用.cshtml副檔名,並提供了一個優雅的方式來使用C
Asp.Net MVC4入門指南(9):查詢詳細資訊和刪除記錄
在本教程中,您將檢視自動生成的Details和Delete方法。 查詢詳細資訊和刪除記錄 開啟Movie控制器並檢視Details方法。 public ActionResult Details(int id = 0) { Movie movie = db.Movies.Find(id);