通常,使用maven過程中,想要下載依賴的jar包,團隊中的每一個人都需要從maven提供的中央倉庫中下載,安裝到本地的緩存中(本地磁盤),但是使用了nexus後,那些依賴(以及依賴的依賴)只需要從遠程倉庫中下載一次,這樣節省的時間將會是Maven檢查依賴新版本以及下載依賴的時間。另外,利用nexus私服,通過發佈內部項目構建到私服下,團隊之間可以共享內部項目構建的快照版本和發佈版本的機制。
以下總結團隊開發過程中搭建nexus私服的過程:
1、安裝Nexus。
1.1、訪問http://nexus.sonatype.org/downloads/。點擊下載鏈接,下載適用於你平臺的存檔文件。Nexus目前有ZIP和Gzip歸檔的TAR兩種可用形式。(安裝方式自己網上學習去。。。)
1.2、運行Nexus。
訪問Nexus:啓動nexus後,它的默認地址是localhost:8081。Nexus在一個名爲Jetty的servlet容器中運行,它使用一個名爲Tanuki Java Service wrapper的本地服務包裹器啓動。要使用Nexus,啓動一個web瀏覽器然後輸入URL:http://localhost:8081/nexus。點擊web頁面右上角的“Log In”鏈接,默認的NEXUS用戶名和密碼是"admin" 和 "admin123"。
開啓遠程索引下載:Nexus帶有三個重要的代理倉庫,有中央Maven倉庫,Apache快照倉庫,和Codehaus快照倉庫。它們中的每一個倉庫都包含了數千(或數萬)的構件,下載
每個倉庫的所有內容是不切實際的。處於這個原因,大部分倉庫維護了一個編錄了整個內容的Lucene索引,以提供快速和有效的搜索。Nexus使用這些遠程索引搜索構件,但是默認設置我們關閉了索引下載。要下載遠程索引,
1.2.1. 點擊Administration菜單下面的Repositories,更改三個代理倉庫的Download Remote Indexes爲true。
1.2.2. 在每個代理倉庫上右擊然後選擇Re-index。這會觸發Nexus下載遠程的索引文件
Nexus下載整個索引可能需要好幾分鐘,但是一旦你下載好之後,你就能夠搜索aven倉庫的所有內容了。
2、配置Maven使用Nexus
要使用Nexus,你需要配置Maven去檢查Nexus而非公共的倉庫。爲此,你需要編輯在你的~/.m2/settings.xml文件中的mirror配置。
2.1、使用nexus中央代理倉庫
要配置Maven去查閱Nexus而非中央Maven倉庫,在你的~/.m2/settings.xml文件中添加爲Nexus配置Maven Settings (~/.m2/settings.xml)”的mirror配置。
<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">
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
</settings>
在你將Nexus配置成所有倉庫的鏡像之後,Maven現在會從本地的Nexus安裝查閱,而非去外面查閱中央Maven倉庫。如果對Nexus有一個構件請求,本地的Nexus安裝會提供這個構件。如果Nexus沒有這個構件,Nexus會從遠程倉庫獲取這個構件,然後添加至遠程倉庫的本地鏡像。要測試Nexus如何工作的,從你的本地Maven倉庫中刪除一個目錄,然後運行Maven構建。如果你刪除了~/.m2/repository/org,你會刪除一大堆的依賴(包括Maven 插件)。下次你運行Maven的時候,你應該看到如下的信息:
$ mvn clean install
...
Downloading: http://localhost:8081/nexus/content/groups/public/...
3K downloaded
3、爲缺少的依賴添加倉庫
如果你已經將你的Maven settings.xml配置成使用Nexus作爲所有公共倉庫和所有公共快照倉庫的鏡像,你可能會遇到一些項目不能夠從你的本地Nexus獲取需要的構件。這很常見,因爲你經常會構建一些在pom.xml中自定義一組repositories和snapshotRepositories的項目。如果你正在構建開源項目,或者往你的配置中添加了自定義的第三方Maven倉庫,那麼這種情況就會發生。
對於一些沒有被加入到中央Maven倉庫的組件,我們可以先用SVN簽出網上的組件,假設安裝了Subversion並且你正在命令行運行Subversion,執行下面的命令:
$ svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk shindig
... Subversion will checkout the trunk of Apache Shindig ...
$ cd shindig
$ mvn install
4、部署構建至nexus
不同的組織有不同的理由將構件部署至內部倉庫。在有數百(或數千)開發人員的大型組織內,一個內部Maven倉庫可以是不同部門之間共享發佈版和開發快照版本的有效手
段。大部分使用Maven的組織最終都會開始將發佈版本和構件部署到一個共享的內部倉庫。使用Nexus,可以很容易的部署構件至一個宿主倉庫。要部署構件至Nexus,在distributionManagement中提供倉庫URL,然後運行mvndeploy。Maven會通過一個簡單的HTTP PUT將項目POM和構件推入至你的Nexus安裝。最初版本的Nexus沒有爲宿主倉庫提供任何的安全措施。如果你爲宿主倉庫開啓了部署功能,任何人可以連接並部署構件至這個倉庫。如果你的Nexus安裝能夠從公共Internet訪問,你絕對會想要將這些倉庫的部署功能關閉,或者將你的Nexus安裝放到一個如Apache
HTTPD的web服務器背後。
4.1、部署發佈版
要部署一個發佈版構件至Nexus,你需要配置你項目POM中distributionManagement部分的repository。在pom.xml添加以下配置:
<project>
...
<distributionManagement>
<repository>
<id>releases</id>
<name>Internal Releases</name>
<url>http://192.168.2.161:8081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
....
</project>
通過執行mvn deploy命令部署構件。$ mvn deploy
4.2、部署快照版
類似發佈版,添加配置:
<project>
...
<distributionManagement>
...
<snapshotRepository>
<id>Snapshots</id>
<name>Internal Snapshots</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
...
</distributionManagement>
...
</project>
4.3、部署第三方構件
你的Maven項目可以依賴於一個構件,這個構件不能從中央Maven倉庫或任何其它公開Maven倉庫找到。有很多原因可能導致這種情形發生:這個構件可能是私有數據庫的
JDBC驅動如Oracle,或者你依賴於另一個JAR,它既不開源也無法免費獲得。在這樣的情況下,你就需要手動拿來這些構件然後發佈到你自己的倉庫中。Nexus提供宿主
的"third-party"倉庫,就是爲了這個目的。
mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=C:\Users\Administrator\Desktop\ojdbc14.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty
執行該命令,需要nexus的認證,不然會報異常:Return code is: 401, ReasonPhrase: Unauthorized.
往setting.xml文件中添加nexus的用戶名和密碼:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
。。。。。。。。。待完善。。。。。