父模塊html
<?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"> <!-- 指定pom版本,全部模塊的pom均需指定 --> <modelVersion>4.0.0</modelVersion> <!-- 本模塊的座標 --> <groupId>com.zzxzzg.guardz</groupId> <artifactId>pom-test</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包類型,默認爲jar,含有子模塊的模塊自動被設置爲pom --> <packaging>pom</packaging> <!-- 被聚合的子模塊索引 --> <modules> <module>study-common</module> <module>study-plugin</module> <module>study-blog</module> <module>study-web</module> </modules> <!-- 更多模塊信息,填寫模塊的描述還有做者信息什麼的 --> <name>ssm學習項目</name> <description>模塊描述</description> <url>https://my.oschina.net/mzdbxqh/</url> <developers> <developer> <name>mzdbxqh</name> </developer> </developers> <!-- 這裏集中定義整個項目裏邊全部第三方依賴的版本及其餘可做用於全部pom的常量 --> <properties> </properties> <!-- 這裏集中陳列整個項目須要用到的第三方依賴及其版本 --> <dependencyManagement> <dependencies> </dependencies> </dependencyManagement> <!-- 模塊的實際依賴 --> <dependencies> </dependencies> <!-- 這裏配置與build過程相關的內容 --> <build> <defaultGoal></defaultGoal> <directory></directory> <finalName></finalName> <!-- 這裏定義build過程當中將引入的資源文件 --> <!-- 這裏引入的鍵值對能夠用於替換resources裏邊指定的資源文件中的${}佔位符 --> <filters> </filters> <!-- 這裏定義build過程當中將輸出的資源文件,包括源地址/目標地址/需輸出資源文件/不輸出的資源文件,等 --> <resources> </resources> <!-- 這裏定義build過程所需使用的插件 --> <plugins> </plugins> </build> <!-- 配置信息集-例如能夠給開發環境/測試環境/生產環境預約義三套不一樣的配置 --> <profiles> </profiles> </project>
咱們知道在寫一個大型項目的時候會出現不少module,而且,每一個module都會有本身的依賴。java
當依賴多起來以後就會出現依賴衝突,好比moduleA和moduleB都依賴了同一個三方庫,可是卻使用了不一樣的版本,這就致使最後編譯的時候出現了依賴衝突。web
爲了解決依賴衝突,其中的一個措施就是使用dependencyManagement(即使使用了,也沒法徹底解決依賴衝突,好比依賴了兩個三方包,兩個三方包又同時依賴了同一個三方包,而且版本不一樣,這時候也會出現版本衝突。)apache
好比咱們抽出一個itoo-base-parent 基礎module來管理子項目的公共的依賴。api
在咱們項目頂層的POM文件中,咱們會看到dependencyManagement元素。經過它元素來管理jar包的版本,讓子項目中引用一個依賴而不用顯示的列出版本號。Maven會沿着父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,而後它就會使用在這個dependencyManagement元素中指定的版本號。eclipse
itoo-base-parent/pom.xmlmaven
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>${org.eclipse.persistence.jpa.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> </dependencies> </dependencyManagement>
itoo-base/pom.xmlide
<!--依賴關係--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <scope>provided</scope> </dependency> </dependencies>
dependencies即便在子項目中不寫該依賴項,那麼子項目仍然會從父項目中繼承該依賴項(所有繼承)學習
dependencyManagement裏只是聲明依賴,並不實現引入,所以子項目須要顯示的聲明須要用的依賴。若是不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,而且沒有指定具體版本,纔會從父項目中繼承該項,而且version和scope都讀取自父pom;另外若是子項目中指定了版本號,那麼會使用子項目中指定的jar版本。測試
使用parent控制版本依賴是很常見的事情。相似於java中的父子類繼承關係,子類能夠引用父類中非private的變量和方法,Maven中的parent定義是相似的,繼承者能夠直接使用parent中的maven depandencies。
<?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"> <!--置頂父模塊--> <parent> <groupId>pom-test</groupId> <artifactId>com.zzxzzg.guardz</artifactId> <version>1.0-SNAPSHOT</version> </parent> <!-- ### groupId,version直接繼承自Parent,packaging默認爲jar ### --> <!-- <groupId>pom-test</groupId> --> <artifactId>pom-common</artifactId> <!-- <version>1.0-SNAPSHOT</version> --> <!-- <packaging>jar</packaging> --> <dependencies> </dependencies> </project>
https://www.cnblogs.com/feibazhf/p/7886617.html https://my.oschina.net/mzdbxqh/blog/846018