简介:
在开发中我们经常会根据不同的发布环境建立对应的配置文件,然后在打包的时候指定哪个文件生效。但是通常的做法是在application.yml中通过spring.profiles.active指定哪个文件激活,但是这样会把所有相关的配置文件都打入最后的部署包中,如果遇到非常保密的情况就很不合适了。这里我们会只将激活的文件打入包内,不相关的不会放入最后的部署包内。
操作:
<1> 建立对应的配置目录
这里先看一下我们的目录结构:

这里我在src/main/resources目录下建立了filters目录,里面建立了不同环境的目录,每个目录下有该环境对应的配置文件,文件名格式为application-xxx.yml。可以放置在不同目录,也可以命名成其他文件名,只要后边的配置与之对应即可。
<2> 修改maven的pom.xml配置
然后修改pom.xml文件,添加打包插件:
<properties>
<package.env>dev</package.env>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/filters/${package.env}</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<excludes>
<exclude>/filters/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<packagingExcludes>WEB-INF/classes/filters/**</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
说明
这里定义了一个属性package.env用于区分不同环境
①maven-resources-plugin插件负责将src/main/resources/filters/${package.env}目录下的文件拷贝到${project.build.outputDirectory}目录下即打包后的输出目录中
②maven-jar-plugin在打成jar时生效,负责将打包后的目录中的filters目录删除,因为我们的filters目录是存放在src/main/resources下面的,默认该目录下的文件都会被打入部署包中,在这里我们通过exclude将其排除(这里要注意exclude中写的是相对于打包后的目录)
③maven-war-plugin插件与②中的maven-jar-plugin插件类似,只不过他是在打成war包时生效,同样需要注意packagingExcludes中的目录写法
<3> 修改配置
最后看看我们application.yml中的配置:

这里的package.env对应我们在pom.xml中配置的属性。
以后打不同环境的包,只需要将pom.xml中的package.env属性值修改成对应的目录即可
(比如我这里的dev、test)
<4> 测试
将pom.xml中的package.env属性改为dev,打包后的目录为:

将pom.xml中的package.env属性改为test,打包后的目录为:

本文介绍了一种在Maven项目中,根据不同环境动态选择并仅打包所需配置文件的方法,避免了敏感信息的不当暴露。
4877

被折叠的 条评论
为什么被折叠?



