讀古今文學網 > Maven實戰 > 14.4.3 profile的種類 >

14.4.3 profile的種類

根據具體的需要,可以在以下位置聲明profile:

·pom.xml:很顯然,pom.xml中聲明的profile只對當前項目有效。

·用戶settings.xml:用戶目錄下.m2/settings.xml中的profile對本機上該用戶所有的Maven項目有效。

·全局settings.xml:Maven安裝目錄下conf/settings.xml中的profile對本機上所有的Maven項目有效。

·profiles.xml(Maven 2):還可以在項目根目錄下使用一個額外的profiles.xml文件來聲明profile,不過該特性已經在Maven 3中被移除。建議用戶將這類profile移到settings.xml中。

2.7.2節已經解釋過,為了不影響其他用戶且方便升級Maven,用戶應該選擇配置用戶範圍的settings.xml,避免修改全局範圍的settings.xml文件。也正是因為這個原因,一般不會在全局的settings.xml文件中添加profile。

像profiles.xml這樣的文件,默認是不會被Maven安裝到本地倉庫,或者部署到遠程倉庫的。因此一般來說應該避免使用,Maven 3也不再支持該特性。但如果在用Maven 2,而且需要為幾十或者上百個客戶執行不同的構建,往POM中放置這麼多的profile可能就不太好。這時可以選擇使用profiles.xml,如代碼清單14-15所示。

代碼清單14-15 使用profiles.xml

如果是Maven 3,則應該把這些內容移動到settings.xml中。

不同類型的profile中可以聲明的POM元素也是不同的,pom.xml中的profile能夠隨著pom.xml一起被提交到代碼倉庫中、被Maven安裝到本地倉庫中、被部署到遠程Maven倉庫中。換言之,可以保證該profile伴隨著某個特定的pom.xml一起存在,因此它可以修改或者增加很多POM元素,見代碼清單14-16。

代碼清單14-16 POM中的profile可使用的元素

從代碼清單14-16中可以看到,可供pom中profile使用的元素非常多,在pom profile中用戶可以修改或添加倉庫、插件倉庫以及部署倉庫地址;可以修改或者添加項目依賴;可以修改聚合項目的聚合配置;可以自由添加或修改Maven屬性;添加或修改項目報告配置;pom profile還可以添加或修改插件配置、項目資源目錄和測試資源目錄配置以及項目構件的默認名稱。

與pom.xml中的profile對應的,是其他三種外部的profile,由於無法保證它們能夠隨著特定的pom.xml一起被分發,因此Maven不允許它們添加或者修改絕大部分的pom元素。舉個簡單的例子。假設用戶Jack在自己的settings.xml文件中配置了一個profile,為了讓項目A構建成功,Jack在這個profile中聲明幾個依賴和幾個插件,然後通過激活該profile將項目構建成功了。但是,當其他人獲得項目A的源碼後,它們並沒有Jack settings.xml中的profile,因此它們無法構建項目,這就導致了構建的移植性問題。為了避免這種問題的出現,Maven不允許用戶在settings.xml的profile中聲明依賴或者插件。事實上,在pom.xml外部的profile只能夠聲明如代碼清單14-17所示幾個元素。

代碼清單14-17 POM外部的profile可使用的元素

現在不用擔心POM外部的profile會對項目產生太大的影響了,事實上這樣的profile僅僅能用來影響到項目的倉庫和Maven屬性。