什么是profile
profile是在maven xml中配置的,由<profiles></profiles>
包围的一块配置
<profiles>
<profile>
<!-- do configuration -->
</profile>
<profile>
<!-- do configuration -->
</profile>
</profile>
profile的作用
通常情况下,线上和线下的一些配置是不一样的。通常,我们会把不同环境的配置放置到不同的文件中。
举个例子:
线上要读取的配置文件是config-online.properties
线下要读取的配置文件是config-test.properties
如何在不修改代码的情况下,实现不同的环境读取不同的配置呢?这里就可以使用profile。
当然,profile的作用不止是区分环境,能实现的功能主要有:
- 区分运行环境
- 区分JDK版本
- 区分操作系统
- 区分文件是否存在
哪里配置profile
- pom.xml -- 每个maven工程中的pom.xml,只对该pom.xml所属的工程生效。这个是最常用的
- .m2/settings.xml -- 全局的
- Maven安装目录conf/settings.xml -- 全局的
怎么激活profile
pom.xml中撰写不同的profile,然后通过不同的方式来激活
<profiles>
<profile>
<!--通过-P参数激活-->
<id></id>
<!--activation标识什么情况下激活该profile-->
<activation>
<!--默认情况下,激活该profile-->
<activeByDefault>true</activeByDefault>
<!--根据os激活-->
<os></os>
<!--根据jdk激活,例子见下-->
<jdk></jdk>
<!--根据-D参数激活-->
<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的参数被定义时,且值为true时,该profile生效-->
<property>
<name>debug</name>
<value>true</value>
</property>
</activation>
</profile>
</profiles>
mvn install -Ddebug=true
<profiles>
<profile>
<activation>
<!--当名称为debug的参数被定义时,该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>
详细参数见Require OS Version
哪些元素可以根据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:
如要发布一个jar包,测试环境发SNAPSHOT版本的,线上环境发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:
需要根据不同的环境选取不同的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