1. 程式人生 > >maven之Nexus的配置【setting.xml裡配置】(六)

maven之Nexus的配置【setting.xml裡配置】(六)

在上一篇文章中,說到了在專案中通過使用<repositories>標籤來配置一個Nexus的工廠,使得依賴都能夠先從區域網共享倉庫(nexus )裡尋找。但是這種配置還是不太方便,因為我們每建立一個專案,都要在專案的pom.xml檔案裡配置<repositories>。

當然了,如果所有專案都繼承一個根類專案,那麼就只是在根類專案裡配置一次<repositories>就OK,其他專案都繼承這個根類專案,這種方式也可以。

在現實實際中,不可能所有的專案都會用到繼承,而我們又不想老是去配置<repositories>(其實配置一下也OK,看個人喜好啦。),這時可以把<repositories>這部分配置到maven的setting.xml的節點<profiles>裡。<profiles>裡可以配置多個<profile>,<repositories>裡也是可以配置多個<repository>。按照我自己的理解,每個<profile>就相當於<repositories>的<repository>。不同點在於:<repositories>裡配置的多個<repository>都是有效的;而<profiles>裡配置了多個<profile>,需要使用<activeProfiles>來進行啟用,激活了哪個<profile>,哪個<profile>才生效。

<repositories>裡配置<repository>在上文中已經說過,這裡就不再重複記錄了。在這裡主要是記錄如何把pom.xml中的<repositories>配置,轉移到setting.xml裡。

【記一個無語活該的錯誤:因為我是直接在maven/conf/setting.xml進行修改配置,然後在myeclipse裡也指定這個setting.xml,導致配置<profile>的時候不起作用(不知道為什麼會這樣,按照我自己的理解,setting.xml是哪個應該沒關係吧,流程是myeclipse會從配置的setting.xml去解析,然後獲取到本地倉庫地址和是否配置了profile。但是不知道為什麼,使用了maven/conf/setting.xml這個後,激活了profile也不起效。)。百度了半天,發現大家的配置都一樣。後來我把setting.xml拷貝了一份到E盤,myeclipse裡修改setting的路徑為E:/setting.xml。一下子配置都沒問題了,<profile>的配置也都起作用了。在此記錄一下!】

setting.xml中profile的配置如下圖:


配上程式碼:

<profile>
      <id>nexusProfile</id>
      <repositories>
        <repository>
			<id>xx</id>
			<name>111</name>
			<url>http://localhost:8081/nexus/content/groups/public/</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
			<layout>default</layout>
		</repository>
      </repositories>
    </profile>

<activeProfiles>
		<!--激活了才生效-->
		<activeProfile>nexusProfile</activeProfile>
	</activeProfiles>

在setting.xml中配置了profile以後,pom.xml中的<repositories>就可以去掉了。

測試一下配置是否生效:在pom..xml裡新增一個jetty-servlet.jar的依賴,在控制檯可以看到如下列印資訊:


開啟nexus的管理介面,可以在nexus裡找到剛下載的jetty-servlet.jar依賴包:


至此,setting.xml裡配置profile就成功了。

總述:不管是前一篇文章提到的在pom.xml配置<repositories>,還是在該文章中說到的在setting.xml裡配置<profile>,目的都是相同的,都是為了配置一個區域網共享倉庫(nexus),起到的作用是,當在同一區域網(一般都是一個專案組,在同一區域網中的。當然了也可能是外網,如分公司與總公司的開發人員,但是如果是外網,那我覺得就沒必要配置nexus了,直接去maven中央倉庫下載更方便。)的使用者更新maven專案,或者往maven裡新增依賴的時候,此時會先從本地倉庫查詢,如果本地倉庫不存在某些依賴,會去區域網共享倉庫(nexus)裡尋找,如果也沒有,nexus就會和maven中央倉庫打交道,下載對應的依賴包,然後再提交到本地倉庫。

所以按照我個人的看法,pom.xml配置<repositories>也好,setting.xml裡配置<profile>也罷。同一種效果的不同配置。就像數學問題一樣,可以有多種解法。就看個人喜好啦。嘿嘿~~~不過我自己還是偏向於後者,一勞永逸嘛。