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中的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章