您好,登錄后才能下訂單哦!
這篇文章主要介紹Maven項目繼承實現過程的案例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
多個maven項目之間難免有重復的pom配置,重復的配置沒必要重復寫,maven提供了父子繼承的關系,重復的依賴直接放在父項目的pom中。
所以不希望每個開發者隨意定義maven版本依賴,可以在父項目中進行說明,然后子項目沿用即可。
idea創建父項目(這是一個父項目,也是一個空項目,只需要pom.xml,編寫相關的依賴, 父項目必須用pom打包的方式):
編輯父項目pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.linewell</groupId> <artifactId>maven-parent</artifactId> <version>1.0-SNAPSHOT</version> <!--父項目必須是pom--> <packaging>pom</packaging> <!--定義參數--> <properties> <common.version>2.6</common.version> <spring.version>4.3.6.RELEASE</spring.version> </properties> <!--這邊的依賴子項目會繼承--> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${common.version}</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>spring-context-support</groupId> <artifactId>org.springframework</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
這邊需要說明下,dependencyManagement,這邊的依賴不會被繼承,如果子項目導入了這個依賴,可以不用寫版本號,會以父項目的為主,因為有的子項目不一定會用父項目中的所有依賴。個別子項目依賴到的包可以放在這里,然后不需要寫版本號,會自動引用父項目。
創建一個子項目,編輯子項目的pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.linewell</groupId> <artifactId>maven-children</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>com.linewell</groupId> <artifactId>maven-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../mavenparent/pom.xml</relativePath> </parent> </project>
可以看到commons-io進來了,spring-context-support沒進來。
我現在不添加spring-context-support的版本,然后看下結果,是會以父項目的版本為主。可以看到如下引入的也是父項目中的4.3.6
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.linewell</groupId> <artifactId>maven-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../mavenparent/pom.xml</relativePath> </parent> <groupId>com.linewell</groupId> <artifactId>maven-children</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> </dependencies> </project>
那么問題來了,如果子項目指定了版本會怎么樣?
編輯子項目pom.xml, 如下可以發現,如果子項目有明確指定依賴以及具體版本,與父項目發生沖突會以子項目的依賴為準。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.linewell</groupId> <artifactId>maven-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../mavenparent/pom.xml</relativePath> </parent> <groupId>com.linewell</groupId> <artifactId>maven-children</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.5.RELEASE</version> </dependency> </dependencies> </project>
ps:如果父項目中執行了mvn install安裝到了本地倉庫,然后子項目中引入父GAV的時候可以不用寫路徑relativePath屬性。
以上是Maven項目繼承實現過程的案例分析的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。