1. 程式人生 > >maven私服:用nexus搭建企業級私有倉庫

maven私服:用nexus搭建企業級私有倉庫


2. 將下載檔案拷貝到一個指定的資料夾,如:D:\maven_home\co_repository,然後解壓縮,得到資料夾結構:


說明:nexus-2.11.0-02包含nexus程式,sonatype-work是nexus倉庫儲存jar包的預設路徑。

3.設定環境變數,新增nexus的工作路徑,在系統變數path前新增這段話:D:\maven_home\co_repository\nexus-2.11.0-02\bin;(windows)

注意:nexus oos版本,推薦安裝的作業系統時linux,如果是unix,nexus官方文件說是可以支援。但是我用hp-ux的作業系統時,卻不支援。因為%NEXUS_HOME%/bin/jsw/目錄下,並沒有對應hp-ux的平臺啟動程式。官方的說法也是推薦安裝在linux上,unix下的安裝未經過深度測試。

linux下可以不修改環境變數,直接在%NEXUS_HOME%/bin/目錄下,執行命令:./nexus start 或./nexus stop命令,即可啟動或停止程式。

4. 進入cmd命令,輸入命令:nexus,可以看到如下介面:


5.命令的意思很清楚。現在開始啟動,首次啟動前先要執行:nexus install,將nexus服務新增到本地服務中:


然後再執行:nexusstart



到此,nexus安裝完成。

nexus配置

使用預設倉庫配置

1.登陸。點選右上角的:Log In。輸入使用者名稱密碼:admin/admin123(預設)。登陸後,點選右側的選單欄:views/repository->Repositories,得到介面:

關於上面這個介面,先做點筆記:

上圖紅框中有很多倉庫(repository),倉庫中對應儲存來自不同地方的依賴和外掛。這些倉庫有很多型別(type),大概有四個型別:

1)proxy,來自開源網站的一些依賴,如apache、中央倉庫(central)、codehaus;

2)virtual,主要用於maven1,很少用到;

3)hosted,顧名思義,這是針對我們開發者的,我們的可以上傳自己的第三方包到3rd party,上傳開發或釋出的包到snapshots或releases;

4)group,可配置以上三種類型的repository到一個組,配置此組就可以有組中倉庫的訪問許可權。

2.  讓本地專案到nexus倉庫下載jar依賴,配置專案中的pom.xml檔案。比如我這裡有一個maven專案maven_part4,配置pom.xml新增以下一段程式碼:

<repositories>
  	<repository>
  		<id>nexus</id>
  		<name>Nexus Repositories</name>
  		<url>http://localhost:8081/nexus/content/groups/public/</url>
  	</repository>
</repositories>

注意:配置中的ID,name無限制,可以自定義。但url標籤需要指定倉庫的訪問url。


說明:group型別的Repository是可配置的,在紅框三中配置。將右側的選項,新增到左側,儲存。所新增的倉庫,在此組中就可以被訪問。

3.上面步驟中,為了將遠端倉庫路徑指向nexus的倉庫路徑,修改的是maven專案的pom.xml。那麼,如果我們在新增專案,還是需要修改每個專案的pom.xml。為排除上面的不便,我們可以修改本地maven的配置:${user_home}/.m2/settings.xml,新增下面兩段話:

3.1)在<profiles>標籤中增加一個profile配置,如下:
<profile>
      <id>nexusProfile</id>
	  <repositories>
		<repository>
			<id>public</id>
			<name>Public Repositories</name>
			<url>http://localhost:8081/nexus/content/groups/public/</url>
		</repository>
		<!-- open this,can download releases version dependency-->
		<releases>
			<enabled>true</enabled>
		</releases>
		<!-- open this,can download snapshot version dependency,default is false. -->
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	  </repositories>
</profile>
3.2)在<activeProfiles>標籤中,啟用上面的profile配置,如下:
<activeProfiles>
    <activeProfile>nexusProfile</activeProfile>
</activeProfiles>

這樣,所有本地使用此maven的專案都會指向nexus倉庫了。

問題:

我配置完此項後,settings.xml並未生效。

後來是因為myeclipse中的配置未更新。Myeclipse中有兩處settings.xml需要修改:一、maven路徑下的setting.xml,本地所有maven都會採用此配置;二、使用者路徑下的settings.xml,路徑${user_home}/.m2/settings.xml,修改過此配置檔案,如果配置未生效,最好在myeclipse中找到此項,確認路徑正確,並點選update settings,重新整理配置。(就是因為這個原因,我修改過的settings遲遲不生效)

Maven繼承理解:maven專案都有一個super POM,這是所有POM的父類,包含很多預設配置;然後是%M2_HOME%/conf/settings.xml,此配置的之也會融入POM,此配置針對maven程式;其次是${user_home}/.m2/settings.xml,此配置針對使用者,其配置項會覆蓋maven級的settings.xml,再融入POM;最後是專案的POM,針對專案的特殊性做配置。上面的四個檔案共同對一個專案生效。

Profile配置理解:在一個maven專案中,可能在不同的情況下需要的執行環境有所不同。如,在開發時下我們用一套環境,在釋出時我們用另一套環境;或者系統為了相容多版本的jdk,需要做一些調整,也就需要對不同的jdk做不同的配置等。

一個profile配置,就是一個環境的特定設定,可以對同一個環境配置多個profile。

配置了profile不代表此配置就生效,profile生效有兩種方式:一、用特定環境的資訊觸發此配置生效,用<activation>標籤;二、profile可以不包含<activation> 標籤,但是需要在<activeProfiles>標籤中,引用profile的id,來定義指明你需要讓哪些profile生效。

4.mirror的使用。

如果我們需要一個公司只管理一個自己的私有倉庫,不能讓開發者直接從中央倉庫下載依賴,那我們需要為中央倉庫設定一個映象,將中央倉庫的連結指向nexus的倉庫連結。映象配置在${user_home}/.m2/settings.xml中。在<mirrors>標籤中增加如下配置:

<mirror>
      <id>nexusMirror</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>

注意:這裡的mirrorOf配置的是repository的ID,代表匹配ID的工廠都訪問此映象;若配置多個repositoryID,可用英文逗號分隔;若配置*號,代表maven使用者中所有工廠都訪問此映象。

其次,mirror只是對映符合條件(mirrorOf指定)的倉庫的URL,而與匹配倉庫的其他引數無關,若要修改,需要在對應的倉庫位置修改。

中央工廠配置在super POM中,工廠id為central,若只是想明確的設定某幾個工廠的映象,可以這樣寫,如:<mirrorOf>nexus,central</mirrorOf>

 設定管理自己倉庫組

5.在nexus中,有現成的Releases和Snapshots倉庫。但是一個公司中,可能有幾個不同的研發部門或不同的研發組,他們需要管理自己各自的開發和釋出版本。Nexus為我們提供了建立自己的倉庫和訪問許可權的功能。

首先,點選Add,選Hosted Repository項:


彈出倉庫配置介面,填寫對應值,如下:


如圖上,填寫倉庫ID、名稱、Provider。Repository Policy選擇是開發還是釋出倉庫,但我們提交本地maven專案到nexus時,我們的專案的版本會自動識別放入對應的倉庫中;四是設定上傳依賴的倉庫路徑,可以預設自動生成。

一般建立兩個倉庫,一個用於釋出,一個用於開發。如下:


然後需要為這兩個新建倉庫建一個組,將對應的倉庫訪問許可權包含在其中。建立組方式類似:點選Add,選Repository Group。填寫組倉庫資訊,配置組包含的倉庫。如下:


現在一個屬於某個部門的組就定義好了。在本地開發需要做的是,將settings.xml中的nexus倉庫的訪問地址改成我們的MyRepositoryGroupId的釋出地址。


nexus部署配置

6.在nexus中,我們可以做的工作大致有兩個:一個是獲取依賴,而是上傳打包專案。上面已經完成了獲取依賴的配置,現在是nexus的部署管理。Nexus部署涉及到許可權管理,我們每次往nexus中上傳專案時,需要有對應的使用者名稱和密碼。此配置在如下位置:


對於許可權管理需要配置三個地方,如上圖紅框所示:Privileges、Roles、Users。

6.1)首先配置privileges,將我們新建的倉庫許可權管理起來:

新增兩個許可權,一個是未開發版本庫(snapshots),一個為釋出版本庫(releases)。如下圖:


兩個都新增後,如圖:


6.2)建立可以訪問club倉庫的角色。點選Roles,進入新增角色:


點選ADD。(問題,第一次添加了privileges後,在Roles中新增許可權,居然沒有新增項,重啟了nexus,新增資料才展示出來)。


6.3)新增使用者club-user,為此使用者新增club-Role角色許可權。


新建使用者,如下圖。此使用者的許可權即可擁有管理專案的部署許可權。


7.  完成了nexus的倉庫、使用者許可權的配置後,需要將使用者資訊配置在檔案中。需要配置的檔案有兩個。

7.1)需要配置的第一個檔案:project.pom.xml。新增下面的配置,指明專案釋出需要放置的倉庫url:

 <distributionManagement>
  	<repository>
  		<id>club-module1-release</id>
  		<name>Club Module Release</name>
  		<url>http://10.25.119.18:8081/nexus/content/repositories/club-releases/</url>
  	</repository>
  	<snapshotRepository>
  		<id>club-module1-snapshot</id>
  		<name>Club Module1 Snapshot</name>
  		<url>http://10.25.119.18:8081/nexus/content/repositories/club-snapshots/</url>
  	</snapshotRepository>
  </distributionManagement>
7.2)配置第二個檔案:${user_home}/.m/settings.xml,新增<servers>標籤中新增如下配置,指明發布專案時需要的使用者名稱密碼:
<server>
      <id>club-module1-release</id>
      <username>club</username>
      <password>club123</password>
    </server>
	<server>
      <id>club-module1-snapshot</id>
      <username>club</username>
      <password>club123</password>
</server>

這樣就算配完了。