maven的pom.xml中profiles的作用详解
作者:°Fuhb 发布时间:2022-07-03 20:40:54
1、profiles是什么?有什么作用
在maven构建的项目都存在一个pom.xml的项目对象模型配置文件,用于约束项目(如:jar包管理、构建管理等)。profiles是pom.xml中的一个配置项。
我们在开发项目时一般都会区分线上环境和测试环境,这两个环境需要切换以适应不同的环境需求
正式环境的配置,一般放置于src/main/resources下,而测试环境放置于/src/test/resources下面。
profile的主要作用就是区分正式环境和测试环境的配置
2、如何配置
<profiles>
<profile>
<id>release</id>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
</profile>
<profile>
<id>test</id>
<build>
<resources>
<resource>
<directory>src/test/resources</directory>
<includes>
<include>config/*.properties</include>
<include>log4j.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>log4j.xml</exclude>
</excludes>
</resource>
</resources>
</build>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
如上, 我配置了两个profile一个release用于正式环境发布,test用于测试环境使用;默认开启测试环境,activation->true
测试环境与正式环境只是部分的配置不同,我们需要公用这部分配置。这就使用到了includes and excludes,用引入和排除配置文件
3、区别构建发布包
构建测试包:
maven package -P test -Dmaven.test.skip=true
构建正式包:
maven package -P release -Dmaven.test.skip=true
maven多环境profiles参数切换
在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发、测试、正式,各个环境之间的参数也各不相同,
于是在环境切换时我们需要修改为各环境需要的参数,就此我们可以通过maven的配置在切换环境是简化这一步骤.
项目结构图
src/main/resources/dev 目录是开发环境的配置项目
src/main/resources/test 目录是测试环境的配置项目
在pom.xml定义环境的profile
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.active>dev</project.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<project.active>test</project.active>
</properties>
</profile>
</profiles>
activeByDefault标签的值为true的话表示为默认的profile,使用mvn install命令起作用的就是默认的 profiles.activation为我们配置激活的profile
<build>
<finalName>SpringMVC_Spring_Mybatis</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>message.properties</include>
<include>${project.active}/**</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>db.properties</exclude>
<exclude>user.properties</exclude>
<exclude>message.properties</exclude>
<exclude>**/**</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
<port>8088</port>
</configuration>
</plugin>
</plugins>
</build>
在工程的${basedir}/src/main/resource,目录下(basedir指的是pom文件所在的目录)
<include>与<exclude>是用来圈定和排除某一文件目录下的文件是否是工程资源的,<include>中指定的为资源文件,其它的都不是,<exclude>中指定的除了这些都为资源文件,如果<include>与<exclude>划定的范围存在冲突时,以<exclude>划定的范围为准,当<include>与<exclude>指定了相同的文件时,它们是不会被排除的,如message.properties同时被<include>与<exclude>指定,但它们还是会被编译.
输入maven指令
mvn clean install -P test
编译结果如下图,只编译test环境需要的配置-P后面的test为我们所要激活的profile
来源:https://blog.csdn.net/qq_28834355/article/details/108774293
猜你喜欢
- 目录首先,写一个需求文档:一、登录界面1.界面2.登录3.退出二、开始游戏界面三、缓冲加载游戏界面四、游戏主界面五、结束界面上代码首先,写一
- final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。 通常final定义的变量为常量。如:final double
- 本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下效果图:分析:左右两边可以
- Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindServ
- 本文实例为大家分享了Java实现扑克牌程序的具体代码,供大家参考,具体内容如下思路:在实现之前,先要想好步骤,思路清晰才不会出错。要实现一副
- WebFilter.javapackage com.hongyuan.route;import java.io.File;import ja
- maven运行依赖于 JAVA_HOME如果各位还没有配置 JAVA_HOME,可以参考我的另一篇博客 JDK环境变量配置 JDK 环境变量
- 随着C语言的学习慢慢结束,博主也要开始学习一门新语言了,那就是java。所以博主将会开启一个新的关于java的专栏,所以想要慢慢和我一起学习
- 近期,Apache SkyWalking 修复了一个隐藏了近4年的Bug - TTL timer 可能失效问题,这个 bug 在 SkyWa
- 一、摘要这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的。并且会简单的介绍下MyBati
- Spring main方法调用Dao层和Service层的方法在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启
- 1.短信平台购买次数地址https://market.aliyun.com/products/57000002/cmapi00046920.
- 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以
- 概述从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.优先队列优先队列 (Priority Queue) 和队
- 1. matlab的lp2lp函数的作用去归一化 H(s) 的分母2. matlab的lp2lp函数的使用方法[z, p, k]=butta
- 实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了Handl
- 要想使Java运行,我们可以设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换为它可以识别的指令序列,也称为Java字节码
- 一、问题定义:问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数??例如:权重: 8 2&nbs
- 题目要求思路一:DFS+序列化设计一种规则将所有子树序列化,保证不同子树的序列化字符串不同,相同子树的序列化串相同。用哈希表存所有的字符串,
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl