Maven学习(十四)profile标签

Maven学习(十四)profile标签

  • 1.profile概述
    • ①单词释义
    • ②项目的不同运行环境
    • ②默认profile
  • 2.profile配置
    • ①外部视角:配置文件
    • ②内部实现:具体标签
      • 【1】profiles/profile标签
      • 【2】id标签
      • 【3】其他允许出现的标签
  • 3.激活profile
    • ①默认配置
    • ②基于环境信息激活
    • ③命令行激活
  • 4.操作举例
  • 5.资源属性过滤
    • ①简介

1.profile概述

①单词释义

profile有外形,侧面,方面等意思,这个我们可以去侧面这个含义对应一下。
Maven学习(十四)profile标签_第1张图片

②项目的不同运行环境

Maven学习(十四)profile标签_第2张图片
通常情况下,至少有三种运行环境:

  • 开发环境:供不同开发工程师开发的各个模块之间互相调用,访问;内部使用
  • 测试环境:供测试工程师对项目的各个模块之间进行功能测试,内部使用
  • 生产环境:供最终用户访问–所以这是最终的正式运行环境

而我们这里的环境只是一个笼统的叫法,实际工作中一套运行环境会包含很多服务器:

  • 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>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>

那么,多个激活条件之间是什么关系呢

  • 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>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标签_第3张图片

5.资源属性过滤

①简介

Maven为了能够通过profile实现不同运行环境切换,提供了一种资源属性过滤的机制。通过属性替换实现不同环境下使用不同的参数

一般来讲,在项目中,我们也不会把特定的参数放到这里,所以演示略。

你可能感兴趣的:(Maven,maven,学习)