maven学习笔记(四)profile的使用
目錄
背景
配置
生產(chǎn)中的使用
.properties讀取pom中變量
背景
在開發(fā)過程中,我們的項(xiàng)目會存在不同的運(yùn)行環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,而我們的項(xiàng)目在不同的環(huán)境中,有的配置可能會不一樣,比如數(shù)據(jù)源配置、日志文件配置、以及一些軟件運(yùn)行過程中的基本配置,那每次我們將軟件部署到不同的環(huán)境時,都需要修改相應(yīng)的配置文件,這樣來回修改,很容易出錯,而且浪費(fèi)勞動力。而maven的profile機(jī)制可以很好的解決上述問題。
配置
先來看一組profile配置
<profiles><profile><id>test</id><properties><revision>${snapshot_version}</revision></properties></profile><profile><id>prod</id><properties><revision>${release_version}</revision></properties><activation><activeByDefault>true</activeByDefault></activation></profile></profiles>上面子節(jié)點(diǎn)的具體含義
id:profile的唯一標(biāo)識,可用于命令行激活,如,mvn pacakge -Pmyid,即打包時指定使用id為myid的profile
activation:激活器,定義了自動觸發(fā)此profile的條件邏輯
properties:自定義的可以在整個POM中作為替換使用的字段,如果啟用,通常用作過濾器。格式是<name>value</name>
只介紹這三個,再對activation的子節(jié)點(diǎn)介紹一下:
activeByDefault:設(shè)為true,此profile將默認(rèn)被激活,除非另一個profile激活通過命令行-P的方式或被其激活器激活
生產(chǎn)中的使用
在生產(chǎn)環(huán)境中,經(jīng)常會遇到微服務(wù)各個模塊升級版本以及不同環(huán)境打snapshot/release jar包的問題,那么是如何解決以上兩類問題的呢
- 子模塊升級版本保持版本統(tǒng)一
項(xiàng)目中的目錄結(jié)構(gòu)如上圖所示
父pom
可以看到父pom是通過${}的方式,找到了profile文件中revision所需依賴的版本,所依賴的版本再找到<properties>標(biāo)簽中具體的指向。
consumer子pom中的繼承
<parent><artifactId>crm-user-service</artifactId><groupId>com.ziroom.crm</groupId><version>${revision}</version></parent>provider中子pom的繼承
<parent><artifactId>crm-user-service</artifactId><groupId>com.ziroom.crm</groupId><version>${revision}</version></parent>provider中對consumer實(shí)體的依賴
<dependency><groupId>com.ziroom.crm</groupId><artifactId>crm-user-service-consumer</artifactId><version>${project.version}</version></dependency>可以看到遵循了這樣一種方式
由此就可以實(shí)現(xiàn),父pom中改動一處版本,子模塊跟著升級
<properties> <snapshot_version>1.7.2-SNAPSHOT</snapshot_version><release_version>1.7.2</release_version></properties>- 區(qū)分環(huán)境
maven支持 mvn compile -Ptest的方式進(jìn)行指定profile環(huán)境的編譯,但是到了生產(chǎn)環(huán)境是如何編譯的呢,我們公司采用的是omega平臺集成了maven命令
測試環(huán)境
?
生產(chǎn)環(huán)境
?
根據(jù)以上的配置就可以在不同環(huán)境做區(qū)分。
項(xiàng)目現(xiàn)在的配置是發(fā)布后自動打出jar包,所以只需要在測試環(huán)境指定
<snapshot_version>xxxxxx-SNAPSHOT</snapshot_version>在生產(chǎn)環(huán)境指定
<release_version>xxxxx</release_version>就可以分別生成snapshot/release版本的jar包,并根據(jù)后綴名分別上傳到不同的倉庫。
.properties讀取pom中變量
想要在.properties完成下面的效果,
先要引入maven-resources-plugin插件?
<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><!-- 在構(gòu)建路徑中 指定源文件編譯的字符編碼 --><encoding>UTF-8</encoding></configuration></plugin> </plugins>上述插件的作用是替換掉.properties中的占位符,詳細(xì)功能請參考maven-maven-resources-plugin插件使用 - 意猶未盡 - 博客園
配合profiles文件使用時,則在確定具體環(huán)境后,會從pom文件中找到<properties>標(biāo)簽,再找到對應(yīng)的<env.name>標(biāo)簽替換掉.properties中的${env.name}。
pom文件 <profiles><profile><id>env.dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><env.name>dev</env.name><log.console><appender-ref ref="CONSOLE"/></log.console></properties></profile><profile><id>env.test</id><properties><env.name>test</env.name></properties></profile></profiles>總結(jié)
以上是生活随笔為你收集整理的maven学习笔记(四)profile的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决vscode下载速度太慢的问题
- 下一篇: 如何查看手机绑定过的网站或者APP:注销