序言

当项目有多个运行环境需要打包发布时,每次手动修改配置文件未免太过劳累,尤其是做了服务拆分的项目,比如博主这边的这个项目有4个服务需要配置三个环境:本地、测试、生产。每次本地修改完代码,还需要打包测试环境,生产环境,修改配置文件操作过余繁琐,一般思路都是多个配置文件,打包时使用maven根据需要来进行对应环境的打包,下面贴下具体操作。

一、Maven实现多环境jar打包

spring boot 配置maven包仓库地址 maven springboot打包配置_spring boot

这是我们的示例工程,一个project里面有三个子模块。 

然后加上一些相关的配置,springboot jar依赖和resources里的配置文件,这里为了演示我们准备三个配置文件。resources文件夹下有两个prod、test分别放置生产环境和测试环境的同名配置文件,resources目录下默认的配置文件则为开发环境。

spring boot 配置maven包仓库地址 maven springboot打包配置_配置文件_02

 接下来统一在父级工程的pom下配置打包插件,来进行自定义的配置文件重写。

<profiles>
        <!-- 这里是你定义的环境可选项,下面罗列了有两种 生产环境选项、测试环境选项 -->
        <profile>
            <id>prod</id>
            <properties>
                <package.environment>prod</package.environment>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <package.environment>test</package.environment>
            </properties>
        </profile>
</profiles>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!-- 重写属性为true 表示相关的配置文件会被重写 -->
                            <overwrite>true</overwrite>
                            <outputDirectory>${project.build.outputDirectory}                </outputDirectory>
                            <resources>
                                <resource>
                         <!-- 指明需要重写文件所在的目录,这里读取的就是上面定义的可选项 -->
                                    <directory>src/main/resources/${package.environment}</directory>
                                    <filtering>false</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

在父级pom文件中的project标签中加入以上配置,如果maven提示错误,则删掉注释文字。

上面的 maven-resources-plugin 插件可以帮助我们在maven打包的编译期根据我们指定的环境选项来替换掉相应的文件,现在还有一个问题就是我们上述为了实现环境选项的可选,在resources文件目录下新增了两个原本没必要的文件夹,所以我们需要剔除这两个文件夹。

剔除用到的maven插件为 maven -jar -plugin

额外在父级工程下再引入该插件,剔除我们不需要打包进去的两个配置文件夹

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <excludes>
                        <!-- 这个路径是项目artifact 编译class后的路径开始算起的 -->
                        <exclude>/**/prod/**</exclude>
                        <exclude>/**/test/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

同样,如果以上配置存在maven报错,删掉注释文字。

这样我们就完成了整体配置,下面来打包测试一下。

spring boot 配置maven包仓库地址 maven springboot打包配置_jar_03

 这样因为没有输入环境选项参数,就是普通的打包,也就是我们默认的开发环境打包。

spring boot 配置maven包仓库地址 maven springboot打包配置_maven_04

 

spring boot 配置maven包仓库地址 maven springboot打包配置_配置文件_05

spring boot 配置maven包仓库地址 maven springboot打包配置_maven_06

 

解压打包后的jar可以发现默认的环境为 dev 开发环境。

使用环境选项参数打包,在原有的打包基础命令上添加 -P参数,参数后面跟的选项就是我们上面配置好的环境选项参数,这里以生产环境为示例。

mvn clean package -Pprod

 

spring boot 配置maven包仓库地址 maven springboot打包配置_maven_07

spring boot 配置maven包仓库地址 maven springboot打包配置_spring boot_08

 

 打包后的配置文件即为生产环境下的配置文件了。

二、Gitee示例工程

 以上示例工程代码,已上传gitee,有需要的话可自行尝试。