profile有外形,侧面,方面等意思,这个我们可以去侧面这个含义对应一下。
而我们这里的环境只是一个笼统的叫法,实际工作中一套运行环境会包含很多服务器:
就拿Mysql来说,不同环境下的访问参数肯定完全不同
可是代码只有一套,如果在jdbc的配置文件中来回修改,肯定是不明智的,很容易出错。所以最好的办法就是把适用于不同环境的配置分别准备好,部署哪个环境就激活哪个配置。
在Mavven中,使用profile机制来管理不同环境的配置信息。Maven的profile理解一下即可。
即使我们在pom.xml中不配置profile标签,也已经用到了profile了。因为根标签project下所有标签都相当于设定默认的profile。project标签下除了 modelVersion和坐标系标签外,都可以配置到profile中
从外部视角来看,profile可以在两种配置文件中配置
从内部视角来看,配置profile有如下语法要求:
每个profile标签都必须有一个id标签,指定该profile的唯一标识。这个id标签的值会在命令行调用profile时被用到,这个命令格式是 : -D
除了坐标啥的,基本都可以。
前面提到的,在没有自己配置profile时,激活默认的profile
环境信息包含:JDK版本、操作系统参数,文件,属性等各个方面。一个profile一旦被激活,那么它定义的所有配置都会覆盖原来pom文件对应层次的元素。例如:
<profile>
<id>devid>
<activation>
<activeByDefault>falseactiveByDefault>
<jdk>1.8jdk>
<os>
<name>Windows 10name>
<family>Windowsfamily>
<arch>x64arch>
<version>5.1.2600version>
os>
<property>
<name>mavenVersionname>
<value>2.0.5value>
property>
<file>
<exists>file2.propertiesexists>
<missing>file1.propertiesmissing>
file>
activation>
profile>
那么,多个激活条件之间是什么关系呢
比如以上例子,第一个条件,在Jdk为1.8才会激活
除了以上根据环境的自动激活,还可以根据命令行激活
列出所有激活的profile,以及他们在哪里定义
mvn help:active-profiles
指出某个具体的profile
mvn compile -P<profile id>
假如我们创建 使用到lamda表达式的类:
public class LamadaTest {
public static void main(String[] args) {
new Thread(()->{
System.out.println("hello");
}).start();
}
}
如果这时候我们创建一个profile使用jdk1.6,看是否能激活成功。
<profiles>
<profile>
<id>myJDKProfileid>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.1version>
<configuration>
<source>1.6source>
<target>1.6target>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
build>
profile>
profiles>
执行命令行 命令,激活该profile
mvn clean test -PmyJDKProfile
Maven为了能够通过profile实现不同运行环境切换,提供了一种资源属性过滤的机制。通过属性替换实现不同环境下使用不同的参数
一般来讲,在项目中,我们也不会把特定的参数放到这里,所以演示略。