Maven打包時自動選擇不同的配置(利用profile和filter外掛)
阿新 • • 發佈:2019-02-07
專案開發時,一般都會部署到兩套以上不同的環境中(比如開發環境和生產環境)。打包的時候需要修改配置檔案中的很多資訊、或替換不同的配置檔案,很容易出錯而且不方便。下面舉例介紹如何利用Maven的profile和filter外掛來解決這個問題——為不同環境打包前自動修改配置檔案中的內容:
假設有兩個環境:- 開發環境
- 生產環境
第一步:為兩個不同的環境建立兩個配置檔案,作為其他配置檔案實際內容的來源
- development.properties,內容為:
- production.properties,
第二步:在其他公用配置檔案(.properties, .xml, etc.)中,使用${}來引用上面定義的值,如:
db.url=${db.url}
<bean id="testService" class="com.xjj.service.impl.TestServiceImpl">
<property name="url" value="${db.url}"></property>
</bean>
第三步:在POM檔案中定義兩個profile
<project> ... <!-- 選擇不同的屬性為resource中的變數賦值。development:開發環境,production:生產環境 --> <profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <filters> <filter>src/main/resources/profile/development.properties</filter> </filters> </build> </profile> <profile> <id>production</id> <build> <filters> <filter>src/main/resources/profile/production.properties</filter> </filters> </build> </profile> </profiles> ... </project>
第四步:在POM檔案中定義需要被替換的檔案,並使用filter
<project> ... <build> ... <!-- 啟用filtering功能為resources中的變數賦值 --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
第五步:在MyEclipse中新增兩個Maven Build快捷方式 Run -> Run Configurations... -> Maven Build Base directory: Browse Workspace...選擇當前專案 Goals中填入:
- 開發環境:package -Pdevelopment
- 生產環境:package -Pproduction
- 開發環境:clean package -Pdevelopment -Dmaven.test.skip=ture
- 生產環境:clean package -Pproduction -Dmaven.test.skip=ture
第六步:打包 分別執行這兩個Maven Build,檢視生成的jar或war包,就可以看到第二步配置檔案中的變數已經被替換成development.properties或production.properties中的內容了。
注1:如果其他目錄中有需要打包的xml檔案(比如MyBatis的mapper.xml檔案),需要另外指定,不然Maven預設不會打包: <resources>
……
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
注2:如果resources資料夾中有二進位制檔案,需要排除在filter之外(先exclude,後面再單獨在一個resource中宣告),不然可能會搞壞它:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.p12</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.p12</include>
</includes>
</resource>
</resources>
具體的全部程式碼請參考:https://github.com/xujijun/MyJavaStudio
(原創文章,轉載請註明轉自Clement-Xu的部落格:http://blog.csdn.net/clementad/article/details/43603441)