1. 程式人生 > >maven專案常用技巧: profile與資源過濾

maven專案常用技巧: profile與資源過濾

一般的專案都會執行在不同的環境上,比如我們有本地環境、開發環境、測試環境、生產環境等等。這些不同的環境,必然有不同的配置。比如日誌級別,開發環境我們一般設定成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中的。