Maven實戰讀書筆記(六):Maven靈活構建

Maven爲了支持構建的靈活性,內置了3大特性,即:屬性、Profile和資源過濾。java

6.1 Maven屬性

Maven的屬性與Java代碼的常量有殊途同歸之妙,都是爲了消除重複,對相關內容進行統一管理而且能夠減小往後升級版本的工做量,下降錯誤發生的機率。
POM文件中,能夠經過${屬性名稱}的方式來引用屬性。
Maven中,存在6類屬性,分別爲:
1) 內置屬性,主要有兩個,分別爲:${basedir}表示項目根目錄,即POM文件所在的目錄、${version}表示項目的版本。
2) POM屬性,用戶能夠經過該類屬性引用POM文件中對應元素的值,如:web

${project.artifactId}對應到<project><artifactId>的值,經常使用的POM屬性有:
    ${project.build.sourceDirectory}項目的主源碼目錄,默認爲src/main/java/
    ${project.build.testSourceDirectory}項目的測試源碼目錄,默認爲src/test/java
    ${project.build.directory}項目構建輸出目錄,默認爲target/
    ${project.outputDirectory}項目主代碼編譯輸出目錄,默認爲target/classes
    ${project.testOutputDirectory}項目測試代碼輸出目錄,默認爲target/test-classes
    ${project.groupId}項目的groupId
    ${project.artifactId}項目的artifactId
    ${project.version}項目的version,與${version}等價
    ${project.build.finalName}項目打包輸出文件名稱,默認爲${project.artifactId}-${project.version}

Remark:每個POM屬性都對應到一個POM元素spring

3) 自定義屬性:用戶在POM文件的<properties>元素下定義的Maven屬性,如:mvc

<properties>
  <spring.boot.version>1.5.9.RELEASE</spring.boot.version>
</properties>

4) Settings屬性
POM屬性同理,使用settings.開頭的屬性引用settings.xml文件中xml元素的值,如經常使用的${settings.localRepository}引用本地倉庫的地址。maven

5) Java系統屬性
全部java系統屬性均可以使用Maven屬性進行引用,如${user.home}指向用戶目錄,能夠經過mvn help:system查看全部的java系統屬性。測試

6) 環境變量屬性
全部的環境變量可使用env.開頭的Maven屬性進行引用,如${env.JAVA_HOME}指向了JAVA_HOME環境變量的值,能夠經過mvn help:system查看全部的環境變量。ui

6.2 Maven屬性最佳實踐

6.2.1經過自定義屬性消除重複

基於Java平臺的開發,目前基本都會引進springframework幫咱們簡化工做,須要MVC功能,則引入spring-webmvc,須要事務管理功能,引入spring-tx。在咱們POM文件中引入相關依賴:code

<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>

當咱們須要升級springframework的時候,須要修改多個地方,若是這些依賴不放在一塊兒的時候,則容易形成漏更改,致使多版本並存,這個時候,可使用自定義屬性,如:xml

<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>

當須要進行版本升級的時候,只須要修改springframework.version屬性便可。事務

6.2.2使用POM屬性依賴內部模塊

在一個多項目中,模塊之間通常會有依賴,而且這些模塊一般會使用同一的groupIdversion,這個時候可使用POM屬性,如:

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

這樣,當進行項目版本升級時,就不須要更改依賴模塊的版本了。

相關文章
相關標籤/搜索