Maven——profile介绍
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
4???????profile介紹
4.1?????profile簡(jiǎn)介
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個(gè)profile,然后每個(gè)profile對(duì)應(yīng)不同的激活條件和配置信息,從而達(dá)到不同環(huán)境使用不同配置信息的效果。比如說,我們可以通過profile定義在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有時(shí)候我們可以通過操作系統(tǒng)的不同來使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。具體的激活條件有哪些我在后文會(huì)講到。
4.2?????profile的定義位置
對(duì)于使用Maven3,我們可以有多個(gè)地方定義profile。定義的地方不同,它的作用范圍也不同。
(1)????針對(duì)于特定項(xiàng)目的profile配置我們可以定義在該項(xiàng)目的pom.xml中。
(2)????針對(duì)于特定用戶的profile配置,我們可以在用戶的settings.xml文件中定義profile。該文件在用戶家目錄下的“.m2”目錄下。
(3)????全局的profile配置。全局的profile是定義在Maven安裝目錄下的“conf/settings.xml”文件中的。
4.3?????profile中能定義的信息
profile中能夠定義的配置信息跟profile所處的位置是相關(guān)的。以下就分兩種情況來討論,一種是定義在settings.xml中,另一種是定義在pom.xml中。
4.3.1? profile定義在settings.xml中
當(dāng)profile定義在settings.xml中時(shí)意味著該profile是全局的,它會(huì)對(duì)所有項(xiàng)目或者某一用戶的所有項(xiàng)目都產(chǎn)生作用。因?yàn)樗侨值?#xff0c;所以在settings.xml中只能定義一些相對(duì)而言范圍寬泛一點(diǎn)的配置信息,比如遠(yuǎn)程倉庫等。而一些比較細(xì)致一點(diǎn)的需要根據(jù)項(xiàng)目的不同來定義的就需要定義在項(xiàng)目的pom.xml中。具體而言,能夠定義在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定義在<properties>里面的鍵值對(duì)可以在pom.xml中使用。
4.3.2? profile定義在pom.xml中
定義在pom.xml中的profile可以定義更多的信息。主要有以下這些:
l??<repositories>
l??<pluginRepositories>
l??<dependencies>
l??<plugins>
l??<properties>
l??<dependencyManagement>
l??<distributionManagement>
l??還有build元素下面的子元素,主要包括:
<defaultGoal>
<resources>
<testResources>
<finalName>
4.4?????profile的激活方式
Maven給我們提供了多種不同的profile激活方式。比如我們可以使用-P參數(shù)顯示的激活一個(gè)profile,也可以根據(jù)環(huán)境條件的設(shè)置讓它自動(dòng)激活等。下面將對(duì)它們一一進(jìn)行介紹:
4.4.1? 使用activeByDefault設(shè)置激活
先看下面一個(gè)配置
Xml代碼?
?
?
????????我們可以在profile中的activation元素中指定激活條件,當(dāng)沒有指定條件,然后指定activeByDefault為true的時(shí)候就表示當(dāng)沒有指定其他profile為激活狀態(tài)時(shí),該profile就默認(rèn)會(huì)被激活。所以當(dāng)我們調(diào)用mvn package的時(shí)候上面的profileTest1將會(huì)被激活,但是當(dāng)我們使用mvn package –P profileTest2的時(shí)候?qū)⒓せ頿rofileTest2,而這個(gè)時(shí)候profileTest1將不會(huì)被激活。
4.4.2? 在settings.xml中使用activeProfiles指定處于激活狀態(tài)的profile
我們可以在settings.xml中使用activeProfiles來指定需要激活的profile,這種方式激活的profile將所有情況下都處于激活狀態(tài)。比如現(xiàn)在我們定義了如下兩個(gè)profile
Xml代碼?
?
?
???????這里的profile可以是定義在settings.xml中的,也可以是定義在pom.xml中的。這個(gè)時(shí)候如果我們需要指定profileTest1為激活狀態(tài),那么我們就可以在settings.xml中定義activeProfiles,具體定義如下:
Xml代碼?
?
?
???????考慮這樣一種情況,我們?cè)赼ctiveProfiles下同時(shí)定義了多個(gè)需要激活的profile。這里還拿上面的profile定義來舉例,我們定義了同時(shí)激活profileTest1和profileTest2。
Xml代碼?
?
?
???????從profileTest1和profileTest2我們可以看出它們共同定義了屬性hello。那么這個(gè)時(shí)候我在pom.xml中使用屬性hello的時(shí)候,它到底取的哪個(gè)值呢?是根據(jù)activeProfile定義的順序,后面的覆蓋前面的嗎?根據(jù)我的測(cè)試,答案是非也,它是根據(jù)profile定義的先后順序來進(jìn)行覆蓋取值的,然后后面定義的會(huì)覆蓋前面定義的。
4.4.3? 使用-P參數(shù)顯示的激活一個(gè)profile
假設(shè)我們現(xiàn)在有如下定義的profiles
Xml代碼?
?
?
???????那么當(dāng)我們?cè)谶M(jìn)行Maven操作時(shí)就可以使用-P參數(shù)顯示的指定當(dāng)前激活的是哪一個(gè)profile了。比如我們需要在對(duì)項(xiàng)目進(jìn)行打包的時(shí)候使用id為profileTest1的profile,我們就可以這樣做:
Cmd代碼?
?
?
???????當(dāng)我們使用activeByDefault或settings.xml中定義了處于激活的profile,但是當(dāng)我們?cè)谶M(jìn)行某些操作的時(shí)候又不想它處于激活狀態(tài),這個(gè)時(shí)候我們可以這樣做:
Cmd代碼?
?
?
???????這里假設(shè)profileTest1是在settings.xml中使用activeProfile標(biāo)記的處于激活狀態(tài)的profile,那么當(dāng)我們使用“-P !profile”的時(shí)候就表示在當(dāng)前操作中該profile將不處于激活狀態(tài)。
4.4.4根據(jù)環(huán)境來激活profile
profile一個(gè)非常重要的特性就是它可以根據(jù)不同的環(huán)境來激活,比如說根據(jù)操作系統(tǒng)的不同激活不同的profile,也可以根據(jù)jdk版本的不同激活不同的profile,等等。
4.4.4.1根據(jù)jdk來激活profile
Xml代碼?
?
?
???????上面情況表示在jdk為1.5版本系列的時(shí)候激活profileTest1。
Xml代碼?
?
?
???????上面的情況表示在jdk為1.4、1.5和1.6的時(shí)候激活profileTest1。
4.4.4.2根據(jù)操作系統(tǒng)來激活profile
Xml代碼?
?
?
???????上面的情況就是根據(jù)操作系統(tǒng)的類型來激活profileTest1。
4.4.4.3根據(jù)系統(tǒng)屬性來激活profile
Xml代碼?
?
?
上面的profileTest1將在提供了系統(tǒng)屬性hello,并且其值為world的時(shí)候激活。下面的做法可以激活profileTest1。
Cmd代碼?
?
?
???????當(dāng)是下面的這種定義形式時(shí),profileTest1將在指定了系統(tǒng)屬性hello,且其值為任意值的時(shí)候被激活。
Xml代碼?
?
4.4.4.4根據(jù)文件是否存在激活profile
Xml代碼?
?
?
上面的定義表示當(dāng)存在target文件時(shí)激活profileTest1。
Xml代碼?
?
?
???????上面的定義表示當(dāng)不存在target文件時(shí)激活profileTest1。
4.5?????查看當(dāng)前處于激活狀態(tài)的profile
我們可以同時(shí)定義多個(gè)profile,那么在建立項(xiàng)目的過程中,到底激活的是哪一個(gè)profile呢?Maven為我們提供了一個(gè)指令可以查看當(dāng)前處于激活狀態(tài)的profile都有哪些,這個(gè)指定就是mvn help:active-profiles。
現(xiàn)在假設(shè)我們的settings.xml文件中有如下profile的定義:
Xml代碼?
?
?
???????這個(gè)時(shí)候我們可以看到,我們已經(jīng)定義了profileTest1始終為激活狀態(tài),這個(gè)時(shí)候我們使用mvn help:active-profiles查看處于激活狀態(tài)的profile時(shí),就會(huì)打印出如下內(nèi)容:
轉(zhuǎn)載于:https://my.oschina.net/mlh3823/blog/801982
總結(jié)
以上是生活随笔為你收集整理的Maven——profile介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#正则表达式替换字符串
- 下一篇: POJ 3264 Balanced Li