maven(平臺組內部分享五)

3.構建Profile

1)profile作用

Profile能讓你為一個特殊的環境自定義一個特殊的構建;profile使得不同環境間構建的可移植性成為可能。區分環境,當系統有開發環境,測試環境,線上環境等不同環境時,每個環境的配置信息可能有差異,此時使用profile解決此種差異導致的配置信息差異問題。

2)profile語法

profile

? pom.xml中的profiles元素,它包含了一個或者多個profile元素。由于profile覆蓋了pom.xml中的默認設置,profiles通常是pom.xml中的最后一個元素。構建Profile207

? 每個profile必須要有一個id元素。這個id元素包含的名字將在命令行調用profile時被用到。我們可以通過傳給Maven一個-P參數來調用profile。

? 一個profile元素可以包含很多其它元素,只要這些元素可以出現在POM XML文檔的project元素下面。本例中,我們覆蓋了Compiler插件的行為,因此必須覆蓋插件配置,該配置通常位于一個build和一個plugins元素下面。

? 我們覆蓋了Maven Compiler插件的配置。確保通過production profile產生的字節碼不會包含調試信息,并且字節碼會被編譯器優化。

要使用profile來運行mvn install,需要 mvn install -P dev -X(開啟debug日志)

Profile中允許出現的元素如下:

profileu覆蓋元素

3)profile激活用法

通過activation控制,當環境以及所有配置信息滿足條件時,profile才會被激活,從而生效覆蓋原有pom配置,不滿足時profile控制不生效

activation控制profile生效

上例定義了一組狹小的激活參數集合。讓我們仔細看一下每個激活配置:

? activeByDefault元素控制一個profile是否默認被激活。

? 該profile只有當JDK版本以“1.5”開頭的時候才被激活。這包含“1.5.0_01”,“1.5.1”等。

? 該profile針對于一個特定的Windowx XP版本,32位平臺上的5.1.2600版本。如果你的項目使用本地插件來構建一個C程序,你可能會發現自己正為特定的平臺編寫項目。

? property元素告訴Maven,當mavenVersion屬性的值被設置成2.0.5的時候才激活profile。mavenVersion是一個在所有Maven構建中可用的隱式屬性。

? file元素告訴我們只有當某些文件存在(或者不存在)的時候才激活profile。該例中的devprofile只有在項目基礎目錄中存在file2.properties文件,并且不存在file1.properties文件的時候才被激活。

通過屬性缺失激活,基于一個屬性如environment.type的值來激活一個profile。注意屬性名稱前面的驚嘆號。驚嘆號通常表示“否定”的意思。當沒有設置${environment.type}屬性的時候,這個profile被激活。

屬性控制激活

外部profile,相當于將profile文件整個抽離出來,放入一個profiles.xml文件中。

profiles.xml

你可以發現一旦你的Profile變得很大,再讓你管理pom.xml會變得很困難,或者說只是因為你覺得將profiles.xml文件從中pom.xml分離出來是一種更干凈的方式。不管怎樣,調用定義在pom.xml中的profile和調用定義在profiles.xml中profile的方式是一樣的。

4)Settings的profile

項目profile關心于覆蓋某個項目的配置,而settings profile可以應用到所有你使用Maven構建的項目

settings-profile

激活設置,也可以使用activeProfiles,但是此部分只會控制settings中的設置是否啟用,而不會影響到pom中的設置。

列出所有激活的profiles:mvn help:active-profiles

Active Profiles for Project 'My Project':

The following profiles are active:

- my-settings-profile (source: settings.xml)

- my-external-profile (source: profiles.xml)

- my-internal-profile (source: pom.xml)

如果正確的使用profile,它可以為不同的平臺很容易的自定義構建。如果你構建中的一些東西需要定義一個平臺特定的路徑,如應用程序服務器,你可以將這些配置點放到profile中,然后由操作系統參數激活。如果你有一個項目需要為不同的環境生成不同的構件,你可以為不同的環境和平臺自定義profile特定的插件行為,從而自定義構建行為。使用profile,構建可以變得容易移植,沒有必要為一個新的環境重寫你的構建邏輯,只需要重寫那些需要變化的配置,共享那些可以被共享的配置。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容