詳解pom.xml中maven profile的激活方式
maven profiles簡單介紹:
maven profiles是maven從POM4.0開始給我們提供的一種新的特性。它允許maven根據(jù)不同的環(huán)境采用不同的maven配置。一個profiles標(biāo)簽中可以有很多個profile,只需要根據(jù)不同的項(xiàng)目環(huán)境,激活不同的profile即可。
提示:也可以同時激活多個profile。
profiles的組成(示例):
注:使用maven的profile功能,我們可以實(shí)現(xiàn)多環(huán)境配置文件的動態(tài)切換。
maven profile的激活方式:
方式一:使用mvn ... -P xxx指令,指定激活id為xxx的profile。
第一步:在pom.xml中編寫profiles。
<!-- 使用mvn ... -P xxx指令,指定激活id為xxx的profile --> <profiles> <!-- 測試環(huán)境 --> <profile> <!-- profile唯一id --> <id>test-id</id> <!-- 引入fastjson依賴 --> <dependencies> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <!-- profile唯一id --> <id>prod-id</id> <!-- 引入lombok依賴 --> <dependencies> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
第二步:打包時通過maven指令,指定激活哪一個profile。
如果需要激活多個profile的話,使用逗號隔開多個profile的id即可:
方式二:在profile里面使用activation標(biāo)簽,當(dāng)滿足條件時激活該profile。
提示:activation標(biāo)簽,允許我們定義默認(rèn)激活配置、定義條件激活(滿足什么條件就進(jìn)行激活)配置,下面一一介紹。
activeByDefault默認(rèn)激活:
<!-- ************** 設(shè)置默認(rèn)激活 ************** --> <profiles> <!-- 測試環(huán)境 --> <profile> <id>test-id</id> <activation> <!-- 設(shè)置默認(rèn)激活 --> <activeByDefault>true</activeByDefault> </activation> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <id>prod-id</id> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
注:默認(rèn)激活級別最低!一旦其它某個激活指令(mvn指令激活或activation的其他條件激活)生效時,那么默認(rèn)激活指令就不會生效。
根據(jù)jdk激活:
<!-- ************** 根據(jù)jdk激活 ************** --> <profiles> <!-- 測試環(huán)境 --> <profile> <id>test-id</id> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <id>prod-id</id> <activation> <!-- 當(dāng)jdk的版本號是以下面的值開頭時, 激活此profile 即:當(dāng)jdk的版本號是startWith下面的值時,激活此profile --> <jdk>1.8.0_</jdk> <!-- 還可以取反,當(dāng)jdk的版本號 不是 startWith下面的值時,激活此配置 --> <!-- <jdk>!1.8</jdk> --> </activation> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
根據(jù)os激活:
<!-- ************** 根據(jù)os激活 ************** --> <profiles> <!-- 測試環(huán)境 --> <profile> <id>test-id</id> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <id>prod-id</id> <activation> <!-- 當(dāng)操作系統(tǒng)滿足下述所有條件時,激活 注: 如果有多個條件,那么必須所有條件都滿足時,才會激活對應(yīng)的profile --> <os> <!-- 操作系統(tǒng)名,如【W(wǎng)indows 10】 --> <name>Windows 10</name> <!-- 操作系統(tǒng)隸屬, 如【windows】、【unix】 --> <family>windows</family> <!-- 操作系統(tǒng)的體系結(jié)構(gòu),如【amd64】 --> <arch>amd64</arch> <!-- 操作系統(tǒng)版本號,如【10.0】 --> <version>10.0</version> </os> </activation> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
注:對于os的基本信息,我們可以這樣獲?。?/p>
/** * 獲取操作系統(tǒng)信息 * * @date 2019/9/4 11:21 */ private static void osInfo() { Properties osProperties = System.getProperties(); // name-操作系統(tǒng)名,如【W(wǎng)indows 10】 System.out.println(osProperties.get("os.name")); // family-操作系統(tǒng)隸屬, 如【windows】、【unix】, 可根據(jù)name來獲取 System.out.println( osProperties.get("os.name").toString().startsWith("Window") ? "windows" : "unix" ); // arch-操作系統(tǒng)的體系結(jié)構(gòu),如【amd64】 System.out.println(osProperties.get("os.arch")); // version-操作系統(tǒng)版本號,如【10.0】 System.out.println(osProperties.get("os.version")); }
根據(jù)file存在與否激活:
<!-- ************** 根據(jù)file存在與否激活 ************** --> <profiles> <!-- 測試環(huán)境 --> <profile> <id>test-id</id> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <id>prod-id</id> <!-- 根據(jù)文件存在與否, 來激活profile 注:文件路徑可以是絕對路徑,也可以是相對路徑(相對pom.xml的路徑)。 注:在exists標(biāo)簽里,如果寫絕對路徑,不要使用${project.basedir}或 ${pom.basedir};經(jīng)本人測試,在exists標(biāo)簽里使用${}取不到值。 注:missing與exists最好不要同時使用。 如果同時使用的話,missing就 會形同虛設(shè),是否激活此profile完全由exists決定,。 --> <activation> <file> <!-- 相對路徑示例 --> <exists>src/main/resources/xyza.yml</exists> <!-- <missing>src/main/resources/abcd.yml</missing> --> <!-- 絕對路徑示例 --> <!-- <exists>C:/Users/JustryDeng/Desktop/zx-lw.log</exists> --> <!-- <missing>/usr/apps/file/info.properties</missing> --> </file> </activation> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
根據(jù)maven指令-D參數(shù)激活:
<!-- ************** 根據(jù) maven指令參數(shù)-D 激活 ************** --> <profiles> <!-- 測試環(huán)境 --> <profile> <id>test-id</id> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> </dependencies> </profile> <!-- 生產(chǎn)環(huán)境 --> <profile> <id>prod-id</id> <activation> <!-- maven指令參數(shù)-D激活 注:與根據(jù)maven指令參數(shù)-P 指定profile的id進(jìn)行激活類似 --> <property> <name>pk</name> <value>pv</value> </property> </activation> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
打包時通過maven指令-D,指定激活哪一個profile:
如果想激活多個profile,可以這樣:
提示:除了在項(xiàng)目的pom.xml中可以對profile進(jìn)行配置激活外,還可以在當(dāng)前用戶下的.m2/settings.xml文件里,對profile進(jìn)行配置激活;還可以在maven安裝目錄下的conf/settings.xml文件里,對profile進(jìn)行配置激活。上述三者的區(qū)別是:在項(xiàng)目的pom.xml中配置profile,那么配置的profile只對該項(xiàng)目有效;在用戶下的.m2/settings.xml文件里配置profile,那么配置的profile只對該用戶下的(所有)項(xiàng)目有效;在maven安裝目錄下的conf/settings.xml文件里配置profile,那么配置的profile對使用該maven程序的(所有)項(xiàng)目有效。
到此這篇關(guān)于詳解pom.xml中maven profile的激活方式的文章就介紹到這了,更多相關(guān)Maven profile激活方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中break、continue、return在for循環(huán)中的使用
這篇文章主要介紹了break、continue、return在for循環(huán)中的使用,本文是小編收藏整理的,非常具有參考借鑒價值,需要的朋友可以參考下2017-11-11Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓的方法
這篇文章主要介紹了Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考需要的朋友可以參考下2020-08-08java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行
這篇文章主要介紹了java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下2017-02-02Java java.lang.InstantiationException異常案例詳解
這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08java實(shí)現(xiàn)對服務(wù)器的自動巡檢郵件通知
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)對服務(wù)器的自動巡檢郵件通知,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體
這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java調(diào)用瀏覽器打開網(wǎng)頁完整實(shí)例
這篇文章主要介紹了Java調(diào)用瀏覽器打開網(wǎng)頁的方法,以完整實(shí)例形式分析了java打開網(wǎng)頁的相關(guān)技巧,需要的朋友可以參考下2015-05-05Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹,本文講解了何時使用狀態(tài)模式、如何使用狀態(tài)模式等內(nèi)容,需要的朋友可以參考下2015-03-03