詳解pom.xml中maven profile的激活方式
maven profiles簡(jiǎn)單介紹:
maven profiles是maven從POM4.0開始給我們提供的一種新的特性。它允許maven根據(jù)不同的環(huán)境采用不同的maven配置。一個(gè)profiles標(biāo)簽中可以有很多個(gè)profile,只需要根據(jù)不同的項(xiàng)目環(huán)境,激活不同的profile即可。
提示:也可以同時(shí)激活多個(gè)profile。
profiles的組成(示例):
注:使用maven的profile功能,我們可以實(shí)現(xiàn)多環(huán)境配置文件的動(dòng)態(tài)切換。
maven profile的激活方式:
方式一:使用mvn ... -P xxx指令,指定激活id為xxx的profile。
第一步:在pom.xml中編寫profiles。
<!-- 使用mvn ... -P xxx指令,指定激活id為xxx的profile --> <profiles> <!-- 測(cè)試環(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>
第二步:打包時(shí)通過maven指令,指定激活哪一個(gè)profile。
如果需要激活多個(gè)profile的話,使用逗號(hào)隔開多個(gè)profile的id即可:
方式二:在profile里面使用activation標(biāo)簽,當(dāng)滿足條件時(shí)激活該profile。
提示:activation標(biāo)簽,允許我們定義默認(rèn)激活配置、定義條件激活(滿足什么條件就進(jìn)行激活)配置,下面一一介紹。
activeByDefault默認(rèn)激活:
<!-- ************** 設(shè)置默認(rèn)激活 ************** --> <profiles> <!-- 測(cè)試環(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)激活級(jí)別最低!一旦其它某個(gè)激活指令(mvn指令激活或activation的其他條件激活)生效時(shí),那么默認(rèn)激活指令就不會(huì)生效。
根據(jù)jdk激活:
<!-- ************** 根據(jù)jdk激活 ************** --> <profiles> <!-- 測(cè)試環(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的版本號(hào)是以下面的值開頭時(shí), 激活此profile 即:當(dāng)jdk的版本號(hào)是startWith下面的值時(shí),激活此profile --> <jdk>1.8.0_</jdk> <!-- 還可以取反,當(dāng)jdk的版本號(hào) 不是 startWith下面的值時(shí),激活此配置 --> <!-- <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> <!-- 測(cè)試環(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)滿足下述所有條件時(shí),激活 注: 如果有多個(gè)條件,那么必須所有條件都滿足時(shí),才會(huì)激活對(duì)應(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)版本號(hào),如【10.0】 --> <version>10.0</version> </os> </activation> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </profile> </profiles>
注:對(duì)于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)版本號(hào),如【10.0】 System.out.println(osProperties.get("os.version")); }
根據(jù)file存在與否激活:
<!-- ************** 根據(jù)file存在與否激活 ************** --> <profiles> <!-- 測(cè)試環(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 注:文件路徑可以是絕對(duì)路徑,也可以是相對(duì)路徑(相對(duì)pom.xml的路徑)。 注:在exists標(biāo)簽里,如果寫絕對(duì)路徑,不要使用${project.basedir}或 ${pom.basedir};經(jīng)本人測(cè)試,在exists標(biāo)簽里使用${}取不到值。 注:missing與exists最好不要同時(shí)使用。 如果同時(shí)使用的話,missing就 會(huì)形同虛設(shè),是否激活此profile完全由exists決定,。 --> <activation> <file> <!-- 相對(duì)路徑示例 --> <exists>src/main/resources/xyza.yml</exists> <!-- <missing>src/main/resources/abcd.yml</missing> --> <!-- 絕對(duì)路徑示例 --> <!-- <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> <!-- 測(cè)試環(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>
打包時(shí)通過maven指令-D,指定激活哪一個(gè)profile:
如果想激活多個(gè)profile,可以這樣:
提示:除了在項(xiàng)目的pom.xml中可以對(duì)profile進(jìn)行配置激活外,還可以在當(dāng)前用戶下的.m2/settings.xml文件里,對(duì)profile進(jìn)行配置激活;還可以在maven安裝目錄下的conf/settings.xml文件里,對(duì)profile進(jìn)行配置激活。上述三者的區(qū)別是:在項(xiàng)目的pom.xml中配置profile,那么配置的profile只對(duì)該項(xiàng)目有效;在用戶下的.m2/settings.xml文件里配置profile,那么配置的profile只對(duì)該用戶下的(所有)項(xiàng)目有效;在maven安裝目錄下的conf/settings.xml文件里配置profile,那么配置的profile對(duì)使用該maven程序的(所有)項(xiàng)目有效。
到此這篇關(guān)于詳解pom.xml中maven profile的激活方式的文章就介紹到這了,更多相關(guān)Maven profile激活方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中break、continue、return在for循環(huán)中的使用
這篇文章主要介紹了break、continue、return在for循環(huán)中的使用,本文是小編收藏整理的,非常具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓的方法
這篇文章主要介紹了Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考需要的朋友可以參考下2020-08-08java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行
這篇文章主要介紹了java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下2017-02-02Java java.lang.InstantiationException異常案例詳解
這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08java實(shí)現(xiàn)對(duì)服務(wù)器的自動(dòng)巡檢郵件通知
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)對(duì)服務(wù)器的自動(dòng)巡檢郵件通知,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體
這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot全局異常處理之解決404/500錯(cuò)誤
在搭建項(xiàng)目框架的時(shí)候用的是springboot,想統(tǒng)一處理異常,但是發(fā)現(xiàn)404的錯(cuò)誤總是捕捉不到,總是返回的是springBoot自帶的錯(cuò)誤結(jié)果信息,這篇文章主要給大家介紹了關(guān)于SpringBoot全局異常處理之解決404/500錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2023-11-11Java調(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模式)介紹,本文講解了何時(shí)使用狀態(tài)模式、如何使用狀態(tài)模式等內(nèi)容,需要的朋友可以參考下2015-03-03