最近换了个新公司做java重构相关工作,这个公司的项目都没有没有做多环境打包配置,每次发布一个环境都要手动的去修改配置文件。
解决这个问题的方式有很多,我这里挑选了一个个人比较喜欢的方案,通过 maven profile 打包的时候按照部署环境打包不同的配置,下面说下具体的操作。
配置不同环境的配置文件
建立对应的环境目录,我这里有三个环境分别是,local/test/online 对应 开发/测试/生产。建好目录后将相应的配置文件放到对应的环境目录中
配置 pom.xml 设置 profile
这里通过 activeByDefault
将开发环境设置为默认环境。如果你是用 idea 开发的话,在右侧 maven projects > Profiles 可以勾选对应的环境。
<profiles>
<profile>
<id>local</id>
<properties>
<profile.active>local</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
<profile>
<id>online</id>
<properties>
<profile.active>online</profile.active>
</properties>
</profile>
</profiles>
打包时根据环境选择配置目录
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}/classes</targetPath>
<includes>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
<!-- 根据env部署环境值,把对应环境的配置文件拷贝到classes目录 -->
<resource>
<directory>src/main/resources/${profile.active}</directory>
<targetPath>${project.build.directory}/classes</targetPath>
<includes>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
最后根据环境打包
## 开发环境打包
mvn clean package -P dev
## 测试环境打包
mvn clean package -P test
## 生产环境打包
mvn clean package -P pro
执行完后发现 dev 目录下的文件已经打包到 resource下