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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

maven(三)最详细的profile的使用

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven(三)最详细的profile的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 1. 原理
    • 2. 應用演示
      • 2.1 項目結構
      • 2.2 激活方式
        • 1. 通過maven命令參數
        • 2. 通過pom文件里的activation屬性
        • 3. settings.xml中使用activeProfiles指定(了解即可)

前言

? ? ? ?在開發過程中,我們的項目會存在不同的運行環境,比如開發環境、測試環境、生產環境,而我們的項目在不同的環境中,有的配置可能會不一樣,比如數據源配置、日志文件配置、以及一些軟件運行過程中的基本配置,那每次我們將軟件部署到不同的環境時,都需要修改相應的配置文件,這樣來回修改,很容易出錯,而且浪費勞動力。
? ? ? ?在前面的文章profile之springboot,springboot為我們提供了一種解決方案,而maven也提供了一種更加靈活的解決方案,就是profile功能。

1. 原理

1.1 先看一段pom文件中的profile定義

<profiles><profile><!--不同環境Profile的唯一id--><id>dev</id><properties><!--profiles.active是自定義的字段(名字隨便起),自定義字段可以有多個--><profiles.active>dev</profiles.active></properties></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profiles.active>test</profiles.active></properties></profile></profiles>

? ? ? ?可以看到定義了多個profile,每個profile都有唯一的id,也包含properties屬性。這里為每個profile都定義一個名為profiles.active的properties,每個環境的值不同。當我們打包項目時,激活不同的環境,profiles.active字段就會被賦予不同的值
1.2 結合resource屬性
? ? ? ?這個profiles.active字段可以應用到許多地方,及其靈活。可以在配置文件里被引用(參考此博客);也可以結合pom文件里的resource和filter屬性,作為文件名的一部分或者文件夾名的一部分,下面會詳細講解這個用法。

注意:maven的profile用法有許多種,但基本原理就是根據激活環境的不同,自定義字段被賦予不同的值。

2. 應用演示

2.1 項目結構

? ? ? ?這里定義了dev,prod,test三個文件夾,用來演示maven中profile的使用。注意,每個文件夾里還定義了application-{xxx}.properties件,這里相當于結合springboot的Profile的使用,是我比較推薦的方式,和本文maven的profile使用無關系,在application.properties都有spring.profiles.active=xxx去加載對應的application-{xxx}.properties。

pom文件里的關鍵配置為

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><executable>true</executable></configuration></plugin></plugins><resources><resource><directory>src/main/resources/</directory><!--打包時先排除掉三個文件夾--><excludes><exclude>dev/*</exclude><exclude>prod/*</exclude><exclude>test/*</exclude></excludes><includes><!--如果有其他定義通用文件,需要包含進來--><!--<include>messages/*</include>--></includes></resource><resource><!--這里是關鍵! 根據不同的環境,把對應文件夾里的配置文件打包--><directory>src/main/resources/${profiles.active}</directory></resource></resources></build><profiles><profile><!--不同環境Profile的唯一id--><id>dev</id><properties><!--profiles.active是自定義的字段,自定義字段可以有多個--><profiles.active>dev</profiles.active></properties></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties><!--activation用來指定激活方式,可以根據jdk環境,環境變量,文件的存在或缺失--><activation><!--這個字段表示默認激活--><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profiles.active>test</profiles.active></properties></profile></profiles>

可以看到我們利用resource屬性來配置打包時,根據激活的環境來選取要打包的文件夾。我們使用maven命令

mvn clean package

prod環境被默認激活,打包后的包結構為

可以看到prod文件夾下的配置文件被打包進去,通過激活不同的profile也就實現了動態切換配置文件。

2.2 激活方式

profile的激活方式有很多種

1. 通過maven命令參數

即在使用maven打包時通過-P參數,-P后跟上profile的唯一id,如

mvn clean package -Ptest

打包時test的profile被激活,打包后的包結構為:

2. 通過pom文件里的activation屬性

<profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties><!--activation用來指定激活方式,可以根據jdk環境,環境變量,文件的存在或缺失--><activation><!--配置默認激活--><activeByDefault>true</activeByDefault><!--通過jdk版本--><!--當jdk環境版本為1.5時,此profile被激活--><jdk>1.5</jdk><!--當jdk環境版本1.5或以上時,此profile被激活--><jdk>[1.5,)</jdk><!--根據當前操作系統--><os><name>Windows XP</name><family>Windows</family><arch>x86</arch><version>5.1.2600</version></os><!--通過系統環境變量,name-value自定義--><property><name>env</name><value>test</value></property><!--通過文件的存在或缺失--><file><missing>target/generated-sources/axistools/wsdl2java/com/companyname/group</missing><exists/></file></activation></profile>

? ? ? ?這里我寫了多種方式,可以通過activeByDefault、jdk版本、操作系統、系統環境變量(在win10我試了不成功,win7可以,不知道為啥)、文件的存在或缺失,實際項目可以根據需要選取一種即可。這種的優先級低于maven命令參數指定的方式。

3. settings.xml中使用activeProfiles指定(了解即可)

即mave目錄下的settings.xml也可以添加下面的代碼來指定激活哪個profile。

<activeProfiles> <activeProfile>profileTest1</activeProfile> </activeProfiles>

? ? ? ?值得注意的是1. setting.xml在當前系統用戶的.m2文件夾有(如沒有可手動拷貝過去也會生效),針對的當前用戶的profile配置,在maven的安裝目錄下“conf/settings.xml”,針對的是全局的profile配置。2.profile也可以定義在setting.xml文件中,但是這種方式個人感覺并不實用的,不推薦。

總結

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

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