日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven学习笔记(四)profile的使用

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven学习笔记(四)profile的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

背景

配置

生產中的使用

.properties讀取pom中變量


背景

在開發過程中,我們的項目會存在不同的運行環境,比如開發環境、測試環境、生產環境,而我們的項目在不同的環境中,有的配置可能會不一樣,比如數據源配置、日志文件配置、以及一些軟件運行過程中的基本配置,那每次我們將軟件部署到不同的環境時,都需要修改相應的配置文件,這樣來回修改,很容易出錯,而且浪費勞動力。而maven的profile機制可以很好的解決上述問題。

配置

先來看一組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>

上面子節點的具體含義

id:profile的唯一標識,可用于命令行激活,如,mvn pacakge -Pmyid,即打包時指定使用id為myid的profile

activation:激活器,定義了自動觸發此profile的條件邏輯

properties:自定義的可以在整個POM中作為替換使用的字段,如果啟用,通常用作過濾器。格式是<name>value</name>

只介紹這三個,再對activation的子節點介紹一下:

activeByDefault:設為true,此profile將默認被激活,除非另一個profile激活通過命令行-P的方式或被其激活器激活

生產中的使用

在生產環境中,經常會遇到微服務各個模塊升級版本以及不同環境打snapshot/release jar包的問題,那么是如何解決以上兩類問題的呢

  • 子模塊升級版本保持版本統一

項目中的目錄結構如上圖所示

父pom

可以看到父pom是通過${}的方式,找到了profile文件中revision所需依賴的版本,所依賴的版本再找到<properties>標簽中具體的指向。

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實體的依賴

<dependency><groupId>com.ziroom.crm</groupId><artifactId>crm-user-service-consumer</artifactId><version>${project.version}</version></dependency>

可以看到遵循了這樣一種方式

由此就可以實現,父pom中改動一處版本,子模塊跟著升級

<properties> <snapshot_version>1.7.2-SNAPSHOT</snapshot_version><release_version>1.7.2</release_version></properties>
  • 區分環境

maven支持 mvn compile -Ptest的方式進行指定profile環境的編譯,但是到了生產環境是如何編譯的呢,我們公司采用的是omega平臺集成了maven命令

測試環境

?

生產環境

?

根據以上的配置就可以在不同環境做區分。

項目現在的配置是發布后自動打出jar包,所以只需要在測試環境指定

<snapshot_version>xxxxxx-SNAPSHOT</snapshot_version>

在生產環境指定

<release_version>xxxxx</release_version>

就可以分別生成snapshot/release版本的jar包,并根據后綴名分別上傳到不同的倉庫。

.properties讀取pom中變量

想要在.properties完成下面的效果,

先要引入maven-resources-plugin插件?

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><!-- 在構建路徑中 指定源文件編譯的字符編碼 --><encoding>UTF-8</encoding></configuration></plugin> </plugins>

上述插件的作用是替換掉.properties中的占位符,詳細功能請參考maven-maven-resources-plugin插件使用 - 意猶未盡 - 博客園

配合profiles文件使用時,則在確定具體環境后,會從pom文件中找到<properties>標簽,再找到對應的<env.name>標簽替換掉.properties中的${env.name}。

pom文件 <profiles><profile><id>env.dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><env.name>dev</env.name><log.console>&lt;appender-ref ref="CONSOLE"/&gt;</log.console></properties></profile><profile><id>env.test</id><properties><env.name>test</env.name></properties></profile></profiles>

總結

以上是生活随笔為你收集整理的maven学习笔记(四)profile的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。