詳解Maven profile配置管理及激活profile的幾種方式
為瞭實現不同環境構建的不同需求,這裡使用到瞭 profile。因為 profile 能夠在構建時修改 pom 的一個子集,或者添加額外的配置元素。接下來介紹 Maven 中對 profile 的配置和激活。
針對不同環境的 profile 的配置
為瞭體現不同環境的不同構建,需要配置好不同環境的 profile,代碼如下:
<profiles> <profile> <id>dev_evn</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3306/test</db.url> <db.username>root</db.username> <db.password>root</db.password> </properties> </profile> <profile> <id>test_evn</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3306/test_db</db.url> <db.username>root</db.username> <db.password>root</db.password> </properties> </profile> </profiles>
在兩個不同的 profile 中,配置瞭同樣的屬性,不一樣的值。按照前面的介紹,在開發時可以用 mvn 命令後面添加“-Pdev_evn”激活“dev_evn profile”。
激活 profile 配置
在 Maven 中,可以選用如下的方式激活 profile。
1. 命令行激活
用戶可以在 mvn 命令行中添加參數“-P”,指定要激活的 profile 的 id。如果一次要激活多個 profile,可以用逗號分開一起激活。例如:
mvn clean install -Pdev_env,test_evn
這個命令就同時激活瞭 id 為“dev_evn”和“test_evn”的兩個 profile。
2. Settings 文件顯示激活
如果希望某個 profile 默認一直處於激活狀態,可以在 settings.xml 中配置 activeProfiles 元素,指定某個 profile 為默認激活狀態,樣例配置代碼如下:
<settings> ... <activeProfiles> <activeProfile>dev_evn</activeProfile> </activeProfiles> ... </settings>
3. 系統屬性激活
可以配置當某個系統屬性存在時激活 profile,代碼如下:
<profiles> <profile> ... <activation> <property> <name>profileProperty</name> </property> </activation> </profile> </profiles>
甚至還可以進一步配置某個屬性的值是什麼時候激活,例如:
<profiles> <profile> ... <activation> <property> <name>profileProperty</name> <value>dev</value> </property> </activation> </profile> </profiles>
這樣就可以在 mvn 中用“-D”參數來指定激活,例如:
Mvn clean install -DprofileProperty=dev
表示激活屬性名稱為 profileProperty,值為 dev 的 profile。
實際上這也是一種命令激活 profile 的方法,隻是用的是“-D”參數指定激活的屬性和值,而前面的是用的“-P”參數指定激活的 profile 的 id 而已。
4. 操作系統環境激活
用戶可以通過配置指定不同操作系統的信息,實現不同操作系統做不同的構建。例如:
<profiles> <profile> <activation> <os> <name>Window XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> </profiles>
family 的值是 Windows、UNIX 或 Mac。name 為操作系統名稱。arch為操作系統的架構。version為操作系統的版本。具體的值可以通過查看環境中的系統屬性“os.name”“os.arch”和“os.version”獲取。
5. 文件存在與否激活
當然,也可以通過配置判斷某個文件存在與否來決定是否激活 profile,樣例配置代碼如下:
<profiles> <profile> <activation> <file> <missing>t1.properties</missing> <exists>t2.properties</exists> </file> </activation> </profile> </profiles>
6. 默認激活
最後,還可以配置一個默認的激活 profile,例如:
<profiles> <profile> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
需要註意的是,如果 pom 中有任何一個 profile 通過其他方式被激活的話,所有配置成默認激活的 profile 都會自動失效。 可以使用如下命令查看當前激活的 profile。
Mvn help:active-profiles
也可以使用如下命令查看所有的 profile。
Mvn help:all-profiles
profile 的種類
前面介紹瞭 profile 的意義和激活方式。那麼在 Maven 中,有哪些 profile?如何配置呢?
根據 profile 配置的位置不同,可以將 profile 分成如下幾種。
1)pom.xml
pom.xml 中聲明的 profile 隻對當前項目有效。
2)用戶 settings.xml
在用戶目錄下的“.m2/settings.xml”中的 profile,對本機上的該用戶的所有 Maven 項目有效。
3)全局 settings.xml
在 Maven 安裝目錄下 conf/settings.xml 中配置的 profile,對本機上所有項目都有效。
為瞭不影響其他用戶且方便升級 Maven,一般配置自己的 settings.xml,不要輕易修改全局的 settings.xml。同樣的道理,一般不需要修改全局 settings.xml 中的 profile。
不同類型的 profile 中可以聲明的 pom 元素是不一樣的,pom.xml 中的 profile 能夠隨同 pom.xml 一起提交到代碼倉庫中,被 Maven 安裝到本地倉庫裡面,並且能被部署到遠程 Maven 倉庫中。也就是說,可以保證 profile 伴隨特定的 pom.xml 一起存在。所以它可以修改或者添加很多 pom 元素,例如:
<project> <repositories></repositories> <pluginRepositories></pluginRepositories> <dependencies></dependencies> <dependencyManagement></dependencyManagement> <modules></modules> <properties></properties> <reporting></reporting> <build> <plugins></plugins> <defaultGoal></defaultGoal> <resources></resources> <testResources></testResources> <finalName></finalName> </build> </project>
如上代碼所示,在 pom 中的 profile 元素比較多,可以添加或修改插件配置、項目資源目錄、測試資源目錄配置和項目構建的默認名稱等。
除瞭 pom 中的 profile 外,其他外部的 profile 可以配置的元素相對就少些,因為那些外部 profile 無法保證同項目中的 pom.xml 一起發佈。
如果在外部 profile 中配置瞭項目依賴,開發用戶可以在本地編譯,但是因為依賴配置沒有隨同 pom.xml 一起發佈部署到倉庫中,別的用戶下載瞭該項目後,就會因為缺少依賴而失敗。
為瞭避免這樣的不一致情況,很多在 pom 的 profile 可以出現的元素不允許在外部 profile 中出現。
在外部 profile 可以聲明的元素如下:
<project> <repositories></repositories> <pluginRepositories></pluginRepositories> <properties></properties> </project>
這些外部 profile 元素不足以影響項目的正常構建,隻會影響項目的倉庫和 Maven 屬性。
到此這篇關於詳解Maven profile配置管理及激活profile的幾種方式的文章就介紹到這瞭,更多相關Maven profile配置及激活profile內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用maven的profile構建不同環境配置的方法
- 關於maven全局配置文件settings.xml解析
- maven私服搭建的實現步驟
- 深入講解Java Maven配置
- Maven提示jdk版本不正確的問題