Maven 指定範圍依賴
許多大型的專案都已經模組化或元件化了,每個元件都可以自己進行版本釋出,由於各元件之間有依賴關係,一個元件的版本號頻繁修改(例如每個元件都遵從語義化版本控制語義化版本控制,當bugfix時修訂版本號會頻繁的進行修改),會引起依賴它的元件也需要及時修改依賴的版本號,這樣既繁瑣又低效。這時候可以通過指定範圍依賴來解決,上層的元件可以不用關心下層的元件版本號修改(在不影響使用的前提下)。
下面通過例子說明如何在maven專案中指定範圍依賴,並進行編譯。這裡假設某個專案由A、B、C三個元件組成,其中A元件依賴於B元件。在A專案中指定對B元件的範圍依賴,假設依賴B元件的2.3.*版本,即末尾版本號不管怎麼修改,A元件都不需要關心,但在每次編譯部署時希望能在maven repo里拉到最新的jar包。
- 在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