基本概念說明(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進行配置, 參考地址