Maven根据不同的环境打包不同的配置
前言:
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置等等。
那么就需要借助maven提供的profile功能,通过不同的环境激活不同的profile来实现“maven根据不同的运行环境,打包不同的配置文件”的目的。
一、原理
利用filter实现对资源文件(resouces)过滤
maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value
利用profile来切换环境
maven profile可使用操作系统信息,jdk信息,文件是否存在,属性值等作为依据,来激活相应的profile,也可在编译阶段,通过mvn命令加参数 -PprofileId 来手工激活使用对应的profile
结合filter和profile,我们就可以方便的在不同环境下使用不同的配置
二、pom配置
<profiles> <profile> <id>cluster</id> <activation> <property> <name>node</name> </property> </activation> <build> <finalName>ota</finalName> <filters> <filter>${project.basedir}/src/cluster/nodes/${node}.properties</filter> </filters> <resources> <resource> <targetPath>${project.basedir}/target/${project.build.finalName}</targetPath> <filtering>true</filtering> <directory>${project.basedir}/src/main/sca-resources</directory> <includes> <include>META-INF/**/*.composite</include> <include>definitions.xml</include> </includes> </resource> <resource> <targetPath>${project.basedir}/target/${project.build.finalName}/WEB-INF/classes</targetPath> <filtering>true</filtering> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>policy</include> </includes> </resource> </resources> </build> </profile> </profiles>
- activation:在activation元素中指定激活条件
- property:当maven检测到property(pom中如${name}这样的)profile将被激活 无论取任何值,都会触发
执行打包命令
手工编译,打包:maven clean package -Ptest 激活id="test"的profile
install 和 package命令的区别
1.install:打包好的 jar 包会安装到本地的 maven 仓库中,使用的配置是默认的配置,供其他项目使用。
2.package 指定参数打包:clean package -Dmaven.test.skip=true -Pprod 这种方式就是指定了打包的参数,并且打包后的文件存放到项目的 target 目录下。