什么是profile
profile是在maven xml中配置的,由<profiles></profiles>包圍的一塊配置
<profiles>
<profile>
<!-- do configuration -->
</profile>
<profile>
<!-- do configuration -->
</profile>
</profile>
profile的作用
通常情況下,線上和線下的一些配置是不一樣的。通常,我們會把不同環(huán)境的配置放置到不同的文件中。
舉個例子:
線上要讀取的配置文件是config-online.properties
線下要讀取的配置文件是config-test.properties
如何在不修改代碼的情況下,實現(xiàn)不同的環(huán)境讀取不同的配置呢?這里就可以使用profile。
當然,profile的作用不止是區(qū)分環(huán)境,能實現(xiàn)的功能主要有:
- 區(qū)分運行環(huán)境
- 區(qū)分JDK版本
- 區(qū)分操作系統(tǒng)
- 區(qū)分文件是否存在
哪里配置profile
- pom.xml -- 每個maven工程中的pom.xml,只對該pom.xml所屬的工程生效。這個是最常用的
- .m2/settings.xml -- 全局的
- Maven安裝目錄conf/settings.xml -- 全局的
怎么激活profile
pom.xml中撰寫不同的profile,然后通過不同的方式來激活
<profiles>
<profile>
<!--通過-P參數(shù)激活-->
<id></id>
<!--activation標識什么情況下激活該profile-->
<activation>
<!--默認情況下,激活該profile-->
<activeByDefault>true</activeByDefault>
<!--根據(jù)os激活-->
<os></os>
<!--根據(jù)jdk激活,例子見下-->
<jdk></jdk>
<!--根據(jù)-D參數(shù)激活-->
<property>
<name></name>
<value></value>
</property>
</activation>
<properties>
</properties>
</profile>
</profiles>
id
<profiles>
<profile>
<id>develop</id>
</profile>
<profile>
<id>test</id>
</profile>
<profile>
<id>online</id>
</profile>
</profiles>
mvn compile -Pdevelop
activation - jdk
<profiles>
<profile>
<activation>
<!--當jdk版本為1.7時,該profile生效-->
<jdk>1.7</jdk>
<!--當jdk版本大于1.5,小于等于1.8時,該profile生效-->
<jdk>(1.5,1.8]</jdk>
</activation>
</profile>
</profiles>
activation - property
<profiles>
<profile>
<activation>
<!--當名稱為debug的參數(shù)被定義時,且值為true時,該profile生效-->
<property>
<name>debug</name>
<value>true</value>
</property>
</activation>
</profile>
</profiles>
mvn install -Ddebug=true
<profiles>
<profile>
<activation>
<!--當名稱為debug的參數(shù)被定義時,該profile生效-->
<property>
<name>debug</name>
</property>
</activation>
</profile>
</profiles>
activation - os
<profiles>
<profile>
<!--當os為Windows XP時,該profile生效-->
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</profile>
</profiles>
詳細參數(shù)見Require OS Version
哪些元素可以根據(jù)profile自定義
pom中的下列元素中的配置均可通過profile定義
<repositories><pluginRepositories><dependencies><plugins>-
<properties>(not actually available in the main POM, but used behind the scenes) <modules><reporting><dependencyManagement><distributionManagement>- a subset of the <build> element, which consists of:
<defaultGoal><resources><testResources><finalName>
例子1:
如要發(fā)布一個jar包,測試環(huán)境發(fā)SNAPSHOT版本的,線上環(huán)境發(fā)Release版本的,可這樣配置:
<project>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>${project.version}</version>
<profiles>
<profile>
<id>test</id>
<properties>
<project.version>1.0.0-SNAPSHOT</project.version>
</properties>
</profile>
<profile>
<id>online</id>
<properties>
<project.version>1.0.0</project.version>
</properties>
</profile>
</profiles>
</project>
mvn deploy -Ptest
或者
mvn deploy -Ponline
例子2:
需要根據(jù)不同的環(huán)境選取不同的resource:
<profiles>
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>profiles/test</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>online</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>profiles/online</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
同時,在工程中會有這樣的文件夾:
+---profiles
+---test
---config.properties
+---online
---config.properties