Maven靈活構(gòu)建

Maven為了支持構(gòu)建的靈活性,內(nèi)置了3大特性,即:屬性、Profile和資源過(guò)濾。

6.1 Maven屬性

Maven的屬性與Java代碼的常量有異曲同工之妙,都是為了消除重復(fù),對(duì)相關(guān)內(nèi)容進(jìn)行統(tǒng)一管理并且可以減少日后升級(jí)版本的工作量,降低錯(cuò)誤發(fā)生的概率。
POM文件中,可以通過(guò)${屬性名稱(chēng)}的方式來(lái)引用屬性。
Maven中,存在6類(lèi)屬性,分別為:

  1. 內(nèi)置屬性,主要有兩個(gè),分別為:${basedir}表示項(xiàng)目根目錄,即POM文件所在的目錄、${version}表示項(xiàng)目的版本。

  2. POM屬性,用戶(hù)可以通過(guò)該類(lèi)屬性引用POM文件中對(duì)應(yīng)元素的值,如:

     ${project.artifactId}對(duì)應(yīng)到<project><artifactId>的值,常用的POM屬性有:
     ${project.build.sourceDirectory}項(xiàng)目的主源碼目錄,默認(rèn)為src/main/java/
     ${project.build.testSourceDirectory}項(xiàng)目的測(cè)試源碼目錄,默認(rèn)為src/test/java
     ${project.build.directory}項(xiàng)目構(gòu)建輸出目錄,默認(rèn)為target/
     ${project.outputDirectory}項(xiàng)目主代碼編譯輸出目錄,默認(rèn)為target/classes
     ${project.testOutputDirectory}項(xiàng)目測(cè)試代碼輸出目錄,默認(rèn)為target/test-classes
     ${project.groupId}項(xiàng)目的groupId
     ${project.artifactId}項(xiàng)目的artifactId
     ${project.version}項(xiàng)目的version,與${version}等價(jià)
     ${project.build.finalName}項(xiàng)目打包輸出文件名稱(chēng),默認(rèn)為${project.artifactId}-${project.version}
    

Remark:每一個(gè)POM屬性都對(duì)應(yīng)到一個(gè)POM元素

  1. 自定義屬性:用戶(hù)在POM文件的<properties>元素下定義的Maven屬性,如:
<properties>
  <spring.boot.version>1.5.9.RELEASE</spring.boot.version>
</properties>
  1. Settings屬性
    POM屬性同理,使用settings.開(kāi)頭的屬性引用settings.xml文件中xml元素的值,如常用的${settings.localRepository}引用本地倉(cāng)庫(kù)的地址。

  2. Java系統(tǒng)屬性
    所有java系統(tǒng)屬性都可以使用Maven屬性進(jìn)行引用,如${user.home}指向用戶(hù)目錄,可以通過(guò)mvn help:system查看所有的java系統(tǒng)屬性。

  3. 環(huán)境變量屬性
    所有的環(huán)境變量可以使用env.開(kāi)頭的Maven屬性進(jìn)行引用,如${env.JAVA_HOME}指向了JAVA_HOME環(huán)境變量的值,可以通過(guò)mvn help:system查看所有的環(huán)境變量。

6.2 Maven屬性最佳實(shí)踐

6.2.1通過(guò)自定義屬性消除重復(fù)

基于Java平臺(tái)的開(kāi)發(fā),目前基本都會(huì)引進(jìn)springframework幫我們簡(jiǎn)化工作,需要MVC功能,則引入spring-webmvc,需要事務(wù)管理功能,引入spring-tx。在我們POM文件中引入相關(guān)依賴(lài):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.14.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.14.RELEASE</version>
</dependency>

當(dāng)我們需要升級(jí)springframework的時(shí)候,需要修改多個(gè)地方,如果這些依賴(lài)不放在一起的時(shí)候,則容易造成漏更改,導(dǎo)致多版本并存,這個(gè)時(shí)候,可以使用自定義屬性,如:

<properties>
    <springframework.version>4.3.14.RELEASE</springframework.version>
</properties>
<dependencies>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${springframework.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${springframework.version}</version>
</dependency>
</dependencies>

當(dāng)需要進(jìn)行版本升級(jí)的時(shí)候,只需要修改springframework.version屬性即可。

6.2.2使用POM屬性依賴(lài)內(nèi)部模塊

在一個(gè)多項(xiàng)目中,模塊之間一般會(huì)有依賴(lài),并且這些模塊通常會(huì)使用同一的groupIdversion,這個(gè)時(shí)候可以使用POM屬性,如:

<dependencies>
  <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>demo-base</artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>

這樣,當(dāng)進(jìn)行項(xiàng)目版本升級(jí)時(shí),就不需要更改依賴(lài)模塊的版本了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評(píng)論 18 139
  • 包含內(nèi)容 maven屬性 構(gòu)建環(huán)境的差異 資源過(guò)濾 Maven Profile Web資源過(guò)濾 在profile中...
    zlcook閱讀 1,109評(píng)論 0 7
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,941評(píng)論 6 342
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注釋 參考 0 前言 什么是...
    阿父閱讀 12,655評(píng)論 1 36
  • 很多人甚至覺(jué)得三觀一致沒(méi)什么用,我卻覺(jué)得,那是因?yàn)槟銢](méi)有遇到合適的人!有些人覺(jué)得,其實(shí)看的過(guò)去,能一起過(guò)日子就好,...
    執(zhí)念0425閱讀 354評(píng)論 0 1