maven 通过 profile 设置多环境打包
maven 在设计之初就考虑到了业务代码和测试代码的分开存放。将业务代码默认存放在 src/main 下,将测试代码放在 src/test 下,然后在各自目录下再细分 java 与 resources 。
但是我们日常开发过程中的业务代码也需要运行在不同的环境中,如开发环境、测试环境及线上环境,而不同环境之中程序的配置是不同的。每次打包完了手动替换显然不是我们想要的,所以我们希望能找一个方法,能在代码打包的时候能自动根据环境来打包不同的配置文件。
还好, maven-resources-plugin 支持自定义配置文件的路径,找到一个解决问题的入口。
首先,我们在工程里面建立多个文件夹,如图:
而在 pom.xml 里面这样配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.kischn</groupId>
<artifactId>multi-profile</artifactId>
<version>1.0-SNAPSHOT</version> <profiles>
<!-- 当我们需要把代码打包发布到生产环境时,执行 mvn clean package -D skipTests -P production -->
<profile>
<id>production</id>
<build>
<resources>
<resource>
<directory>src/main/prod-resources</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
</project>
pom.xml
maven-resources-plugin 支持自定义多个 resource 目录,嘻嘻,不错~
啥?没看到 maven-resources-plugin 相关的名字?因为 maven 默认就带这个插件呀,只填上这个相关的配置就可以了。
经过我的测试, maven-resources-plugin 的配置文件复制的策略就是 按照配置的顺序进行文件拷贝,如果冲突呢?冲突就是不覆盖。
所以, xml 里面配置的意思就是先把 prod-resources 里面的文件复制到 target 目录下,然后再复制 resources 里面的,如果冲突了, resources 里面的文件就不复制了。
测试一下效果:
好,大功告成!
总结一下其中的关键点:
0. maven-resources-plugin 支持自定义多个 resources 目录,且目录是按照声明顺序进行文件复制,如果文件遇到冲突,靠前的优先存在。
1. 也就是说你可以理解为 prod-resources 继承 resources,如果 prod-resources 里面有与 resources 同名文件,说明就是 override 了,否则就直接继承 resources 里面的文件了。
上面提到的 multi-profile 代码灰常简单,点击这里下载 multi-profile.zip
maven 通过 profile 设置多环境打包的更多相关文章
- maven profile实现多环境打包
快速解决: 项目目录 1.pom文件中添加profile <profiles> <profile> <!-- 本地开发环境 --> <id>dev< ...
- 【转】maven profile实现多环境打包
作为一名程序员,在开发的过程中,经常需要面对不同的运行环境(开发环境.测试环境.生产环境.内网环境.外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置.日志文件配置.以及一些软件运行 ...
- Maven插件之portable-config-maven-plugin(不同环境打包)
在大型的项目组中,分不同的开发环境,测试环境,生产环境(说白了就是配置文件不同,或者数据源,或者服务器,或者数据库等);问题来了,如何使用Maven针对不同的环境来打包呢? Maven提供了Profi ...
- Maven之profile实现多环境配置动态切换
一般的软件项目,在开发.测试及生产等环境下配置文件中参数是不同的.传统的做法是在项目部署的时候,手动修改或者替换这个配置文件.这样太麻烦了,我们可以用Maven的profile来解决这 ...
- 使用maven的profile构建不同环境配置
基本概念说明(resources.filter和profile): 1.profiles定义了各个环境的变量id 2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profil ...
- maven 利用 profile 进行多环境配置
我们在进行项目的多环境配置时,有很多种方式供我们选择,比如 SpringBoot 自带的 application-dev.yml.maven 的 profile 等.这里介绍的就是如何利用 profi ...
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...
- maven的profile 目录、变量打包
<project> <build> <finalName>maven-project</finalName> <resources> < ...
- (十一)Maven之profile实现多环境配置动态切换
原文链接:https://www.cnblogs.com/zeng1994/p/a442108012ffd6a97b22c63055b48fe9.html 一.多环境配置文件的放置 将不同环境下的配 ...
随机推荐
- hdu 3172 Virtual Friends (并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 2017 Multi-University Training Contest - Team 4 phone call(树+lca+并查集)
题解: (并查集处理往上跳的时候,一定要先让u,v往上跳到并查集的祖先,不然会wa掉) 代码如下: #include <iostream> #include <algorithm&g ...
- [洛谷P3521][POI2011]ROT-Tree Rotations
题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换 ...
- [Leetcode] plus one 加一
Given a number represented as an array of digits, plus one to the number. 题意:给定数以数组的形式存储,然后计算该数加1的值. ...
- 【BZOJ 2460 元素】
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1555 Solved: 809[Submit][Status][Discuss] Descripti ...
- loj2540 「PKUWC 2018」随机算法
pkusc 快到了--做点题涨涨 rp. 记 \(f(S,i)\) 表示 \(S\) 这个集合是决计不能选的(要么属于独立集,要么和独立集相连),或称已经考虑了的,\(i\) 表示此集合对应的最大独立 ...
- git使用笔记(七)版本回退和撤销
By francis_hao Nov 21,2016 从版本库初始化开始,每一步的撤销操作 添加第一个文件 在空的版本库中创建了一个文件并git add到了缓存区,这时候怎么撤销呢? 撤销单个文 ...
- POJ1637:Sightseeing tour(混合图的欧拉回路)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10581 Accepted: 4466 ...
- hadoop删除节点和添加节点
从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer ...
- C# new override
A -> virtual Fun B : A -> override Fun C : B -> override Fun D : C -> new virtual Fun E ...