Maven Filter與Profile隔離生産環境與開發環境
在不同的開發階段,我們一般用到不同的環境,開發階段使用開發環境的一套東西,測試環境使用測試環境的東西,可能有多個測試環境,生産環境使用的是另外一套,生産環境要求是最嚴格的。
不同環境,所需要的伺服器位址,資料庫,緩存,配置中心等配置一般不同,如果每次切換環境都要手動修改,那就太麻煩了,好在使用Maven可以幫我們做這些事情。
介紹
- Filter: 過濾,一般配合maven resource插件使用,可以替換maven資源目錄下的文本檔案中變量為我們設定的值,變量使用${}包起來。
- Profile: 側面,可以了解為某個角度,盲人摸象角度不同得出的結論也不同,配置不同的profile,就像從不同的角度看待一個東西,得出的結果不一樣。在開發中指:“環境”
案例
Filter的使用
- 建立一個maven項目,現在IDE建立項目步驟都非常簡單
- 在resource目錄下建立一個任意檔案,我們建立檔案名為 application.properties檔案,内容隻有一行
app.name=${maven.app.name}
- 在main目錄下建立filters目錄,然後建立一個dev.properties檔案,裡面也隻有一行内容,如下:
maven.app.name=aihe-dev
- 配置pom.xml,編譯部分如下:
<build> <filters> <!-- 指定過濾變量的位置 --> <filter>src/main/filters/dev.properties</filter> </filters> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <!-- 使用預設的變量标記方法即${*} --> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <!-- 啟用過濾 --> <filtering>true</filtering> </resource> </resources> </build>
- 現在的目錄結構如下:

image.png
- 編譯運作檢視效果。
mavn clean compile
profile使用
- 上面我們可以看到,filter是生效的,但是如果隻是這樣用,那麼功能太簡單了點,是以還要加上profile.
- 修改pom.xml,并且添加profile,我們配置了兩個profile,一個dev預設是激活狀态,一個pro
<build>
<filters>
<!-- 指定過濾變量的位置 -->
<filter>src/main/filters/${env}.properties</filter>
</filters>
<!-- ...與剛才的内容相同 -->
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
- 添加pro.properties,key和dev.properties中的key相同,内容如下:
maven.app.name=aihe-pro
- 運作檢視效果,maven指令行的-P參數指定使用profile
// 指定profile為pro時候,可以看到application.properties檔案中的内容為maven.app.name=aihe-pro
mvn clean compile -P pro
//profile為dev的時候,檔案中的内容為maven.app.name=aihe-dev
mvn clean compile -P dev
到這一步基本完事,在實際開發中涉及的環境比較多就多配置幾個,這是目前項目配置的環境,好幾個
結束
maven作為常用的工程化管理工具,常見的開發功能還是有必要掌握的