maven的pom.xml中profiles的作用詳解
1、profiles是什麼?有什麼作用
在maven構建的項目都存在一個pom.xml的項目對象模型配置文件,用於約束項目(如:jar包管理、構建管理等)。profiles是pom.xml中的一個配置項。
我們在開發項目時一般都會區分線上環境和測試環境,這兩個環境需要切換以適應不同的環境需求
正式環境的配置,一般放置於src/main/resources下,而測試環境放置於/src/test/resources下面。
profile的主要作用就是區分正式環境和測試環境的配置
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>
如上, 我配置瞭兩個profile一個release用於正式環境發佈,test用於測試環境使用;默認開啟測試環境,activation->true
測試環境與正式環境隻是部分的配置不同,我們需要公用這部分配置。這就使用到瞭includes and excludes,用引入和排除配置文件
3、區別構建發佈包
構建測試包:
maven package -P test -Dmaven.test.skip=true
構建正式包:
maven package -P release -Dmaven.test.skip=true
maven多環境profiles參數切換
在實際開發項目中,常常有幾種環境,一般情況下最少有三種環境:開發、測試、正式,各個環境之間的參數也各不相同,
於是在環境切換時我們需要修改為各環境需要的參數,就此我們可以通過maven的配置在切換環境是簡化這一步驟.
項目結構圖
src/main/resources/dev 目錄是開發環境的配置項目
src/main/resources/test 目錄是測試環境的配置項目
在pom.xml定義環境的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標簽的值為true的話表示為默認的profile,使用mvn install命令起作用的就是默認的 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>是用來圈定和排除某一文件目錄下的文件是否是工程資源的,<include>中指定的為資源文件,其它的都不是,<exclude>中指定的除瞭這些都為資源文件,如果<include>與<exclude>劃定的范圍存在沖突時,以<exclude>劃定的范圍為準,當<include>與<exclude>指定瞭相同的文件時,它們是不會被排除的,如message.properties同時被<include>與<exclude>指定,但它們還是會被編譯.
輸入maven指令
mvn clean install -P test
編譯結果如下圖,隻編譯test環境需要的配置-P後面的test為我們所要激活的profile
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 帶你瞭解Java Maven的打包操作
- 使用maven的profile構建不同環境配置的方法
- 一篇文章帶你搞定JAVA Maven
- maven profile實現多環境配置的示例
- maven的pom文件與打包詳解