Maven學習 ---


  在使用maven過程中,我們在開發階段經常性的會有很多公共庫處於不穩定狀態,隨時需要修改並發布,可能一天就要發布一次,遇到bug時,甚至一天要發布N次。我們知道,maven的依賴管理是基於版本管理的,對於發布狀態的artifact,如果版本號相同,即使我們內部的鏡像服務器上的組件比本地新,maven也不會主動下載的。如果我們在開發階段都是基於正式發布版本來做依賴管理,那么遇到這個問題,就需要升級組件的版本號,可這樣就明顯不符合要求和實際情況了。但是,如果是基於快照版本,那么問題就自熱而然的解決了,而maven已經為我們准備好了這一切。

 

       maven中的倉庫分為兩種,snapshot快照倉庫和release發布倉庫。snapshot快照倉庫用於保存開發過程中的不穩定版本,release正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊為快照版本,只需要在pom文件中在該模塊的版本號后加上-SNAPSHOT即可(注意這里必須是大寫),如下:

[html]  view plain  copy
 
  1. <groupId>cc.mzone</groupId>  
  2. <artifactId>m1</artifactId>  
  3. <version>0.1-SNAPSHOT</version>  
  4. <packaging>jar</packaging>  


       maven會根據模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那么在mvn deploy時會自動發布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,maven會自動從鏡像服務器上下載最新的快照版本。如果是正式發布版本,那么在mvn deploy時會自動發布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。

 


      所以,我們在開發階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新后,我們也不需要修改pom文件提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。

 

接下來要介紹的是如何在項目中應用snapshot和release庫,應用snapshot和release庫達到不同環境下發布不同的版本的目的,首先看一個pom文件的定義:

[html]  view plain  copy
 
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>net.aty.mybatis</groupId>  
  5.     <artifactId>mybatis-demo</artifactId>  
  6.     <packaging>jar</packaging>  
  7.     <version>${project.release.version}</version>  
  8.     <name>mybatis-demo</name>  
  9.     <url>http://maven.apache.org</url>  
  10.       
  11.     <properties>  
  12.         <project.release.version>0.1-SNAPSHOT</project.release.version>  
  13.     </properties>  
  14.       
  15.   
  16.     <profiles>  
  17.         <profile>  
  18.             <id>release</id>  
  19.         <properties>  
  20.             <project.release.version>0.1</project.release.version>  
  21.         </properties>  
  22.         </profile>  
  23.     </profiles>  
  24.       
  25.       
  26.     <!--定義snapshots庫和releases庫的nexus地址-->  
  27.     <distributionManagement>  
  28.         <repository>  
  29.             <id>nexus-releases</id>  
  30.             <url>  
  31.                 http://172.17.103.59:8081/nexus/content/repositories/releases/  
  32.             </url>  
  33.         </repository>  
  34.         <snapshotRepository>  
  35.             <id>nexus-snapshots</id>  
  36.             <url>  
  37.                 http://172.17.103.59:8081/nexus/content/repositories/snapshots/  
  38.             </url>  
  39.         </snapshotRepository>  
  40.     </distributionManagement>  
  41.   
  42. </project>  

 

  首先我們看到pom文件中version的定義是采用占位符的形式,這樣的好處是可以根據不同的profile來替換版本信息,比如maven默認是使用0.1-SNAPSHOT作為該模塊的版本。

1、如果在發布時使用mvn deploy -P release 的命令,那么會自動使用0.1作為發布版本,那么根據maven處理snapshot和release的規則,由於版本號后不帶-SNAPSHOT故當成是正式發布版本,會被發布到release倉庫;

2、如果發布時使用mvn deploy命令,那么就會使用默認的版本號0.1-SNAPSHOT,此時maven會認為是快照版本,會自動發布到快照版本庫。

 

      在distributionManagement段中配置的是snapshot快照庫和release發布庫的地址,我這里是采用nexus作為鏡像服務器。對於版本庫主要是id和url的配置,配置完成后就可以通過mvn deploy進行發布了,當然了,如果你的鏡像服務器需要用戶名和密碼,那么還需要在maven的settings.xml文件中做如下配置:

[html]  view plain  copy
 
  1. <server>  
  2.   <id>nexus-releases</id>  
  3.   <username>admin</username>  
  4.   <password>admin123</password>  
  5. </server>  
  6.   
  7. <server>  
  8.   <id>nexus-snapshots</id>  
  9.   <username>admin</username>  
  10.   <password>admin123</password>  
  11. </server>  

  注意這里配置的server的id必須和pom文件中的distributionManagement對應倉庫的id保持一致,maven在處理發布時會根據id查找用戶名稱和密碼進行登錄和文件的上傳發布。

     我們這里通過profile的定義就可以在發布靈活切換snapshot快照版本和release正式版本了,在被依賴的組件中也可以使用profile來定義在開發階段使用快照庫,在發布階段使用正式庫的功能,只需要在不同的profile中覆蓋默認的properties屬性值即可。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM