基本概念说明(resources、filter和profile):html
在咱们日常的java开发中,会常常使用到不少配制文件(xxx.properties,xxx.xml),而当咱们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,须要不停的去修改这些配制文件,次数一多,至关麻烦。如今,利用maven的filter和profile功能,咱们可实如今编译阶段简单的指定一个参数就能切换配制,提升效率,还不容易出错,详解以下。java
maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}
进行替换,最终把你的资源文件中的username=${key}
替换成username=valueweb
maven profile可以使用操做系统信息,jdk信息,文件是否存在,属性值等做为依据,来激活相应的profile,也可在编译阶段,经过mvn命令加参数 -PprofileId
来手工激活使用对应的profile spring
结合filter和profile,咱们就能够方便的在不一样环境下使用不一样的配制apache
profiles配置多环境加载资源文件的几种方式
首先,依据maven的项目结构, 在src->main->filters创建不一样环境资源文件目录, 放置资源文件mybatis
src/main/filters/dev/jdbc.properties -- 开发环境
src/main/filters/product/jdbc.properties -- 生产环境maven
profiles->profile->build-filters-filter加载指定资源文件对源文件进行属性替换测试
<build> <resources> <!-- 先指定 src/main/resources下全部文件及文件夹为资源文件 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> <!-- 过滤指定文件,如spring-mybatis.xml,文件中的${key}会被替换掉为真正的值 --> <resource> <directory>src/main/resources</directory> <includes> <include>spring-mybatis.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build> <profiles> <profile> <id>dev</id> <!-- 默认激活,使用dev目录中的属性文件来替换设置过滤的资源文件中的变量 --> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <filters> <filter>src/main/filters/dev/jdbc.properties</filter> </filters> </build> </profile> <profile> <id>product</id> <build> <filters> <filter>src/main/filters/product/jdbc.properties</filter> </filters> </build> </profile> </profiles>
profiles->profile->properties设置变量,build-filters-filter指定加载变量指定资源文件ui
<build> <resources> <resource> <directory>src/main/resources</directory> <!-- src/main/resources文件中所有开启过滤 --> <includes> <include>**/*</include> </includes> <filtering>true</filtering> </resource> <filters> <filter>src/main/filters/${package.environment}/jdbc.properties</filter> </filters> </resources> </build> <profiles> <profile> <id>dev</id> <!-- 默认激活,设置package.environment属性由filter引用 --> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <package.environment>dev</package.environment> </properties> </profile> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> </profiles>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <addMavenDescriptor>true</addMavenDescriptor> </archive> <warName>${project.build.finalName}</warName> <webResources> <resource> <directory>src/main/filters/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> </resource> </webResources> </configuration> <!-- 也能够在插件中设置filtering直接替换属性 <configuration> <filters> <filter>src/main/filters/${package.environment}/jdbc.properties</filter> </filters> <archive> <addMavenDescriptor>true</addMavenDescriptor> </archive> <warName>${project.build.finalName}</warName> <webResources> <resource> <directory>src/main/resources</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <resource> <directory>src/main/filters/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> </webResources> </configuration> --> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> </resources> </build> <profiles> <profile> <id>dev</id> <!-- 默认激活,设置package.environment属性由filter引用 --> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <package.environment>dev</package.environment> </properties> </profile> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> </profiles>
说明:spa
经过 -P 指定 profile
mvn clean package -DskipTests -Pproduct
不指定 profile 就默认打出的是开发环境的 war 包。
mvn package -DskipTests
前两种是在maven生命周期process-resources阶段,第三种是在package阶段,使用第三种方式应该注意src/main/resource目录下不能有被替换同名文件不然IDEA编译不经过;
也可使用spring profile进行配置, 参考地址