目录

背景

配置

生产中的使用

.properties读取pom中变量


背景

在开发过程中,我们的项目会存在不同的运行环境,比如开发环境、测试环境、生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。而maven的profile机制可以很好的解决上述问题。

配置

先来看一组profile配置

<profiles><profile><id>test</id><properties><revision>${snapshot_version}</revision></properties></profile><profile><id>prod</id><properties><revision>${release_version}</revision></properties><activation><activeByDefault>true</activeByDefault></activation></profile></profiles>

上面子节点的具体含义

id:profile的唯一标识,可用于命令行激活,如,mvn pacakge -Pmyid,即打包时指定使用id为myid的profile

activation:激活器,定义了自动触发此profile的条件逻辑

properties:自定义的可以在整个POM中作为替换使用的字段,如果启用,通常用作过滤器。格式是<name>value</name>

只介绍这三个,再对activation的子节点介绍一下:

activeByDefault:设为true,此profile将默认被激活,除非另一个profile激活通过命令行-P的方式或被其激活器激活

生产中的使用

在生产环境中,经常会遇到微服务各个模块升级版本以及不同环境打snapshot/release jar包的问题,那么是如何解决以上两类问题的呢

  • 子模块升级版本保持版本统一

项目中的目录结构如上图所示

父pom

可以看到父pom是通过${}的方式,找到了profile文件中revision所需依赖的版本,所依赖的版本再找到<properties>标签中具体的指向。

consumer子pom中的继承

<parent><artifactId>crm-user-service</artifactId><groupId>com.ziroom.crm</groupId><version>${revision}</version></parent>

provider中子pom的继承

<parent><artifactId>crm-user-service</artifactId><groupId>com.ziroom.crm</groupId><version>${revision}</version></parent>

provider中对consumer实体的依赖

<dependency><groupId>com.ziroom.crm</groupId><artifactId>crm-user-service-consumer</artifactId><version>${project.version}</version></dependency>

可以看到遵循了这样一种方式

由此就可以实现,父pom中改动一处版本,子模块跟着升级

<properties>    <snapshot_version>1.7.2-SNAPSHOT</snapshot_version><release_version>1.7.2</release_version></properties>
  • 区分环境

maven支持 mvn compile -Ptest的方式进行指定profile环境的编译,但是到了生产环境是如何编译的呢,我们公司采用的是omega平台集成了maven命令

测试环境

生产环境

根据以上的配置就可以在不同环境做区分。

项目现在的配置是发布后自动打出jar包,所以只需要在测试环境指定

<snapshot_version>xxxxxx-SNAPSHOT</snapshot_version>

在生产环境指定

<release_version>xxxxx</release_version>

就可以分别生成snapshot/release版本的jar包,并根据后缀名分别上传到不同的仓库。

.properties读取pom中变量

想要在.properties完成下面的效果,

先要引入maven-resources-plugin插件

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><!-- 在构建路径中 指定源文件编译的字符编码 --><encoding>UTF-8</encoding></configuration></plugin>
</plugins>

上述插件的作用是替换掉.properties中的占位符,详细功能请参考maven-maven-resources-plugin插件使用 - 意犹未尽 - 博客园

配合profiles文件使用时,则在确定具体环境后,会从pom文件中找到<properties>标签,再找到对应的<env.name>标签替换掉.properties中的${env.name}。

pom文件
<profiles><profile><id>env.dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><env.name>dev</env.name><log.console>&lt;appender-ref ref="CONSOLE"/&gt;</log.console></properties></profile><profile><id>env.test</id><properties><env.name>test</env.name></properties></profile></profiles>

maven学习笔记(四)profile的使用相关推荐

  1. maven学习笔记——尚硅谷

    文章目录 maven学习笔记--尚硅谷 第一章 Maven概述 第一节 为什么要学习Maven 1.Maven 作为依赖管理工具 1.1 jar 包的规模 1.2 jar 包的来源 1.3 jar 包 ...

  2. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  3. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

    maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...

  4. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程

    前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...

  5. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  6. Maven学习总结(四)——Maven核心概念

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平 ...

  7. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  8. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  9. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

最新文章

  1. NSInputStream和NSMutableURLRequest-实现保存文件到服务器
  2. ELK 日志管理系统,再次尝试记录
  3. 成功解决WARNING:tensorflow:From :read_data_sets (from tensorflow.contrib.learn.python.learn.
  4. 百度更新算法之后我想说
  5. HDU-5877-Weak Pair(树状数组+离散化+dfs)
  6. 阿里文娱技术专家战獒: 领域驱动设计详解之What, Why, How?
  7. php处理文件属性函数,文件属性 · PHP文件系统操作常用函数整理 · 看云
  8. 最近发现一个爬虫开源项目weixin_crawler
  9. NetTiers学习笔记09---RADGrid + EntityDataSource设置默认排序, 及表格自动排序,分页的方法...
  10. 十大注意事项 防止系统重装时遭遇病毒
  11. 【深度优先搜索】计蒜客:中国象棋
  12. 外网不能访问图片的问题
  13. 基于matlab的信号频谱分析 开题报告,基于MATLAB的数字信号处理开题报告
  14. 浅析海量数据处理问题
  15. 使用Cadence组件进行Pspice仿真
  16. __attribute__ 关键字小结
  17. javacc LOOKAHEAD关键字
  18. processson的文件数量已达到上限如何删除老文件新建新的文件创建流程图
  19. 递归 (一): 递归思想与 C++ 中的递归函数及两个递归应用示例 (斐波那契, 汉诺塔)
  20. 【论文笔记】PSEUDOSEG: DESIGNING PSEUDO LABELS FOR SEMANTIC SEGMENTATION

热门文章

  1. 华为私有云的搭建方案_Kali linux 搭建私有云
  2. 模拟电子技术-二极管及其基本电路
  3. 自动控制原理9.1---线性系统的状态空间描述(中上)
  4. 广交会创建直播间注意事项丨汇信外贸软件
  5. 关于我想写个脚本,最后却搞了个桌面宠物这件事(二)
  6. Android【Socket通讯】
  7. (戒急用忍)本来是要展望2019的,没想到重点不由自主的写成了回顾前几年的事情了
  8. 计算机组老师颁奖词,获奖教师的颁奖词
  9. css样式—高度塌陷
  10. 树莓派开机发ip到邮箱