maven的pom.xml中profiles的作用詳解
1、profiles是什么?有什么作用
在maven構(gòu)建的項(xiàng)目都存在一個(gè)pom.xml的項(xiàng)目對(duì)象模型配置文件,用于約束項(xiàng)目(如:jar包管理、構(gòu)建管理等)。profiles是pom.xml中的一個(gè)配置項(xiàng)。
我們?cè)陂_(kāi)發(fā)項(xiàng)目時(shí)一般都會(huì)區(qū)分線上環(huán)境和測(cè)試環(huán)境,這兩個(gè)環(huán)境需要切換以適應(yīng)不同的環(huán)境需求
正式環(huán)境的配置,一般放置于src/main/resources下,而測(cè)試環(huán)境放置于/src/test/resources下面。
profile的主要作用就是區(qū)分正式環(huán)境和測(cè)試環(huán)境的配置
2、如何配置
<profiles> <profile> <id>release</id> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> </resources> </build> </profile> <profile> <id>test</id> <build> <resources> <resource> <directory>src/test/resources</directory> <includes> <include>config/*.properties</include> <include>log4j.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> <excludes> <exclude>log4j.xml</exclude> </excludes> </resource> </resources> </build> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
如上, 我配置了兩個(gè)profile一個(gè)release用于正式環(huán)境發(fā)布,test用于測(cè)試環(huán)境使用;默認(rèn)開(kāi)啟測(cè)試環(huán)境,activation->true
測(cè)試環(huán)境與正式環(huán)境只是部分的配置不同,我們需要公用這部分配置。這就使用到了includes and excludes,用引入和排除配置文件
3、區(qū)別構(gòu)建發(fā)布包
構(gòu)建測(cè)試包:
maven package -P test -Dmaven.test.skip=true
構(gòu)建正式包:
maven package -P release -Dmaven.test.skip=true
maven多環(huán)境profiles參數(shù)切換
在實(shí)際開(kāi)發(fā)項(xiàng)目中,常常有幾種環(huán)境,一般情況下最少有三種環(huán)境:開(kāi)發(fā)、測(cè)試、正式,各個(gè)環(huán)境之間的參數(shù)也各不相同,
于是在環(huán)境切換時(shí)我們需要修改為各環(huán)境需要的參數(shù),就此我們可以通過(guò)maven的配置在切換環(huán)境是簡(jiǎn)化這一步驟.
項(xiàng)目結(jié)構(gòu)圖
src/main/resources/dev 目錄是開(kāi)發(fā)環(huán)境的配置項(xiàng)目
src/main/resources/test 目錄是測(cè)試環(huán)境的配置項(xiàng)目
在pom.xml定義環(huán)境的profile
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <project.active>dev</project.active> </properties> </profile> <profile> <id>test</id> <properties> <project.active>test</project.active> </properties> </profile> </profiles>
activeByDefault標(biāo)簽的值為true的話表示為默認(rèn)的profile,使用mvn install命令起作用的就是默認(rèn)的 profiles.activation為我們配置激活的profile
<build> <finalName>SpringMVC_Spring_Mybatis</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <includes> <include>message.properties</include> <include>${project.active}/**</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>db.properties</exclude> <exclude>user.properties</exclude> <exclude>message.properties</exclude> <exclude>**/**</exclude> </excludes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <uriEncoding>UTF-8</uriEncoding> <path>/</path> <port>8088</port> </configuration> </plugin> </plugins> </build>
在工程的${basedir}/src/main/resource,目錄下(basedir指的是pom文件所在的目錄)
<include>與<exclude>是用來(lái)圈定和排除某一文件目錄下的文件是否是工程資源的,<include>中指定的為資源文件,其它的都不是,<exclude>中指定的除了這些都為資源文件,如果<include>與<exclude>劃定的范圍存在沖突時(shí),以<exclude>劃定的范圍為準(zhǔn),當(dāng)<include>與<exclude>指定了相同的文件時(shí),它們是不會(huì)被排除的,如message.properties同時(shí)被<include>與<exclude>指定,但它們還是會(huì)被編譯.
輸入maven指令
mvn clean install -P test
編譯結(jié)果如下圖,只編譯test環(huán)境需要的配置-P后面的test為我們所要激活的profile
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
獲取Java的MyBatis框架項(xiàng)目中的SqlSession的方法
SqlSession中包括已經(jīng)映射好的SQL語(yǔ)句,這樣對(duì)象實(shí)例就可以直接拿過(guò)來(lái)用了,那么這里就來(lái)講解獲取Java的MyBatis框架項(xiàng)目中的SqlSession的方法2016-06-06SpringBoot集成Nacos實(shí)現(xiàn)注冊(cè)中心與配置中心流程詳解
這篇文章主要介紹了SpringBoot集成Nacos實(shí)現(xiàn)注冊(cè)中心與配置中心流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02Mybatis Plus代碼生成器(時(shí)間管理大師)
這篇文章主要介紹了Mybatis Plus代碼生成器(時(shí)間管理大師)的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java從JDK源碼角度對(duì)Object進(jìn)行實(shí)例分析
這篇文章主要介紹了Java從JDK源碼角度對(duì)Object進(jìn)行實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12HashSet如何保證元素不重復(fù)(面試必問(wèn))
HashSet 不保證集合的迭代順序,但允許插入 null 值,也就是說(shuō)它可以將集合中的重復(fù)元素自動(dòng)過(guò)濾掉,保證存儲(chǔ)在 HashSet 中的元素都是唯一的,這篇文章主要介紹了HashSet如何保證元素不重復(fù)(面試必問(wèn)),需要的朋友可以參考下2021-12-12java實(shí)現(xiàn)TCP socket和UDP socket的實(shí)例
這篇文章主要介紹了本文主要介紹了java實(shí)現(xiàn)TCP socket和UDP socket的實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Redis6搭建集群并在SpringBoot中使用RedisTemplate的實(shí)現(xiàn)
本文主要介紹了Redis6搭建集群并在SpringBoot中使用RedisTemplate,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04java網(wǎng)絡(luò)編程學(xué)習(xí)java聊天程序代碼分享
java聊天程序代碼分享,大家參考使用吧2013-12-12Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能
ThreadLocal和其他并發(fā)工具一樣,也是用于解決多線程并發(fā)訪問(wèn),下這篇文章主要給大家介紹了關(guān)于Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02