一、什麼是私服
私服不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫,架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。
如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候我們不得不爲自己的團隊搭建屬於自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。
以下是有無私服的對比:
二、Nexus下載與安裝
Nexus安裝的先決條件:
不管是NexusOpen Source還是Nexus Professional,因爲基於JAVA開發,所以需要JRE運行環境。
下載Nexus:
Nexus有2個版本,Nexus Open Source 和 NexusProfessional。
NexusOpen Source是可基於EPL協議免費使用修改分發的全功能倉庫管理系統。Nexus Professional主要用於需要複雜大型企業或組織。
本文只介紹NexusOpen Source,下文簡稱Nexus。
Nexus下載地址,有完整版,有war版。前者可以單獨運行爲一個基於jetty的服務,後者是運行在ServletConstainer的Web應用。
安裝Nexus
安裝Nexus非常簡單。解壓下載的文件到任意目錄,不過要小心權限問題已經Windows下帶空格文件夾引起的問題。然後配置NEXUS_HOME。
解壓出來的目錄下除了nexus外,還有一個sonatype-work文件夾。這個文件夾包含了所有nexus的倉庫以及配置數據,這麼做使得更加容易更新到新版的nexus。當然,這個目錄的路徑也能通過NEXUS_HOME/conf/nexus.properties修改
1. 下載Nexus
官網http://www.sonatype.org/nexus/ 下載最新的Nexus。
2. Bundle方式安裝Nexus
- 首先看下解壓後的目錄,結構:解壓後存在兩個文件夾:nexus-2.4.0-01(不同版本版本號不同)和sonatype-work。nexus-2.4.0-01: 該目錄包含了Nexus運行所需要的文件,如啓動腳本、依賴jar包等。sonatype-work:該目錄包含Nenus生成的配置文件、日誌文件、倉庫文件等。第一個目錄是運行Nexus必須的,而第二個不是必須的,Nexus會在運行的時候動態創建該目錄。
3. 運行Nexus
- 當你運行Nexus時,你實際運行的是一個運行在0.0.0.0:8081的web server。Nexus運行在一個Jetty的servlet容器內,然後通過一個本地的封裝服務Tanuki Java Service Wrapper來啓動。它可以通過配置將nexus運行爲一個unix或者windows的一個服務。bin目錄下的nexus或者nexus.bat就是服務的起點,通過你的系統來選擇對應的版本。
- 配置Path,啓動Nexus(在windows操作系統上)首先在環境變量path下加入如下地址:C:\nexus\nexus-2.6.2-01-bundle\nexus-2.6.2-01\bin;之後在cmd下啓動Nexus服務,啓動成功後,可以打開打開瀏覽器訪問http://localhost:8081/nexus 就可以看到Nexus的界面了。8081爲默認的端口號,要修改端口號可進入nexus-2.1.2-bundle\nexus-2.1.2\conf\打開nexus.properties文件,修改application-port屬性值就可以了,這時你可以單擊界面右上角的Login進行登錄,Nexus默認管理用戶名和密碼爲admin/admin123。
- 在linux上切換到/opt/nexus/nexus-2.14.0-01/bin目錄下,存在nexus及nexus.bat文件,可以使用./nexus start 啓動nexus,這時候可能會報錯。
-
這時候提示:
WARNING – NOTRECOMMENDED TO RUN AS ROOT
If you insist running as root, then set theenvironment variable RUN_AS_USER=root before running this script.
大概意思就是要在環境配置export RUN_AS_USER=root,臨時配置
在命令行下輸入:
export RUN_AS_USER=root
然後執行,就不會再提示了
./nexus start
也可以在系統裏面永久配置
vi /etc/profile 加入export RUN_AS_USER=root
4. 配置Nexus爲服務
啓動後,你就能通過瀏覽器訪問http://localhost:8081/nexus
當你把Nexus用於生產環境時,你應該將Nexus配置爲一個服務,讓他在後臺運行以及在服務器重啓後恢復服務。方法是 bin/nexus start
三、常用功能
Nexus常用功能就是:指定私服的中央地址、將自己的Maven項目指定到私服地址、從私服下載中央庫的項目索引、從私服倉庫下載依賴組件、將第三方項目jar上傳到私服供其他項目組使用。
開啓Nexus服務後訪問url地址http://localhost:8081/nexus, (推薦使用自己的ip地址),之後登錄系統,用戶名密碼分別是:admin/admin123.
倉庫類別:
開啓Nexus服務後訪問url地址http://localhost:8081/nexus/(推薦使用自己的ip地址),之後登錄系統,用戶名密碼分別是:admin/admin123.
最頻繁的就是點擊左側菜單欄的Repositories按鈕
倉庫類別:
Hosted代表宿主倉庫,用來發布一些第三方不允許的組件,其中自帶倉庫類型中3rd一般用來發布第三方無法在中央倉庫獲取的jar包,比如oracle的jdbc的jar包,Releases一般存放公司內的封版的項目,Snapshots用來存放正在開發的版本。
Proxy代表代理遠程的倉庫,最典型的就是Maven官方中央倉庫、JBoss倉庫等等。如果構建的Maven項目本地倉庫沒有依賴包,那麼就會去這個代理站點去下載,那麼如果代理站點也沒有此依賴包,就回去遠程中央倉庫下載依賴,這些中央倉庫就是proxy。代理站點下載成功後再下載至本機。筆者認爲,其實Maven這個自帶的默認倉庫一般情況下已經夠大多數項目使用了。
group 倉庫是一個“倉庫組”,爲開發人員便於開發設置的倉庫,可以將多個已存在的其他倉庫配置其中提供給大家使用,在nexus中配置的時候注意的是左側是配置倉庫組使用的倉庫。
virtual倉庫是用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫,即在當此M2倉庫中爲M1格式的倉庫構件緩存提供出來的。
maven項目索引
下載Maven項目索引,項目索引是爲了使用者能夠在私服站點查找依賴使用的功能
例如:
就可以檢索出它的相關信息,包括怎麼配置依賴信息。我們要想使用這個私服倉庫,先在項目pom中配置相關私服信息
四、使用配置
以下爲在pom中聲明指定使用私服的方式:
指定倉庫
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.1.103:8081/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.103:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
這樣只有本項目纔在私服下載組件
總:
在pom.xml配置私服下載如下:
在setting.xml配置私服下載如下:
這樣這個Maven項目構建的時候會從私服下載相關依賴,當構建項目的時候,maven會從私服將構件下載到本地倉庫,當然這個配置僅僅是在此項目中生效,對於其他項目還是不起作用。如果相對Maven的其他項目也生效的話。需要修改全局的settings.xml文件。
修改settings.xml爲
<profiles>
……………
<profile>
<id>myprofile</id>
<repositories>
<repository>
<id>central</id>
<url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
……………
<profiles>
追加激活profile
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>
之後所有本機的Maven項目就在私服下載組件。
五、上傳
分別選中填寫信息就最後Upload構件就可以了
deploy命令部署構件到Nexus
- 在POM中配置
<project>
...
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8081/nexus/content/repositories/MyUserReposSnapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<url>http://localhost:8081/nexus/content/repositories/MyUserReposRelease/</url>
</repository>
</distributionManagement>
...
</project>
settings.xml中配置認證信息,Nexus的倉庫對於匿名用戶是隻讀的。
<servers>
<server>
<id>user-snapshots</id>
<username>lb</username>
<password>123456</password>
</server>
<server>
<id>user-releases</id>
<username>lb</username>
<password>123456</password>
</server>
</servers>
注意Respository中的id一定要和server下的id一致,切記!!否則出現權限問題。
然後運行發佈
mvn clean deploy
在控制檯發佈成功
然後進入到私服上的倉庫中,看一下確實存在剛剛發佈的項目