ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
引用:韩晓彤 ## 持续集成-maven区分环境打包.md ## maven区分环境打包 ### 1.解决了什么问题? 我们经常会碰到,一套程序需要部署到生产,测试,开发三套甚至更多的环境上。 在maven打包的时候,就需要根据不同的环境,修改配置文件的属性。导致效率很地下,而且很容易出错! 那么有没有可以在打包的时候,根据命令不同,自动的切换到目标环境的配置呢? 答案的当然是有的! ### 2.效果什么样? ` mvn install -P[profile的id属性值] ` * 执行` mvn install -Pdev ` 打出来的包,可用于部署到开发环境。 * 执行` mvn install -Pqa ` 打出来的包,可用于部署到测试环境。 * 执行` mvn install -Pprod ` 打出来的包,可用于部署到开发环境。 ### 3.如何实现? #### 3.1原理 本文采用的是maven提供的占位符属性替换的方式实现的。即: * 针对每一个环境,建立一组配置文件,如图filter文件夹中的内容。 * 举例:在dev(开发)环境下,在打包时用timingdb-dev.properties中的属性值,替换timingdb.properties中的属性值。 > 注意是文件中属性值替换,不是文件整体替换 #### 3.2如何实现属性值替换?使用占位符 * 被替换的文件中的属性,如:timingdb.properties * 环境源配置文件中的属性,如:timingdb-dev.properties #### 3.3 如何配置maven * 全局build配置,主要是决定哪些配置文件中的占位符需要被替换!哪些文件不进行占位符属性替换!`<filtering>false/true</filtering>` ```xml <build> …… <resources> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.xml</include> <include>**/*.bpmn</include> <include>**/*.pdf</include> <include>**/*.cab</include> <include>**/*.docx</include> <include>**/*.doc</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> <include>**/*.conf</include> </includes> </resource> </resources> </build> ``` * 分环境build配置,主要用于说明: 1. 环境的唯一标志:id(用于打包命令) 2. 用哪些文件中的属性去替换:filter配置 > activeByDefault:true是指在不指定-P情况下打包的默认profile选择项! ```xml <profiles> <profile> <id>dev</id> <build> <filters> <filter>src/main/resources/filters/timingdb-dev.properties</filter> <filter>src/main/resources/filters/fdfs_client-dev.conf</filter> </filters> </build> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>qa</id> <build> <filters> <filter>src/main/resources/filters/timingdb-qa.properties</filter> <filter>src/main/resources/filters/fdfs_client-qa.conf</filter> </filters> </build> </profile> <profile> <id>prod</id> <build> <filters> <filter>src/main/resources/filters/timingdb-prod.properties</filter> <filter>src/main/resources/filters/fdfs_client-prod.conf</filter> </filters> </build> </profile> </profiles> ```