閱讀893 返回首頁    go iPhone_iPad_Mac_apple


《maven實戰》讀書筆記7——maven項目版本管理和靈活構建

說明

《maven實戰》一書內容很多,整個maven要學的東西也很多,不過,結合個人實際情況,我打算把這一篇作為這次對maven學習的一個階段性收尾,待其他更急需補充的知識有一定眉目了,再回過頭來繼續深入。

maven版本管理

對於maven版本管理,最重要的是需要區分出快照版本SNAPSHOT和發布版本release,據目前的了解,快照版本格式是固定的,而發布版本有幾種,例如帶release單詞的和不帶release單詞的。
快照版本由於每次發布都帶時間戳,所以適用於開發階段團隊協作,但同時也是不穩定的。
發布版本就需要是比較穩定的版本,定了就不能變,如果要變就要發布新的發布版本。
不過,要更好的了解maven版本管理,必須先比較熟悉版本控製,結合實際情況,就是需要先比較熟悉svn版本控製。
由於目前我雖然天天在用svn,卻還沒有係統的學一下,所以對svn也還不是太熟,再加上目前實際工作對maven版本管理似乎也沒有什麼需求,因此maven版本管理這一塊就先隻做了解。

靈活構建

根據我的理解,maven靈活構建指的是經過一定的配置後,可以使maven在不同的場景很容易的改變一些構建細節,例如某些屬性實際值的使用。
maven提供了屬性properties、profiles、資源過濾三個特性來實現。

屬性properties

這個說白了就相當於配置的一個變量,裏邊的標簽名就是變量名,隻不過有一些標簽是maven默認的,或者說約定了的,同時也能自定義並使用,例如我在某個項目的pom.xml中這樣配置:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring.version>4.0.9</spring.version>
    <auth.name>tzx</auth.name>
</properties>

在上邊的例子中,前三個是maven默認的一些屬性名,而spring.version、auth.name是我自己加的,有了這些配置,在這個pom.xml文件中就能用${auth.name}${spring.version}這樣的方式獲取到裏邊配置的值,這樣大大增加可維護性以及減少重複配置。
就比如這裏的spring.version,如果這個項目導入了很多個spring的jar包,那麼每個依賴配置都要配置version,如果有了spring.version,那麼在依賴配置的version那裏就可以使用${spring.version},以後如果要升級spring版本,就可以隻改動properties中的spring.version的值就可以了。
需要注意的是,我的這個配置是在項目的pom.xml中,但是實際上不隻是能配置在這裏,還能配置在maven的settings.xml中,例如我之前學習代碼管理工具sonar的時候就在setting.xml中配置過mysql數據庫相關的屬性:

<properties>
       <sonar.jdbc.url>
        jdbc:mysql://localhost:3306/sonar
       </sonar.jdbc.url>
       <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
       <sonar.jdbc.username>sonar</sonar.jdbc.username>
       <sonar.jdbc.password>sonar</sonar.jdbc.password>
       <sonar.host.url>https://localhost:9000</sonar.host.url>
</properties>

除開上邊兩個之外,maven還能用maven內置屬性、環境變量、係統變量等等,可以用mvn help:system命令來查看有哪些環境變量和係統變量,至於具體的內置屬性有哪些,可以需要時網上查詢一下。

maven的profiles

在說這個之前,先來看一個在前幾篇記錄中,講maven倉庫時有在settings.xml中出現過的一個配置:

<profiles>
   <profile>
     <id>nexus</id>
     <repositories>
      <repository>
         <id>repo1</id>
         <url>https://192.168.0.224:8081/nexus/content/groups/public</url>
         <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
         </releases>
      </repository>
      <repository>
         <id>repo2</id>
         <url>https://192.168.0.224:8081/nexus/content/groups/public-snapshots</url>        
         <snapshots>
                <enabled>true</enabled>
         </snapshots>
      </repository>
     </repositories>
     <pluginRepositories>
      <pluginRepository>
         <id>repo3</id>
         <url>https://192.168.0.65:8082/nexus/content/groups/public</url>
         <releases>
                <enabled>true</enabled>
         </releases>
      </pluginRepository>
      <pluginRepository>
         <id>repo4</id>
         <url>https://192.168.0.65:8082/nexus/content/groups/public-snapshots</url>
         <snapshots>
                <enabled>true</enabled>
         </snapshots>
      </pluginRepository>
     </pluginRepositories>
   </profile>
</profiles>

很顯然,這就是一個這裏要說的profiles的配置,這種配置的基本形式是,在一個profiles中可以配置多個profileprofile裏就是具體的配置信息,據我理解,幾乎所有能在profile之外配置的信息都可以放到這裏邊配置。
在這個配置中,最重要的是id屬性,這是每個profile的唯一標示。
之後可以使用很多種方法來激活這個配置,例如可以在settings.xml文件的profiles標簽之外增加這樣的配置:

<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

然後,上邊所配置的profile就被激活,可以被使用了。
除了上邊這種激活方式,還可以通過‘命令行激活’、‘環境變量激活’、‘文件是否存在激活’等各種激活方式,不過目前我還完全沒有用過這些方式,就暫時認為不常用,稍作了解就好。
那麼除開上述的所有激活方式外,還有一種就是在profile內部配置激活:

<activation>
      <activeByDefault>true</activeByDefault>
</activation>

這種配置的意思,從字麵意思其實就可以理解,那就是默認激活。不過需要注意的是,假如有用上述任何一種方式激活過某個profile,那麼所有這種默認激活的方式都會失效。

web資源過濾

這個目前感覺也似乎不怎麼常用,因此暫時隻需要知道有這麼回事就好。

最後更新:2017-11-15 12:04:02

  上一篇:go  他們是阿裏新零售的“前鋒部隊”,離未來最近的一群人
  下一篇:go  未來物聯網技術發展趨勢分析