Maven打不同环境的包(排除了不需要的配置文件)

简介:

在开发中我们经常会根据不同的发布环境建立对应的配置文件,然后在打包的时候指定哪个文件生效。但是通常的做法是在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,打包后的目录为:
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值