Maven设置多环境打包

932 阅读2分钟

之前有学习过,maven对于多环境打包的内容,但是当时还没有进入工作没能怎么理解为啥有个多环境的问题。前几天接到了一个公司老项目要进行开发-测试-实施三个环境的多环境打包任务。

为啥要这么做

可能在没有真正到企业工作没法了解到多环境的问题。因为在私下里自己写项目,也就是自己一个人在编辑器上倒腾。可能测试部署都是这一个文档内的东西在做。但是实际上在公司内,肯定是多人进行着代码维护:开发-测试-实施。这个时候就有下面的场景:

我们码代码的,写完代码提交上去一个版本,测试人员需要一个测试环境进行测试,那就需要打一个测试的包,就需要去修改数据库以及一些中间件的配置文件。然后如果测试通过了,又要打成正式部署的包,又要进行一轮的配置修改(想着都头大)

而这个时候就可以运用maven进行三种环境的提前配置,然后打包时,选择性的打包就方便很多了。

具体步骤

1.创建配置文件对应的目录,

在resources目录下创建一个env文件夹(命名可根据自己习惯,这里是environment缩写而成),然后在env文件夹下面创建dev、test、prod三个环境目录。这三个目录里面分别存放这三个环境索要依赖的配置文件(差别主要在于文件读取路径,数据库连接路径等)

2.修改pom文件

  1. 添加profiles标签
        <profiles>
                <profile>
                        <id>dev</id>
                        <properties>
                                <project-env>dev</project-env>
                        </properties>
                        <activation>
                                <activeByDefault>true</activeByDefault><!--此处将dev设置为默认环境-->
                        </activation>
                </profile>
                <profile>
                        <id>test</id>
                        <properties>
                                <project-env>test</project-env>
                        </properties>
                </profile>
                <profile>
                        <id>prod</id>
                        <properties>
                                <project-env>prod</project-env>
                        </properties>
                </profile>
        </profiles>

2.配置build标签

    <resources>
            <resource>
                    <directory>src/main/resources</directory><!--此处设置为上面在resources目录下创建的文件夹-->
                    <excludes>
                            <exclude>env/dev/*</exclude>
                            <exclude>env/test/*</exclude>
                            <exclude>env/prod/*</exclude>
                    </excludes>
                    <filtering>true</filtering><!--开启过滤器,此处不能忽略!-->
            </resource>
            <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                            <include>env/${project-env}/*</include>
                            <include>/*</inclu de>
                            <include>language/*</include>
                    </includes>
                    <filtering>false</filtering>
            </resource>
    </resources>

这个标签我一般习惯放置于finalName标签下面。到此,所有配置都已经完毕。

如果,你想打包的时候文件名称能够带上相应环境,那么将finalName标签配置如下即可:

    <finalName>${project.artifactId}-${env}</finalName>

最后,你可以使用 mvn package -Pdev打包出在开发环境下运行的文件,如果你想打包测试环境,生产环境,只需修改参数 -Ptest -Pprod。 注意:此处 -P为大写,后面参数为上面步骤配置的id。

image.png