首先介绍一下什么是多环境?
一般我们项目开发的流程是:开发->测试->上线,根据不同的环境我们可能会有不同的配置文件(连接地址等),因此需要根据不同的环境打包出拥有不同配置文件的包。而为了打包出不同的包,我们可以在 maven 的 pom.xml 中进行相关的配置。
pom.xml
在pom.xml中添加如下profile的配置:
<profiles>
<!-- 本地环境 -->
<profile>
<id>local</id>
<properties>
<packageMode>local</packageMode>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<packageMode>test</packageMode>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>product</id>
<properties>
<packageMode>product</packageMode>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
准备不同的配置文件
在 src/main/resources,如下图:
不同环境的配置文件都在 profile 目录的子目录中,公用的配置文件直接放在 profile 目录下。
配置build标签
在build标签里面添加resources标签:
<finalName>${artifactId}-${packageMode}</finalName><!-- 按照我们的要求设置打包后的名字 -->
<resources>
<!-- 1. 排除profile文件 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>profile/**</exclude>
</excludes>
</resource>
<!-- 2. 添加激活的profile文件 -->
<resource>
<directory>src/main/resources/profile/${packageMode}</directory>
</resource>
<!-- 3. 添加公共的profile文件 -->
<resource>
<directory>src/main/resources/profile</directory>
<includes>
<include>*</include>
</includes>
</resource>
</resources>
使用与问题
使用
在打包之前,我们就可以通过修改 profile->activation->activeByDefault 的值,打包出具有不同配置文件的包了。
问题
父子Maven工程打包时,Maven报错:Non-resolvable parent POM for XXX,两种可能:
- 子pom文件的parent relativePath 写错,我的并没有错
<parent>
<groupId>com.moke</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1</version>
<relativePath>../demo-parent/pom.xml</relativePath><!-- 相对路径 -->
</parent>
- 父pom文件设置了 modules 没有先 install 一次会报错,注意父pom文件在install前需要把modules注释掉,在install后再解开,就可以 build 子项目了。
<modules>
<module>../../videodemo</module>
</modules>