日常工作中,发布的环境一般分为 dev, test, product。 不同的环境中的配置不一样(数据库连接,服务地址等),每次编译之后再改也是很麻烦。
maven可以设置profile,然后根据active的profile加载相应的配置文件。
下面就介绍下如何来配置。
首先来张资源的图
(1),在pom.xml配置<profiles>节点,如下图,配置了dev,test,prod这3个profile,其中dev为默认激活的(意思是如果你在打包时,没有使用-P参数指定profile,就使用默认激活的profile)
有3点要注意的:
1. <id>是profileid, 打包时选择profile就是使用-Pprofileid
2. 如何激活dev, 在dev的profile中添加<activation> <activeByDefault>true</activeByDefault></activation>
3. 每个profile中要配置 <properties><profileActive>替换字符串</profileActive></properties>,这里的替换字符串用于在下面的步骤中根据不同的profile替换成不同的内容。profileActive这个是属性的名称,可以改成其他的,只要跟下面匹配的地方一致
(2),在pom.xml配置<build><resources>节点,如下图,我这里配成了src/main/resources/${profileActive}, 在打包的时候,选择一个profile(如dev),就会被替换成所配置的属性的值(dev就会被替换成src/main/resources/dev111)
需要注意的是:
1,使用<directory>节点指定要拷贝哪个路径下的文件夹或者文件
2,黄框中的字段要跟profile中的属性名一致。
注意: 我替换的是文件夹的全称, 其实可以替换部分文件夹名,或者文件名,这里只是做了个字符串的替换而已。以下是几个例子
1. 替换部分文件夹名: src/main/resources/${profileActive}_config , dev会替换成 src/main/resources/dev111_config
2.替换部分文件名: src/main/resources/application-${profileActive}.properties , dev会替换成 src/main/resources/application-dev111.properties
(3),然后就可以运行 mvn clean package -Pdev, maven就会把devprofile配置的dev111文件夹中的文件拷贝到class path目录下。
(4), <build><resources>节点下可以包含多个<resource>节点, maven会把每个<resource>节点指定的内容全部拷贝到指定的目录(见下面targetPath)
(5), <resource>节点包含5个子节点
1.directory, 需要拷贝的资源文件的路径
2.targetPath, 拷贝到class path下面的哪个路径下(相对于class path 根目录的相对路径),如果不写就默认拷贝到class path的根目录
3.excludes, 可以过滤掉资源目录下的某些文件夹或某些文件
4.includes, 这个我没搞明白是什么意思,我的想法是在excludes的文件夹中include部分文件吧,如果哪位大神知道求指导
5.filtering, 如果设置为true,就会把指定的${key}替换掉。