之前有学习过,maven对于多环境打包的内容,但是当时还没有进入工作没能怎么理解为啥有个多环境的问题。前几天接到了一个公司老项目要进行开发-测试-实施三个环境的多环境打包任务。
为啥要这么做
可能在没有真正到企业工作没法了解到多环境的问题。因为在私下里自己写项目,也就是自己一个人在编辑器上倒腾。可能测试部署都是这一个文档内的东西在做。但是实际上在公司内,肯定是多人进行着代码维护:开发-测试-实施。这个时候就有下面的场景:
我们码代码的,写完代码提交上去一个版本,测试人员需要一个测试环境进行测试,那就需要打一个测试的包,就需要去修改数据库以及一些中间件的配置文件。然后如果测试通过了,又要打成正式部署的包,又要进行一轮的配置修改(想着都头大)
而这个时候就可以运用maven进行三种环境的提前配置,然后打包时,选择性的打包就方便很多了。
具体步骤
1.创建配置文件对应的目录,
在resources目录下创建一个env文件夹(命名可根据自己习惯,这里是environment缩写而成),然后在env文件夹下面创建dev、test、prod三个环境目录。这三个目录里面分别存放这三个环境索要依赖的配置文件(差别主要在于文件读取路径,数据库连接路径等)
2.修改pom文件
- 添加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。