一. 私服搭建及配置
1 . 私服簡介
私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之后,當 maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
我們可以使用專門的 maven 倉庫管理軟件來搭建私服,比如:apache archiva,artifactory,sonatype nexus。這里我們使用 sonatype nexus。
2 . 安裝nexus
2 . 1 . 下載nexus
nexus 專業版是需要付費的,這里我們下載開源版 nexus oss。下載地址:http://www.sonatype.org/nexus/go,最新的為oss3.x,我這里選擇穩定版本2.x,點擊后自動下載
2 . 2 . 使用bundle安裝包安裝nexus
解壓安裝包nexus-2.14.5-02.zip,打開命令提示符,進入nexus-2.14.5-02/bin目錄 (為方便啟動和退出nexus,可將bin目錄添加到環境變量),
1.執行nexus命令
2.執行 nexus install 將nexus安裝為windows服務
3.打開瀏覽器,訪問:http://localhost:8081/nexus/:
點擊右上角 log in,使用用戶名:admin ,密碼:admin123 登錄,可使用更多功能:
4 . nexus預置的倉庫
4.1 類型介紹
登陸nexus,在左邊菜單欄里選擇repositories,然后會出現右邊的畫面,右邊上半部分是列出來的repository,黑體字是類型為group的repository。
這里簡單介紹下幾種repository的類型:
ø hosted,本地倉庫,通常我們會部署自己的構件到這一類型的倉庫。比如公司的第二方庫。
ø proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
ø group,倉庫組,用來合并多個hosted/proxy倉庫,當你的項目希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。
4.2 管理本地倉庫
我們前面講到類型為hosted的為本地倉庫,nexus預置了3個本地倉庫,分別是releases, snapshots, 3rd party. 分別講一下這三個預置的倉庫都是做什么用的:
releases:
這里存放我們自己項目中發布的構建, 通常是release版本的, 比如我們自己做了一個ftp server的項目, 生成的構件為ftpserver.war, 我們就可以把這個構建發布到nexus的releases本地倉庫. 關于符合發布后面會有介紹.
snapshots:
這個倉庫非常的有用, 它的目的是讓我們可以發布那些非release版本, 非穩定版本, 比如我們在trunk下開發一個項目,在正式release之前你可能需要臨時發布一個版本給你的同伴使用, 因為你的同伴正在依賴你的模塊開發, 那么這個時候我們就可以發布snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本.
3rd party:
顧名思義, 第三方庫, 你可能會問不是有中央倉庫來管理第三方庫嘛,沒錯, 這里的是指可以讓你添加自己的第三方庫, 比如有些構件在中央倉庫是不存在的. 比如你在中央倉庫找不到oracle 的jdbc驅動, 這個時候我們就需要自己添加到3rdparty倉庫。
4.3 在nexus為自己的項目手動單獨建庫
1. 建庫,add-- >hostedrepository
按照下圖填寫信息,注意圈的地方,填寫完成后save
2. 然后選擇publicrepositories,打開configuration選項卡
3. 將自己創建的倉庫添加到group,如圖從右側移到左側,點擊save,保存。至此,已經成功搭建好我們自定義的倉庫了。
注:如果需要你還可以創建一個倉庫組,在repositories菜單處選add-->repository group即可
5. 在nexus創建賬戶
最后點擊保存。當然自己也可以創建角色,分配權限等,這里直接用已有的角色,省略了一些步驟。
二. 利用搭建的私服,進行上傳和下載jar包
1. 遠程倉庫的認證
大部分公共的遠程倉庫無須認證就可以直接訪問,但我們在平時的開發中往往會架設自己的maven遠程倉庫,出于安全方面的考慮,我們需要提供認證信息才能訪問這樣的遠程倉庫。配置認證信息和配置遠程倉庫不同,遠程倉庫可以配置在settings.xml文件中,也可直接在pom.xml中配置,后面會分別舉例說明,但是認證信息必須配置在settings.xml文件中。在settings.xml中配置認證信息更為安全。如下:在settings.xml中配置<servers>節點,用的賬號為上面我們創建的賬戶。
1
2
3
4
5
6
7
8
9
10
11
12
|
<settings> ... <!--配置遠程倉庫認證信息--> <servers> <server> <id>bbsnexus</id> <username>licui</username> <password>a111111</password> </server> </servers> ... </settings> |
上面代碼我們配置了一個id為bbsnexus的遠程倉庫認證信息。maven使用settings.xml文件中的servers元素及其子元素server配置倉庫認證信息。認證用戶名為licui,認證密碼為a111111。這里的關鍵是id元素,id沒有要求,隨便定義,但是后面配置遠程倉庫的id必須和這里的id保持一致。正是這個id將認證信息與倉庫配置聯系在了一起。
2. 配置遠程倉庫
如果只有一個項目,可以配置在項目的pom文件中:
如果有多個項目時,可以將如上配置放到maven的settings文件中:
repository:在repositories元素下,可以使用repository子元素聲明一個或者多個遠程倉庫。
id:倉庫聲明的唯一id,尤其需要注意的是,maven自帶的中央倉庫使用的id為central,如果其他倉庫聲明也使用該id,就會覆蓋中央倉庫的配置。
name:倉庫的名稱,讓我們直觀方便的知道倉庫是哪個,暫時沒發現其他太大的含義。
url:指向了倉庫的地址,一般來說,該地址都基于http協議,maven用戶都可以在瀏覽器中打開倉庫地址瀏覽構件。
releases和snapshots:用來控制maven對于發布版構件和快照版構件的下載權限。需要注意的是enabled子元素,該例中releases的enabled值為true,表示開啟jboss倉庫的發布版本下載支持,而snapshots的enabled值為false,表示關閉jboss倉庫的快照版本的下載支持。根據該配置,maven只會從jboss倉庫下載發布版的構件,而不會下載快照版的構件。
layout:元素值default表示倉庫的布局是maven2及maven3的默認布局,而不是maven1的布局。基本不會用到maven1的布局。
其他:對于releases和snapshots來說,除了enabled,它們還包含另外兩個子元素updatepolicy和checksumpolicy。
元素updatepolicy用來配置maven從遠處倉庫檢查更新的頻率,默認值是daily,表示maven每天檢查一次。其他可用的值包括:never-從不檢查更新;always-每次構建都檢查更新;interval:x-每隔x分鐘檢查一次更新(x為任意整數)。
元素checksumpolicy用來配置maven檢查校驗和文件的策略。當構建被部署到maven倉庫中時,會同時部署對應的檢驗和文件。在下載構件的時候,maven會驗證校驗和文件,如果校驗和驗證失敗,當checksumpolicy的值為默認的warn時,maven會在執行構建時輸出警告信息,其他可用的值包括:fail-maven遇到校驗和錯誤就讓構建失敗;ignore-使maven完全忽略校驗和錯誤。
3.配置倉庫鏡像
默認的,如果本地倉庫找不到依賴的構件,這時需要東西時先到nexus上找,如果發現nexus服務關閉后,會自動到中央倉庫找。
如果我們想覆蓋中央倉庫的默認地址,強制依賴的東西都到nexus中去找,即使nexus關閉也不會到中央工廠去下載:
修改maven的settings文件:
至此,我們已經可以從自己搭建的私服下載jar了。
4.上傳jar包到遠程倉庫
1)將已有的項目打成jar包上傳到私服服務器
首先需要在pom.xml中配置上傳倉庫的地址,配置distributionmanagement元素,倉庫地址指向前面自定義的倉庫bbsid
1
2
3
4
5
6
7
|
<distributionmanagement> <repository> <id>bbsnexus</id> <name>bbsidrepository</name> <url>http: //127.0.0.1:8081/nexus/content/repositories/bbsid</url> </repository> </distributionmanagement> |
distributionmanagement包含repository和snapshotrepository子元素,前者表示發布版本(穩定版本)jar包的倉庫,后者表示快照版本(開發測試版本)的倉庫。
這兩個元素都需要配置id、name和url,id為遠程倉庫的唯一標識,很重要,name只是為了方便人閱讀,關鍵的url表示該倉庫的地址。
往遠程倉庫部署jar包的時候,需要認證,配置認證的方式為id,一定要與前面settings中server的id保持一致。
如果項目當前的版本是快照版本,則部署到快照版本的倉庫地址,否則就部署到發布版本的倉庫地址,因為這里只是測試演示,前面只創建了release版本的倉庫bbsid,所以省略了snapshotrepository。
配置正確后,定位到要上傳的項目目錄,運行命令mvn clean deploy,maven就會直接將項目打包生成的jar包部署到配置對應的遠程倉庫中。
2)上傳第三方jar包到遠程倉庫
方式一 (假設發布倉庫為bbsid,發布jar包為zbb-sms-0.0.1.jar):
a. settings.xml中配置認證信息。
b. 定位到要上傳的jar包的目錄,執行“mvn deploy:deploy-file -dgroupid=com.zxp.test -dartifactid=sms -dversion=1.0 -dpackaging=jar -dfile=zbb-sms-0.0.1.jar -durl=http://127.0.0.1:8081/nexus/content/repositories/bbsid -drepositoryid=bbsnexus”命令。
說明:deploy:deploy-file表示發布獨立的文件。
groupid、artifactid和version可根據需要設定。(我們要傳的包為zbb-sms-0.0.1.jar,但是命令里指定-dversion=1.0,-dartifactid=sms,所以最終上傳到倉庫后的名稱為sms-1.0.jar)
url為nexus服務器中需要上傳的倉庫路徑。
repositoryid與server的id必須一致。
上傳到倉庫中的結果如下圖示:
方式二 nexus控制臺直接上傳jar包 (假設發布倉庫為bbsid,發布jar包為mysql-connector-java-5.1.43.jar):
在repositories列表中選擇releases,點artifact upload,指定gav definition為“gav parameters”,然后輸入相應的groupid、artifactid和version、packaging,再點擊“select artifact(s) to upload...”選擇指定的jar文件,點擊“add actifactid”添加到actifacts框,最后點“upload artifact(s)”即可。
上傳到倉庫中的jar如下圖示:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/tyhj-zxp/p/7605879.html