一、概述
1、概要
現在的項目基本都是用Maven來管理工程,這樣一來在公司內容搭建一個私服就非常有必要了,這樣一來可以管理公司內部用的JAR包,也可以管理第三方的各種JAR來,以免每次都要從外網的倉庫中下載。私服有兩種軟件搭建Nexus和artifactory,這兩個各有優點。artifactory 三年前已配置過了,本文配置一下Nexus。Nexus還是一個比較流行的私服。
2、Nexus介紹
Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只在一個地方就能夠完全控制訪問 和部署在你所維護倉庫中的每個Artifact。Nexus是一套“開箱即用”的系統不需要數據庫,它使用文件系統加Lucene來組織數據。Nexus 使用ExtJS來開發界面,利用Restlet來提供完整的REST APIs,通過m2eclipse與Eclipse集成使用。Nexus支持WebDAV與LDAP安全身份認證。
Nexus的下載地址是:http://www.sonatype.org/nexus/go/到官網上將ZIP的壓縮包下載下來即可,解壓之后發現有兩個文件夾,一個是nexus-2.11.0-02,另一個是sonatype-work;第一個文件夾包含了Nexus運行所需要的文件,是運行Nexus必須的;第二個文件夾目錄包含Nexus生成的配置文件、日志文件、倉庫文件等,當需要備份Nexus的時候,默認備份的是此目錄文件。
二、環境准備
1、maven 3.3.3 下載最新的版本3\
2、Nexus 2.11.1-01-bundle下載當前最新的版本
三、Nexus的安裝配置
1、Nexus安裝
下載完nexus之后,只需要將壓縮包解壓,將解壓后的文件夾放到你想要安裝的目錄即可——我的為D盤。
2、配置Nexus環境變量
將nexus的bin目錄設置到path的環境變量中(比較簡單不詳細講解了)
3、配置Nexus
在 nexus的根目錄bin\jsw\conf\wrapper.conf的文件在找到
# Set the JVM executable應該在15行左右,配置JAVA的路徑
wrapper.java.command=D:\Program Files\Java\jdk1.7.0_71\bin\java
將java目錄下的java.exe的路徑配置到里面即可(根據你電腦java的配置)
4、Nexus的測試
用管理員權限打開命令行(如果你的用戶不是Administrator則會提醒:出現 OpenSCManager failed 拒絕訪問的錯誤)
在命令行中輸入nexus如果出現下面提示這證明配置成功——nexus的環境變量配置成功
5、Nexus安裝並啟動
輸入nexus start出現如下信息:說明nexus配置好了,但是還沒有安裝
輸入nexus install即可安裝——如下信息即安裝成功
啟動nexus:輸入nexus start即可
6、啟動失敗
如果啟動失敗提示:
wrapper | The nexus service was launched, but failed to start
可能有兩種原因:
1、Nexus安裝目錄 bin\jsw\conf\wrapper.conf中的java配置錯誤導致啟動失敗(錯誤可能性1:版本錯誤;錯誤可能性2:寫錯路徑了).
2、8081端口被占用導致啟動失敗(如果是非系統進程占用,結束該進程即可),或修改Jetty的端口,在Nexus的安裝目前/conf/nexus.properties文件中找到 application-port=8081 改為8181就行了。
7、成功
默認地址:http://127.0.0.1:8081/nexus
點擊右上角Log In進行登錄,默認帳號:admin、密碼:admin123
四、Nexus初始化配置
1、Nexus整體介紹
我們可以從上圖中看到四種倉庫類型:group(倉庫組)、hosted(宿主)、proxy(代理)和virtual(虛擬)。其中每種類型的Format有Maven1或者Maven2,這里我們不看Maven1的。倉庫的Policy(策略)表示該倉庫為發布(Release)版本還是快照(Snapshot)版本倉庫。
在圖中,Nexus列出了默認的幾個倉庫:
Public Repositories:倉庫組,將所有策略為Release的倉庫聚合並通過一致的地址提供服務。
3rd party:一個策略為Release的宿主類型倉庫,用來部署無法從公共倉庫獲得的第三方發布版本構件。
Apache Snapshots:策略為Snapshots的代理倉庫,用來代理Apache Maven倉庫的快照版本構件。
Central:該倉庫代理Maven的中央倉庫,策略為Release,只會下載和緩存中央倉庫中的發布版本構件。
Central M1 shadow:maven1格式的虛擬類型倉庫。
Codehaus Snapshots:代理Codehaus Maven倉庫快照版本的代理倉庫。
Release:策略為Release的宿主類型倉庫,用來部署組織內部的發布版本構件。
Snapshots:策略為Snapshots的宿主類型倉庫,用來部署組織內部的快照版本構件。
2、點擊左側Repositories項 -> central倉庫 -> Configuration -> Download Remote Indexes=True -> Save,表示下載遠程倉庫的索引。
同時override local storage location 也是可以改一下。
點擊“save”。
點擊左邊的“Administration”->"Scheduled Tasks"鏈接,如果沒有出現“Update Repositories Index”處於Running狀態,那么需要在Public Repositories行右擊,點擊"Update Index"。
然后再點擊Schedule Tasks就可以看到有任務處於Running狀態了。
等到索引下載完成之后,就可以在"Repositories"界面中,選擇Browser Index選項卡,可以看到Maven中央倉庫內容的樹形結構.
3、手動上傳JAR包
GAV Definition:選擇GAV Parameters
輸入JAR包對應的:Group\Artifact\verison\
選擇JAR
第三步上傳包,第四步add artifact 最后update artifact.
這樣包上傳成功。POM可以用了。
4、Maven的配置
在Maven安裝目錄conf/setting.xml 在<mirrors>內配置如下內容
<mirror> <id>nexus</id> <name>internal nexus repository</name> <url>http://127.0.0.1:8081/nexus/content/groups/public/</url> <mirrorOf>*</mirrorOf> </mirror>
在執行
mvn clean eclipse:eclipse -Ddowloadsources=true
下自動從Nexus私服中下載JAR包。
5、部署構件到私服
我們在實際開發過程是多個人的,那么總有一些公共模塊或者說第三方構件是無法從Maven中央庫下載的。我們需要將這些構件部署到私服上,供其他開發人員下載。用戶除了通過界面手動上傳構件,也可以配置Maven自動部署構件至Nexus的宿主倉庫。
使用Maven部署構件到Nexus私服上日常開發的快照版本部署到Nexus中策略為Snapshot的宿主倉庫中,正式項目部署到策略為Release的宿主倉庫中,POM的配置方式如下:
<!-- 配置遠程發布到私服,mvn deploy --> <distributionManagement> <repository> <id>releases</id> <name> Nexus Release Repository </name> <url> http://127.0.0.1:8081/nexus/content/repositories/releases/ </url> </repository> <snapshotRepository> <id>snapshots</id> <name> Nexus Snapshot Repository </name> <url> http://127.0.0.1:8081/nexus/content/repositories/snapshots/ </url> </snapshotRepository > </distributionManagement >
Nexus的倉庫對於匿名用戶只是只讀的。為了能夠部署構件,我們還需要再settings.xml中配置驗證信息:
server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server>
其中,驗證信息中service的id應該與POM中repository的id一致。
這樣通過 maven 可以自動布置到Nexus私服中了。命令如下:
mvn clean deploy -Dmaven.test.skip=true
這樣就可以把把自動的發布到nexus中去了。
6、完工