背景
在资源有限的时候,我们希望可以在一台服务器上挂载多个环境。例如测试环境,开发环境。
土豪就不要问为什么了....
一般的提议都是有两种方式:
1、使用docker镜像,进行虚拟划分。这样做的好处是可以分别运行在不同的环境,但是问题就是配置繁琐,每个都需要配置。工作量还是不小。
2、使用不同的包名。资源可以共享,只要一个配置包就可以搞定了。但是问题的是打包的时候需要分别打不同的包,否则启动还是比较麻烦。
如果一个jar包,可以根据配置文件,我们可以打出不同后缀的包,是不是就可以解决这个问题了呢?
下面我们讲下如何使用maven根据不同的环境配置,打出不同名字的包。
如何打不同的包
了解下打包原理
在maven中,所有的操作命令都是依赖pom.xml文件中的配置。
所以,打包这个命令也是在pom.xml中。我们先看下pom.xml常见格式。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
</parent>
<artifactId>XX.XX.XX</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<properties>
</properties>
<dependencies>
</dependencies>
<profiles>
</profiles>
<build>
</build>
</project>
我们可以看到,在pom.xml文件中有个build一级属性。
这个命令就是用来进行编译打包使用 的。
在这个属性节点下,有个fileName属性,这个里面的内容XX就是生成后的jar包名
<finalName>XX</finalName>
既然找到对应的生成包名的节点了,那么修改就简单多了,只是需要根据条件,把包名进行拼接就可以了。
如何打不同的包名
顺便提醒下,pom文件是可以使用变量来操作的。
格式如下
${变量名}
那这样操作就简单多了
生成不同包名的解决思路
<finalName>XX-${变量名}</finalName>
理论是没有问题了,那么剩下的就是怎么和profile关联起来了
包名如何和配置文件关联
这步相对比较简单,我们只要把变量名和对应的变量名扯上关系就可以了。
<profiles>
<id>local</id>
<properties>
<--变量名-->
<jarName>local</jarName>
</properties>
</profiles>
在这里我们定义了变量名jarName(这个名字看你喜欢,随便取)。
然后
<finalName>XX-${jarName}</finalName>
这就完成了。profile这个地方不细讲,和这个问题关联不是很大。有兴趣的可以自己百度。
总结
这个地方最重要的是对pom文件的一些操作命令需要比较熟悉,然后其他的就相对来说比较简单了。