爲什麼要用遠程倉庫(私服)
如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件,這樣就加大了中央倉庫的負載和浪費了外網的帶寬,如果網速慢的話還會影響項目的進程。爲團隊創建私服,可以讓公司的團隊共享一套構件,加快了項目搭建的進程。所以我們選擇用Nexus創建私服。
Nexus下載
下載地址:http://www.sonatype.org/nexus/go
Nexus安裝
(1)解壓
$ tar zxvf nexus-2.1.2-bundle.tar.gz
(2)移動到其他目錄
$ mv nexus-2.1.2 /home/nexus
(3)進入nexus的bin目錄下
$ cd /home/nexus/bin
(4)執行命令啓動服務
$ ./nexusstart
(5)執行命令停止服務
$ ./nexusstop
Nexus瀏覽
啓動服務之後,瀏覽器中輸入:http://127.0.0.1:8081/nexus/,默認用戶名和密碼是admin和admin123.出現如圖所示運行成功:
Nexus倉庫類型介紹
nexus的倉庫類型分爲以下四種:
group:倉庫組,用了合併多個hosted/proxy倉庫,當你的項目希望多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。
hosted:宿主,本地倉庫,通常我們會部署自己的構建到這一類倉庫。
proxy:代理倉庫,通常被用來代理遠程的公共倉庫,如maven中央倉庫。
virtual:虛擬
主要介紹一下三個本地倉庫:
Releases:用來部署管理內部的發佈版本構件的宿主類型倉庫,這裏存放我們自己項目中發佈的構建,通常是Release版本的, 比如我們自己做了一個FTP Server的項目, 生成的構件爲ftpserver.war,我們就可以把這個構建發佈到Nexus的Releases本地倉庫。
Snapshots:用來部署管理內部的快照版本構件的宿主類型倉庫,它的目的是讓我們可以發佈那些非release版本, 非穩定版本,比如我們在trunk下開發一個項目,在正式release之前你可能需要臨時發佈一個版本給你的同伴使用, 因爲你的同伴正在依賴你的模塊開發,那麼這個時候我們就可以發佈Snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本。
3rd Party:無法從公共倉庫獲得的第三方發佈版本的構件倉庫,比如有些構件在中央倉庫是不存在的.比如你在中央倉庫找不到Oracle 的JDBC驅動, 這個時候我們就需要自己添加到3rdparty倉庫。
下載索引
nexus索引好比目錄,只要我們更新好索引,就可以在nexus系統中去查找,下載我們需要的jar包,並且對應的groupId,artifactId,version都可以方便的查到。如圖:
剛剛搭建的nexus,索引會是空的,所以需要我們去下載索引。
下載索引有兩種方式
第一種:在線下載索引。把Centra倉庫,點擊倉庫下面的configuration下把DownloadRemote Indexes修改爲true。如下圖:
然後在Central倉庫上右擊,選擇Pepari Index,這樣Nexus就會去下載索引文件。
第二種:離線下載索引。
由於索引文件很大,在線下載會很漫長,所以採用離線下載會很快。從網上找到一個nexus索引倉庫包下載下來,如圖:
下載完成以後解壓,把文件夾中的東西拷貝到sonatype-work/nexus/indexer/central-ctx下面:
重新啓動一下nexus。
能夠很快的把索引下載過來。如圖:
如果中間添加了新的jar包想更新索引,點中右擊update index就行了。如圖:
項目中配置Nexus倉庫
maven的setting.xml文件配置
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--存放本地倉庫的地方-->
<localRepository>D:/Java/maven/repository</localRepository>
<!--私服的驗證信息-->
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<!--maven對全部倉庫的訪問全部攔截到私服的public倉庫中去,如果私服關閉,那麼久不能訪問中央工廠了-->
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local Repository</name>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!--配置倉庫的一些信息,其主要作用是用來覆寫central中央倉庫的一些配置信息-->
<profiles>
<profile>
<id>central</id>
<repositories>
<repository>
<id>central</id>
<name>Central</name>
<!-- 該 url 沒有意義,可以隨便寫,但必須有。 -->
<url>http://*</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>local private nexus</name>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--激活上面配置的倉庫信息-->
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>
</settings>
項目中pom.xml配置
<!-- 項目部署到私服配置 -->
<distributionManagement> <!-- 遠程部署管理信息 -->
<repository> <!--部署項目產生的構件到遠程倉庫需要的信息 -->
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository> <!-- 如果沒有配置該元素,默認部署到repository元素配置的倉庫 -->
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
配置好以後,就可以通過maven的deploy命令,將項目的jar包部署到Nexus上,供其他項目組模塊使用。大大加快了項目組的開發效率。