1. 程式人生 > >Maven Filtering和Profile

Maven Filtering和Profile

Filtering

Filtering是resource外掛的功能,作用是將資原始檔中的佔位符替換成對應的值,如下圖所示: 在這裡插入圖片描述

使用注意

  1. 啟用resource外掛的filtering功能;
  2. 設定資原始檔的路徑、過濾條件和編碼等等;
  3. 設定屬性檔案來源(POM定義屬性和環境變數直接使用,外部屬性檔案通過標籤指定); 在這裡插入圖片描述

說明:maven-resources-plugin外掛的copy-resources功能被繫結到validate階段,即Lifecycle執行到validate時,資源被拷貝,佔位符被替換; 在這裡插入圖片描述

Profile

作用:根據不同的條件啟用不同的配置; 定義範圍:Profile幾乎可以定義所有在pom裡的定義的內容如、和外掛配置等等,如下所示:

<profile>
        <id>dev</id>
        <properties>
            <active.profile>dev</active.profile>
            <pom.jdbc.url>jdbc:mysql://127.0.0.1:3306/dev</pom.jdbc.url>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>3.2.4.RELEASE</version>
            </dependency>
        <dependencies>
      </profile>

Profile生效範圍

  1. 如果定義在settings.xml檔案中,則是全域性的,對所有的maven專案檔案都生效;
  2. 如果定義在pom.xml檔案中,則僅對當前專案生效;

Profile啟用方式

  • -P引數 通過maven 的-P引數啟用指定的profile,引數的值是profile的id,多個profile以逗號分割,如果不想啟用某個預設的profile,就在它的id前加個!,如下程式碼:
mvn -U clean package -Ptest,local,!ignore
  • <activation>
<profiles>
    <profile>
      <id>ide</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <module>ide</module>
      </properties>
    </profile>
    <profile>
      <id>api</id>
      <properties>
        <module>api</module>
      </properties>
    </profile>
  </profiles>

Filtering + Profile

思路: 在不同的profile裡配置不同的屬性(properties),然後啟用相應的profile,用其中的屬性去替換jdbc.properties裡的佔位符。 在這裡插入圖片描述

<project>
...
<build>
    <filters>
        <filter>src/main/filters-${active.profile}.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
                <filtering>true</filtering>
        </resource>
    </resources>
</build>
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <active.profile>dev</active.profile>
        </properties>
        <!-- 把當前profile設定為預設profile,可以同時這是多個為預設-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <active.profile>test</active.profile>
        </properties>
    </profile>
    <profile>
        <id>product</id>
        <properties>
            <active.profile>product</active.profile>
        </properties>
    </profile>
...
</project>

參考: