maven專案常用技巧: profile與資源過濾
阿新 • • 發佈:2019-01-07
一般的專案都會執行在不同的環境上,比如我們有本地環境、開發環境、測試環境、生產環境等等。這些不同的環境,必然有不同的配置。比如日誌級別,開發環境我們一般設定成debug,而生產環境一般設定成warn。我們肯定不希望:手動修改專案配置檔案,然後才打包釋出到不同的環境。
這個時候我們可以使用maven的profile,在pom.xml中為不同的環境配置不同的profile。
<project> <profiles> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <zoo.url>172.17.103.107:2181</zoo.url> <log.level>DEBUG</log.level> </properties> </profile> <profile> <id>dev</id> <activation> <activeByDefault>false</activeByDefault> </activation> <properties> <zoo.url>172.17.103.108:2181</zoo.url> <log.level>INFO</log.level> </properties> </profile> </profiles> </project>
如果我們需要打本地環境的包,可以啟用本地環境的profile:
如果我們需要打開發環境的包,可以啟用開發環境的profile:
可以看到:我們只需要執行不同的打包指令碼,就可以打出不同環境需要的包,而不需要去修改專案中的配置檔案,這就是profile的作用。
那什麼是maven的資源過濾?很簡單,上面我們為本地環境和開發環境配置了不同的profile,我們程式碼怎麼去讀取這些配置的值呢?我們可以定義一個config.properties,放在src/main/resources/下面:
zoo.url=${zoo.url}
log.level=${log.level}
接下來我們需要在pom.xml中開啟資源過濾:目的是為了讓maven將檔案中的佔位符替換成實際值。<build> <!-- 替換配置檔案中的資料項 start --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> </testResource> </testResources> <!-- 替換配置檔案中的資料項 end --> </build>
如果我們啟用本地環境的profile,可以看到最終構建出的config.properties內容如下:
如果我們啟用開發環境的profile,可以看到最終構建出的config.properties內容如下:
通過maven的profile和資源過濾,我們只需要在不同的環境啟用對應的profile,配置資訊就會自動改變,不需要我們取修改專案中的程式碼或者配置檔案,所有變數都是定義在pom.xml中的。