Maven学习(十四)profile标签
- 1.profile概述
- ①单词释义
- ②项目的不同运行环境
- ②默认profile
- 2.profile配置
- ①外部视角:配置文件
- ②内部实现:具体标签
- 【1】profiles/profile标签
- 【2】id标签
- 【3】其他允许出现的标签
- 3.激活profile
- ①默认配置
- ②基于环境信息激活
- ③命令行激活
- 4.操作举例
- 5.资源属性过滤
- ①简介
1.profile概述
①单词释义
profile有外形,侧面,方面等意思,这个我们可以去侧面这个含义对应一下。
②项目的不同运行环境
通常情况下,至少有三种运行环境:
- 开发环境:供不同开发工程师开发的各个模块之间互相调用,访问;内部使用
- 测试环境:供测试工程师对项目的各个模块之间进行功能测试,内部使用
- 生产环境:供最终用户访问–所以这是最终的正式运行环境
而我们这里的环境只是一个笼统的叫法,实际工作中一套运行环境会包含很多服务器:
- Mysql
- Redis
- ES
- …
就拿Mysql来说,不同环境下的访问参数肯定完全不同
可是代码只有一套,如果在jdbc的配置文件中来回修改,肯定是不明智的,很容易出错。所以最好的办法就是把适用于不同环境的配置分别准备好,部署哪个环境就激活哪个配置。
在Mavven中,使用profile机制来管理不同环境的配置信息。Maven的profile理解一下即可。
②默认profile
即使我们在pom.xml中不配置profile标签,也已经用到了profile了。因为根标签project下所有标签都相当于设定默认的profile。project标签下除了 modelVersion和坐标系标签外,都可以配置到profile中
2.profile配置
①外部视角:配置文件
从外部视角来看,profile可以在两种配置文件中配置
- settings.xml:全局生效。比如我们配置jdk1.8
- pom.xml:当前pom生效
②内部实现:具体标签
从内部视角来看,配置profile有如下语法要求:
【1】profiles/profile标签
- 由于profile天然代表众多可选配置中的一个,所以由复数形式的profiles标签统一管理
- 由于profile标签覆盖了pom.xml中的默认配置,所以profiles标签通常是pom.xml中的最后一个标签。
【2】id标签
每个profile标签都必须有一个id标签,指定该profile的唯一标识。这个id标签的值会在命令行调用profile时被用到,这个命令格式是 : -D
【3】其他允许出现的标签
除了坐标啥的,基本都可以。
3.激活profile
①默认配置
前面提到的,在没有自己配置profile时,激活默认的profile
②基于环境信息激活
环境信息包含:JDK版本、操作系统参数,文件,属性等各个方面。一个profile一旦被激活,那么它定义的所有配置都会覆盖原来pom文件对应层次的元素。例如:
<profile>
<id>dev</id>
<activation>
<!--配置是否默认激活-->
<activeByDefault>false</activeByDefault>
<jdk>1.8</jdk>
<os>
<name>Windows 10</name>
<family>Windows</family>
<arch>x64</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>2.0.5</value>
</property>
<file>
<exists>file2.properties</exists>
<missing>file1.properties</missing>
</file>
</activation>
</profile>
那么,多个激活条件之间是什么关系呢
- Maven3.2.2之前:遇到第一个满足的条件即可激活,或的关系
- Maven3.2.2之后:各个条件均需满足,且的关系
比如以上例子,第一个条件,在Jdk为1.8才会激活
③命令行激活
除了以上根据环境的自动激活,还可以根据命令行激活
列出所有激活的profile,以及他们在哪里定义
mvn help:active-profiles
指出某个具体的profile
mvn compile -P<profile id>
4.操作举例
假如我们创建 使用到lamda表达式的类:
public class LamadaTest {
public static void main(String[] args) {
new Thread(()->{
System.out.println("hello");
}).start();
}
}
如果这时候我们创建一个profile使用jdk1.6,看是否能激活成功。
<profiles>
<profile>
<id>myJDKProfile</id>
<!--build标签:构建行为-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
执行命令行 命令,激活该profile
mvn clean test -PmyJDKProfile
结果显示
5.资源属性过滤
①简介
Maven为了能够通过profile实现不同运行环境切换,提供了一种资源属性过滤的机制。通过属性替换实现不同环境下使用不同的参数
一般来讲,在项目中,我们也不会把特定的参数放到这里,所以演示略。