maven 通过 profile 设置多环境打包

maven 在设计之初就考虑到了业务代码和测试代码的分开存放。将业务代码默认存放在  src/main  下,将测试代码放在  src/test  下,然后在各自目录下再细分  java  与 resources 。

但是我们日常开发过程中的业务代码也需要运行在不同的环境中,如开发环境、测试环境及线上环境,而不同环境之中程序的配置是不同的。每次打包完了手动替换显然不是我们想要的,所以我们希望能找一个方法,能在代码打包的时候能自动根据环境来打包不同的配置文件。

还好,  maven-resources-plugin  支持自定义配置文件的路径,找到一个解决问题的入口。

首先,我们在工程里面建立多个文件夹,如图:

而在 pom.xml 里面这样配置:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>org.kischn</groupId>
 8     <artifactId>multi-profile</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11 
12     <profiles>
13         <!-- 当我们需要把代码打包发布到生产环境时,执行 mvn clean package -D skipTests -P production -->
14         <profile>
15             <id>production</id>
16             <build>
17                 <resources>
18                     <resource>
19                         <directory>src/main/prod-resources</directory>
20                     </resource>
21                     <resource>
22                         <directory>src/main/resources</directory>
23                     </resource>
24                 </resources>
25             </build>
26         </profile>
27     </profiles>
28 </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

原文地址:https://www.cnblogs.com/kischn/p/7287381.html