Maven实现不同环境配置文件多环境打包

454 阅读1分钟

Maven实现不同环境配置文件多环境打包


前言

项目有开发、测试、生产至少有这三个环境,所需要的配置信息肯定不一样,所以打包的时候可以指定使用哪一个配置文件。

资源目录

#app.properties
app.id=${app.id}
apollo.bootstrap.enabled=${apollo.bootstrap.enabled}
apollo.meta=${apollo.meta}
apollo.bootstrap.namespaces=${apollo.bootstrap.namespaces}
#application-${env}.properties
app.id=xxx
apollo.bootstrap.enabled=xxx
apollo.meta=xxx
apollo.bootstrap.namespaces=xxx

如测试环境使用:mvn clean package -Ptest,这时候的env的值就是test,打包的时候src/main/resources下的配置文件app.properties中的占位符 {env}的值就是test,打包的时候src/main/resources下的配置文件app.properties中的占位符{}中的参数将会被application-test.properties对应参数替换


配置pom信息

pom.xml
  
    <build>
        <filters>
            <filter>src/main/resources/application-${env}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <profiles>
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
                <fName>test</fName>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
                <fName>dev</fName>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <env>prod</env>
                <fName>prod</fName>
            </properties>
        </profile>
    </profiles>

打包

mvn clean package -Pdev

说明

profiles 定义了各个环境的变量 id , filters 中定义了变量配置⽂件的地址,其中地址中的环境变量就是上⾯ profile 中定义的值, resources 中是定义哪些⽬录下的⽂件会被配置⽂件中定义的变 量替换。 通过maven可以实现按不同环境进⾏打包部署,例如:mvn package -Pdev -Dmaven.test.skip=true 表示打包本地环境,并跳过单元测试