HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
Nexus 是 Maven 倉庫管理器,用來搭建一個本地倉庫服務(wù)器,這樣做的好處是便于管理,節(jié)省網(wǎng)絡(luò)資源,速度快,還有一個 非常有用的功能就是可以通過項(xiàng)目的 SNAPSHOT 版本管理,來進(jìn)行模塊間的高效依賴開發(fā),下面會一一描述。
雖然你可以通過中央倉庫來獲取你所需要的 jar 包, 但是現(xiàn)實(shí)往往是存在很多問題: 網(wǎng)速慢,你可能需要花很長的時間來下載你所需要的 jar 如果你的公司很大,有幾百甚至幾千人再用 Maven ,那么這些人都去通過中央倉庫來獲取 jar ,那么這是一個很大的資源浪費(fèi) 如果存在模塊之間的依賴開發(fā),你的 snapshot 版本是不能夠被你的伙伴很方便的獲取。 在實(shí)際開發(fā)過程中,有些 jar 的 版本可能在中央倉庫里面不存在,或者更新不及時 ,你是獲取不 到這個 jar 的。
所有以上問題,通過 Nexus 這 個日益流行的倉庫管理器可以輕松的解決。 這個倉庫是本地的,下載的速度是從遠(yuǎn)程下載不可比的。 可以為你公司所有的 Maven 使用者服務(wù),可以進(jìn)行統(tǒng)一管 理 后面我會介紹如何通過 nexus 來進(jìn)行存在模塊依賴的項(xiàng)目的 開發(fā) 你可以添加自己的第三方包。
安裝 Nexus
我們從 http://nexus.sonatype.org/downloads/ 來獲取最新版本,目前最新版本為 1.3.4
Nexus 提供了兩種安裝方式,一種是內(nèi)嵌 Jetty 的 bundle ,只要你有 JRE 就能直接運(yùn)行。第二種方式是 WAR ,你只須簡單的將其發(fā)布到 web 容 器中即可使用。
1 ) Bundle 方式安裝
解壓 nexus-webapp-1.3. 4 -bundle.zip 至任意目錄,如 D:\ tools , 轉(zhuǎn) 到 目錄 D:\ tools\nexus-webapp-1.3. 4 \bin\jsw\windows-x86-32 ,運(yùn)行 Nexus.bat , 如果你是在 linux下安裝,那么就下載 nexus-webapp-1.3. 4 -bundle. tar .gz, 解壓后轉(zhuǎn)到${NEXUS_HOME}/ nexus-webapp-1.3.3\bin\jsw\linux-x86-32 ,它還支持solaris,macos等操作系統(tǒng) 。當(dāng)你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,說明Nexus啟動成功了,然后打開瀏覽器,訪問 http://127.0.0.1:8081/nexus, 通 過admin的帳號 (admin)和密碼 (admin123)登錄 你會看到如下的頁面:
如果有新版本發(fā)布,會有提示在默認(rèn)頁面上。
這里,可以管理倉庫,配置 Nexus 系統(tǒng),管理任務(wù),管理用戶,角色,權(quán)限,查看系統(tǒng)的 RSS 源,管理及查看系統(tǒng)日志,等等。
War 方式安裝
你可以同過 war 的 方式以 web 應(yīng)用的形式發(fā)布到你的應(yīng)用服務(wù)器,比如 tomcat 。你所要做的就是下載 war 版 本的文件,然后放到應(yīng)用服務(wù)器的發(fā)布目錄即可,這里就不多講了。
到此我們已經(jīng)安裝好 Nexus, 下面我來介紹下一些我們常用的功能和使用:
配置 中央倉庫
先看一下界面:
在左邊菜單欄里選擇 Repositories ,然后會出現(xiàn)右邊的畫面,右邊上半部分是列出來的 repository ,黑體字是類型為 group 的 repository. 這里簡單介紹下幾種 repository 的類型 : hosted,本地倉庫,通常我們會部署自己的構(gòu)件到這一類型的倉庫。 比如公司的第二方庫 。 proxy,代理倉庫,它們被用來代理遠(yuǎn)程的公共倉庫,如maven中央倉庫。 group,倉庫組,用來合并多個hosted/proxy倉庫, 當(dāng)你的項(xiàng)目希望在多個 repository使用資源時就不需要多次引用了,只需要引用一個group即可。
Maven central是Maven的中央倉庫,點(diǎn)擊它并選擇configuration標(biāo)簽欄,我們會看到下面的頁面:
這里有幾個項(xiàng)目是我們可能會經(jīng)常用到的: Override local storage location: 在這個選項(xiàng)你可以配置你的 Nexus 本地倉庫的存放地址 ,用來覆蓋其默認(rèn)的存放地址 Remote storage location: 這里是遠(yuǎn)程倉庫的地址,為了提高代理速度,你可以修改為國內(nèi)的鏡像地址。默認(rèn)值是 http://repo1.maven.org/maven2/ Download remote indexes: 這里配置是否下載遠(yuǎn)程索引文件,模式是 false, 建議配置為 true , 這樣我們便可以通過索引文件來搜索我們需要的構(gòu)件。
添加代理倉庫
Maven central 是一個比較大的代理倉庫,如果你需要添加的一個代理倉庫,那么可以在 點(diǎn)擊左邊慘淡欄里面的 Repositories, 然后右邊的頁 面點(diǎn)擊 add -> add proxy repository, 之后出現(xiàn)以下頁面:
填寫相關(guān)信息保存即可。 通常情況下 , 使用預(yù)設(shè)的代理倉庫已經(jīng)能夠滿足大部分 項(xiàng)目的需求了 , 只有在特殊需求的情況下才會參加代理倉庫 .
管理本地倉庫
我們前面講到類型為 hosted 的為本地倉庫, Nexus 預(yù)定義了 3 個本地倉庫,分別是 Releases, Snapshots, 3 rd Party. 分別講一下這三個預(yù)置的倉庫都是做什么用的 : Releases: 這里存放我們自己項(xiàng)目中發(fā)布的構(gòu)建 , 通常是 Release 版本的 , 比如我們自己做了一個 FTP Server 的項(xiàng)目 , 生成的構(gòu)件為 ftpserver.war, 我們就可 以把這個構(gòu)建發(fā)布到 Nexus 的 Releases 本地倉庫 . 關(guān)于符合發(fā)布后面會有介紹 . Snapshots: 這個倉庫非常的有用 , 它的目的是讓我們可以發(fā)布那些非 release 版本 , 非穩(wěn)定版本 , 比如我們在 trunk 下開發(fā)一個項(xiàng)目 , 在正式 release 之前你可能需要臨時發(fā)布一個版本給你的同伴使用 , 因?yàn)?你的同伴正在依賴你的模塊開發(fā) , 那么這個時候我們就可以發(fā)布 Snapshot 版本到這個倉庫 , 你 的同伴就可以通過簡單的命令來獲取和使用這個臨時版本 . 3 rd Party: 顧名思義 , 第三方庫 , 你可 能會問不是有中央倉庫來管理第三方庫嘛 , 沒錯 , 這里的是指可以讓你添加自己的第三方庫 , 比 如有些構(gòu)件在中央倉庫是不存在的 . 比如你在中央倉庫找不到 Oracle 的 JDBC 驅(qū) 動 , 這個時候我們就需要自己添加到 3rd party 倉庫 . 你也可以創(chuàng)建自己的本地倉庫,點(diǎn)擊 Repository 面板上方的 Add 按鈕,然后選擇 Hosted Repository ,然 后在下方的配置面板中輸入相關(guān)信息 , 這里我們不再需要填寫遠(yuǎn)程倉庫地址,根據(jù)自己的需要選擇 Release 或者 Snapshot ,如圖:
Maven 倉庫組
倉庫組的概念是 Maven 沒 有的 , 通過前面介紹可以了解到 , 我們可以建立多個 proxy 代理倉庫 ,hosted 本地倉庫 , 如果沒有倉庫組的概念 , 我們 如果需要引用這些倉庫的是時候需要一一加入到我們的 setting.xml 里面去 , 有了倉庫的組的概念 , 我 們只需要做一次引用就可以了 , 把我們需要的倉庫加入到倉庫組即可 . 像這樣 :
nexus
http:// 127.0.0.1 :8081/nexus/content/groups/public/
true
true
Nexus 中預(yù)設(shè)了 2 個倉庫組 , public repositories 和 public snapshot repositories. 如圖 :
這個倉庫組默認(rèn)包含本地倉庫 Releases, snapshots, 3 rd party 和代理倉庫 Maven Central. 你可以在 Configuration 配置頁添加倉庫到這個倉庫組 . 如果需要你還可以創(chuàng)建一個倉庫組 , 如圖 :
點(diǎn)擊 Add->Repository Group
出現(xiàn) New Repository Group 界面后 , 填入 ID, name 等相關(guān)信息 , 在 右邊 Available Repositories 欄里可以選擇你要添加的倉庫 到你 新建的倉庫組 .
通過 Nexus 搜索構(gòu)件
在我們實(shí)際使用構(gòu)件的過程中通常遇到一個問題 , 有時 候我緊緊知道我所需要的構(gòu)建的大致名字 , 并不知道全稱或 group id, 這是件非常頭疼的事 情 . Nexus 基于 Nexus indexer 的搜索功能幫我們解決了這個問題 .
要是用搜索功能 , 必須 要有索引文件 , Nexus 默 認(rèn)是不建立索引文件的 , 因?yàn)橄裰醒雮}庫這樣的索引文件的建立需要耗費(fèi)比較大的網(wǎng)絡(luò)資源 , 僅索 引文件就要幾十兆 . 要開啟中央倉庫的索引文件下載功能需要在 Maven Central 的配置頁面 , 把 Download Remote Indexes 選擇 true. 如圖 :
這樣設(shè)置以后 , Nexus 會自動從遠(yuǎn)程中央倉庫下載索引文件 , 為了檢驗(yàn)索引文件自動下載是否生效 , 可以卻換到 Browse:
如果出現(xiàn)先以上文件夾 , 那說明 索引文件已經(jīng)建立 .
下面我試一下搜索功能 , 在左 邊菜單欄里面有個 Artifact Search, 在輸入框里面輸入你想要搜索的構(gòu)件名字 , 比如 : testing , 那 么查詢結(jié)果如下:
這是模糊查詢的結(jié)果,當(dāng)然如果你知道更多信息,比如版本號等,你 可以使用高級搜索,點(diǎn)擊高級搜索后,右邊界面會提供集中搜索方式: keyword, classname, GAV, checksum
比如我們這里選擇 GAV 模 式 , 而且我只知道 artiface name : testng 和版本號 5.8, 其他的我不知道 , 那么就在 artifact 和 version 處分別輸入 testng 和 5.8 , 搜索結(jié)果如下 :
你如果你不知道知道構(gòu)件的名稱 , 只 知道 classname, 那么你也可以通過 class name 的方式搜索 , 這里 就不再 贅述
當(dāng)你選擇一項(xiàng)搜索結(jié)果 , 在頁面 的下方會出現(xiàn)這個構(gòu)件的詳細(xì)信息 , 并且會列出這個構(gòu)件的 Maven 依賴配置 , 你 可以直接拷貝到你的 pom 文件中使用 , 這是個非常實(shí)用的功能 :
在 Maven 中使用 Nexus
到此為止我們介紹了如何安裝和使用 Nexus 以及其基本配置 , 下 面我們介紹下如何讓 Maven 來使用 Nexus 本地倉庫用來替代使用遠(yuǎn)程倉庫 . 在 Maven 使用 Nexus 本地倉庫只需稍作配置 , 在 settings.xml 中加入以下代碼 :
dev
nexus
http:// 127.0.0.1 :8081/nexus/content/groups/public/
true
true
nexus
http://127 . 0.0.1:8081/nexus/content/groups/public
true
true
dev
這里配置了 repository 和 pluginRepository, Maven 在使用第三方構(gòu)件和插件時是分開來配置的 , 所以 如果我們也希望插件的下載也通過我們的本地倉庫來下載 , 那么我們就需要配置 pluginRepository.
紅色字體部分就是我們之前安裝的 Nexus 的地址 , 這個地址可以是你們公司局域網(wǎng)內(nèi)部的一臺倉庫服務(wù)器 .
true 這個標(biāo)簽的作用是設(shè)定是否允許 下載
release 版本 的 載構(gòu)件 , 同樣 snapshots 標(biāo)簽可以設(shè)定是否允許 下載 snapshot 版本 的構(gòu)件 .
通常 , 我們不建議下載 snapshot 版本的構(gòu)件 , 因?yàn)樗遣环€(wěn)定的版本 , 除非你有特殊的需
求 .
構(gòu)件部署
有些時候我們需要部署構(gòu)件到 Nexus 的 3rd party, 比如我們在中央倉庫找不到我們需要的構(gòu)件 , 我們可以通過 Nexus 的 UI 來上傳構(gòu)件 :
點(diǎn)擊左邊菜單欄的 Repositories, 然后點(diǎn)擊右邊界面的 3rd party, 選擇界面下方的 Artifact Upload, 這個時候出現(xiàn)以下界面 :
上傳構(gòu)件需要兩個步驟 , 一個是 定義文件的上傳 , 再就是構(gòu)件的實(shí)體文件 .
第一部分定義文件可以是 POM 文 件 , 這也是比較推薦的方式 , 如果沒有 pom 文 件 , 可以
選擇以參數(shù)的形式輸入 .
第二部分是上傳構(gòu)件的實(shí)體文件 , 這里 簡單說一下 Classifier 和 Extension, 這兩個都是選
填相 , Classifier 用來區(qū)別同功 能的構(gòu)件用于不同的場景 , 比如這個構(gòu)件是分別針對 JDK14
和 JDK15 做了 2 個功 能一樣的 Jar, 這個時候你就需要指定這個構(gòu)件的 Classifier 為 JDK14
還是 JDK15. Extension 是指 擴(kuò)展名 , 如果不提供 , 那么會自動取這個構(gòu)件的 Packaging Type
作為擴(kuò)展名 , 比如 ear, jar, war 等等 . (Packaging Type 是在第一步中通過 pom 文件或者手
工輸入得到的 )
剛才說了 3rd party 的部署 , 關(guān)于 releases 和 snapshots 的 UI 部署也是一樣的操作過程 .
我們之前也講過 , 這里 的 releases 和 snapshots 是用來部署我們自己的項(xiàng)目構(gòu)件的 , 通過
UI 部署是可以 , 但是不是最高效的 , 我們可以通過配置 Maven 來自動部署我們的項(xiàng)目構(gòu)
件 , 這也是我們建立自己的倉庫的一個非常 重要的原因 , 下面就讓我們看看如何配置 :
首先需要在 POM 文 件中加入以下代碼 :
… nexus-releases Nexus Release Repository http://127.0.0.1:8081 /nexus/content/repositories/releases/ nexus-snapshots Nexus Snapshot Repository http://127.0.0.1:8081 /nexus/content/repositories/snapshots/ … 這里配置 , 讓 Maven 知道當(dāng)我要發(fā)布 release 版本或者 snapshot 版本是需要發(fā)布到哪個地址 .
然后我們需要在 setting.xml 里面配置一下 Nexus 的帳號和密碼 :
… nexus-releases admin admin123 nexus-snapshots admin admin123 … 到此為止 , 我們 就可以通過命令 mvn deploy 或者通過 IDE 的可視化界面點(diǎn)擊 deploy 來發(fā)布我們項(xiàng)目到本地倉庫了 . 通 過這種方式我們可以很方便的進(jìn)行模塊間的依賴開發(fā) , 在后面的文章中我會詳細(xì)介紹如何通過 snapshot 來讓我們的依賴開發(fā)變 得簡單 .
小結(jié)
本文介紹了 Maven 倉 庫 , 如何通過 Nexus 建立自己本地倉庫 , 通過和遠(yuǎn)程倉庫的比較 , 我 們知道 Nexus 給我?guī)砗芏喾奖阒?, 方便我們管理 , 方 便我們的項(xiàng)目構(gòu)件部署 , 項(xiàng)目的依賴開發(fā)等 . 還在等什么 , 創(chuàng) 建你自己的倉庫吧 .