详解pom.xml中maven profile的激活方式

 更新时间:2023年01月16日 10:30:31   作者:justry_deng  
本文主要介绍了详解pom.xml中maven profile的激活方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

maven profiles简单介绍:

maven profiles是maven从POM4.0开始给我们提供的一种新的特性。它允许maven根据不同的环境采用不同的maven配置。一个profiles标签中可以有很多个profile,只需要根据不同的项目环境,激活不同的profile即可。

提示:也可以同时激活多个profile

profiles的组成(示例):

注:使用maven的profile功能,我们可以实现多环境配置文件的动态切换。

maven profile的激活方式:

方式一:使用mvn ... -P xxx指令,指定激活id为xxx的profile。

第一步:在pom.xml中编写profiles。

<!-- 使用mvn ... -P xxx指令,指定激活id为xxx的profile -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <!-- profile唯一id -->
        <id>test-id</id>
        <!-- 引入fastjson依赖 -->
        <dependencies>
            <!-- fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <!-- profile唯一id -->
        <id>prod-id</id>
        <!-- 引入lombok依赖 -->
        <dependencies>
            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

第二步:打包时通过maven指令,指定激活哪一个profile。

如果需要激活多个profile的话,使用逗号隔开多个profile的id即可:

方式二:在profile里面使用activation标签,当满足条件时激活该profile。

提示:activation标签,允许我们定义默认激活配置、定义条件激活(满足什么条件就进行激活)配置,下面一一介绍。

activeByDefault默认激活:

<!-- ************** 设置默认激活 ************** -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <id>test-id</id>
        <activation>
            <!-- 设置默认激活 -->
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <id>prod-id</id>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

注:默认激活级别最低!一旦其它某个激活指令(mvn指令激活或activation的其他条件激活)生效时,那么默认激活指令就不会生效。

根据jdk激活:

<!-- ************** 根据jdk激活 ************** -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <id>test-id</id>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <id>prod-id</id>
        <activation>
            <!--
               当jdk的版本号是以下面的值开头时, 激活此profile
               即:当jdk的版本号是startWith下面的值时,激活此profile
             -->
            <jdk>1.8.0_</jdk>
            <!--
                还可以取反,当jdk的版本号 不是 startWith下面的值时,激活此配置
             -->
            <!-- <jdk>!1.8</jdk> -->
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

根据os激活:

<!-- ************** 根据os激活 ************** -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <id>test-id</id>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <id>prod-id</id>
        <activation>
            <!--
                当操作系统满足下述所有条件时,激活
                注: 如果有多个条件,那么必须所有条件都满足时,才会激活对应的profile
             -->
            <os>
                <!-- 操作系统名,如【Windows 10】 -->
                <name>Windows 10</name>
                <!-- 操作系统隶属, 如【windows】、【unix】 -->
                <family>windows</family>
                <!-- 操作系统的体系结构,如【amd64】 -->
                <arch>amd64</arch>
                <!-- 操作系统版本号,如【10.0】 -->
                <version>10.0</version>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

注:对于os的基本信息,我们可以这样获取:

/**
 * 获取操作系统信息
 *
 * @date 2019/9/4 11:21
 */
private static void osInfo() {
    Properties osProperties = System.getProperties();
    // name-操作系统名,如【Windows 10】
    System.out.println(osProperties.get("os.name"));
 
    // family-操作系统隶属, 如【windows】、【unix】, 可根据name来获取
    System.out.println(
            osProperties.get("os.name").toString().startsWith("Window") ? "windows" : "unix"
    );
 
    // arch-操作系统的体系结构,如【amd64】
    System.out.println(osProperties.get("os.arch"));
 
    // version-操作系统版本号,如【10.0】
    System.out.println(osProperties.get("os.version"));
}

根据file存在与否激活:

<!-- ************** 根据file存在与否激活 ************** -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <id>test-id</id>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <id>prod-id</id>
        <!--
            根据文件存在与否, 来激活profile
            注:文件路径可以是绝对路径,也可以是相对路径(相对pom.xml的路径)。
            注:在exists标签里,如果写绝对路径,不要使用${project.basedir}或
               ${pom.basedir};经本人测试,在exists标签里使用${}取不到值。
            注:missing与exists最好不要同时使用。 如果同时使用的话,missing就
               会形同虚设,是否激活此profile完全由exists决定,。
        -->
        <activation>
            <file>
                <!-- 相对路径示例 -->
                <exists>src/main/resources/xyza.yml</exists>
                <!-- <missing>src/main/resources/abcd.yml</missing> -->
 
                <!-- 绝对路径示例 -->
                <!-- <exists>C:/Users/JustryDeng/Desktop/zx-lw.log</exists> -->
                <!-- <missing>/usr/apps/file/info.properties</missing> -->
            </file>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

根据maven指令-D参数激活:

<!-- ************** 根据 maven指令参数-D 激活 ************** -->
<profiles>
    <!-- 测试环境 -->
    <profile>
        <id>test-id</id>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>
        </dependencies>
    </profile>
 
    <!-- 生产环境 -->
    <profile>
        <id>prod-id</id>
        <activation>
            <!--
                maven指令参数-D激活
                注:与根据maven指令参数-P 指定profile的id进行激活类似
            -->
            <property>
                <name>pk</name>
                <value>pv</value>
            </property>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
</profiles>

打包时通过maven指令-D,指定激活哪一个profile:

如果想激活多个profile,可以这样:

提示除了在项目的pom.xml中可以对profile进行配置激活外,还可以在当前用户下的.m2/settings.xml文件里,对profile进行配置激活;还可以在maven安装目录下的conf/settings.xml文件里,对profile进行配置激活。上述三者的区别是:在项目的pom.xml中配置profile,那么配置的profile只对该项目有效;在用户下的.m2/settings.xml文件里配置profile,那么配置的profile只对该用户下的(所有)项目有效;在maven安装目录下的conf/settings.xml文件里配置profile,那么配置的profile对使用该maven程序的(所有)项目有效。

到此这篇关于详解pom.xml中maven profile的激活方式的文章就介绍到这了,更多相关Maven profile激活方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的PowerMock使用实践

    Java中的PowerMock使用实践

    这篇文章主要介绍了Java中的PowerMock使用实践,@PrepareForTest和@RunWith是成对出现的,一般@RunWith(PowerMockRunner.class),@PrepareForTest的值是引用的静态方法或私有方法的类,需要的朋友可以参考下
    2023-12-12
  • mybatis拦截器实现数据权限项目实践

    mybatis拦截器实现数据权限项目实践

    本文主要介绍了mybatis拦截器实现数据权限项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详解Spring DI依赖注入的方式和类型

    详解Spring DI依赖注入的方式和类型

    这篇文章主要介绍了详解Spring DI依赖注入的方式和类型,DI是由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台,需要的朋友可以参考下
    2023-05-05
  • 使用spring jpa 如何给外键赋值

    使用spring jpa 如何给外键赋值

    这篇文章主要介绍了使用spring jpa 如何给外键赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 详解使用Spring MVC统一异常处理实战

    详解使用Spring MVC统一异常处理实战

    本篇文章主要介绍了详解使用Spring MVC统一异常处理实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java格式化数字操作 NumberFormat及DecimalFormat

    java格式化数字操作 NumberFormat及DecimalFormat

    这篇文章主要介绍了java格式化数字操作 NumberFormat及DecimalFormat,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • spring boot aop 记录方法执行时间代码示例

    spring boot aop 记录方法执行时间代码示例

    这篇文章主要介绍了spring boot aop 记录方法执行时间代码示例,分享了相关代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • MyBatis-plus+达梦数据库实现自动生成代码的示例

    MyBatis-plus+达梦数据库实现自动生成代码的示例

    这篇文章主要介绍了MyBatis-plus+达梦数据库实现自动生成代码的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mybatis逆向工程与分页在springboot中的应用及遇到坑

    mybatis逆向工程与分页在springboot中的应用及遇到坑

    最近在项目中应用到springboot与mybatis,在进行整合过程中遇到一些坑,在此将其整理出来,分享到脚本之家平台供大家参考下
    2018-09-09
  • Spring Boot详解配置文件有哪些作用与细则

    Spring Boot详解配置文件有哪些作用与细则

    SpringBoot项目是一个标准的Maven项目,它的配置文件需要放在src/main/resources/下,其文件名必须为application,其存在两种文件形式,分别是properties和yaml(或者yml)文件
    2022-07-07

最新评论