1. 程式人生 > 實用技巧 >Maven 指定範圍依賴

Maven 指定範圍依賴

許多大型的專案都已經模組化或元件化了,每個元件都可以自己進行版本釋出,由於各元件之間有依賴關係,一個元件的版本號頻繁修改(例如每個元件都遵從語義化版本控制語義化版本控制,當bugfix時修訂版本號會頻繁的進行修改),會引起依賴它的元件也需要及時修改依賴的版本號,這樣既繁瑣又低效。這時候可以通過指定範圍依賴來解決,上層的元件可以不用關心下層的元件版本號修改(在不影響使用的前提下)。

下面通過例子說明如何在maven專案中指定範圍依賴,並進行編譯。這裡假設某個專案由A、B、C三個元件組成,其中A元件依賴於B元件。在A專案中指定對B元件的範圍依賴,假設依賴B元件的2.3.*版本,即末尾版本號不管怎麼修改,A元件都不需要關心,但在每次編譯部署時希望能在maven repo里拉到最新的jar包。

  1. 在A元件中的指定B的版本依賴為一個範圍區間[2.3.0,2.4.0),即表示了A元件依賴B元件的2.3.*版本。在pom.xml有關配置如下:
      <properties>
                <b.version>[2.3.0,2.4.0)</b.version>
      </properties>
      <dependencies>
	      <dependency>
		      <groupId>org.xxx.xxx</groupId>
		      <artifactId>B</artifactId>          
		      <version>${b.version}</version>       
	      </dependency>     
      </dependencies>

2.按上述在pom檔案中配置了依賴的版本範圍,編譯時需要對範圍依賴進行處理,因為編譯時maven會把在該區間內的所有jar包都拉到本地,我們需要指定使用該區間內最新版本的jar包進行編譯元件A。

1)需要新增一個外掛:versions-maven-plugin,用來處理範圍依賴中的最新版本。

        <build>
             <plugins>
                  <plugin>
                      <groupId>org.codehaus.mojo</groupId>
                     <artifactId>versions-maven-plugin</artifactId>
                    <version>2.3</version>
                 </plugin>
             </plugins>
        </build>

2)執行命令:

      mvn versions:resolve-ranges

** 執行完該命令後,pom中指定的版本範圍會被更新指定為該區間內的最新版本。在本例中此時**${b.version}的值會變成

[2.3.0,2.4.0)中最新的版本號,例如2.3.7

3)執行完上述命令後在進行編譯部署等操作

   mvn clean install/package/deploy

4) 將pom檔案中的指定版本回滾到之前的指定範圍區間

      mvn versions:revert

由於在編譯之前已經將指定的範圍依賴更新成了特定的新版本,然後在本地進行編譯,但是此時不能將專案中這個改動上傳到遠端專案,遠端專案中應該是指定的範圍依賴。

因此需要恢復到原來的依賴範圍狀態,因此需要執行下mvn versions:revert進行回滾。此時 <b.version>2.3.7</b.version> 會被回滾成原始的版本 <b.version>[2.3.0,2.4.0)</b.version>

總結下來一句話就是:開發時專案中指定了範圍依賴,本地/CI編譯步驟不再是簡單的mvn compile/install/test/deploy,而是下面三個步驟:

       1.mvn versions:resolve-ranges
       2.mvn install/package/deploy
       3.mvn versions:revert