目錄
- 1.父項目的搭建
- 2.子項目的搭建(繼承關系)
- 3.子項目的搭建(聚合關系)
- 4.優雅的使用聚合關系管理jar包版本
1.父項目的搭建
- 建立一個Maven Project
- 勾選建立簡單項目
-
編輯項目資訊
以建立一個淘寶項目為例。
-
寫公司名字Group Id
-
寫父項目名或子子產品名Artifact Id
-
Version
寫版本号
以上三個屬性為一個項目的坐标,通過這個坐标即可定位一個項目。
-
為項目打包方式。Packaging
- 如果是父項目或者子項目還需要作為其他項目的父項目,必須選擇
選項;pom
- 如果子項目是java項目,選擇
選項;jar
- 如果子項目是web項目,選擇
選項。war
- 如果是父項目或者子項目還需要作為其他項目的父項目,必須選擇
點選Finish完成建立,父項目的目錄結構如下:
4. 在父項目的pom.xml檔案中添加如下依賴(用于後續講解)
記得是在
<dependencies>
标簽中添加。
<!-- 添加spring-webmvc的依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
以上代碼可在 Maven倉庫 中找到。
儲存後,這時在項目目錄中并沒有增加依賴相關的jar包,原因是因為這是一個父項目,之後如果有子項目繼承該父項目或者該父項目下有Module項目,那麼該子項目或Module項目便會自動添加依賴相關的jar包。
2.子項目的搭建(繼承關系)
以建立淘寶項目的商品子產品為例,大緻步驟同上。
這裡Parent Project需要勾選剛才建立的TaoBao父項目坐标。
在子項目的目錄中,可以看到剛才父項目pom.xml檔案中添加的依賴對應的jar包。這裡不僅僅隻添加了spring-webmvc jar包,還有其他支援spring-webmvc的jar包。
再看子項目的pom.xml檔案
<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.alibaba</groupId>
<artifactId>TaoBao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.alibaba</groupId>
<artifactId>TaoBao-Shop</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
其中除了自己的坐标外,還有
<parent>
标簽包含的父項目的坐标。
這裡子項目的
groupId
、
version
編譯器會建議删除,因為與父項目相比隻有
artifactId
不一樣,其他都來自父項目,但如果希望與父項目不同,可以修改而不删除。
而在父項目的pom.xml檔案中沒有任何變化。
這種在子項目中引用父項目坐标建立的兩個項目的關系就被稱為繼承關系。
稍後再做詳述,下面我們來看聚合關系。
3.子項目的搭建(聚合關系)
以建立淘寶項目的購物子產品為例,這次通過右鍵父項目建立該父項目的Maven Module。
點選Next,新的視窗同樣勾選建立簡單項目,Module Name寫子項目名。
點選Finish。
這時看新的子項目目錄結構和pom.xml檔案,和剛才的子項目完全相同。
再看父項目目錄結構,發現與新的子項目構成包含關系。
同時父項目的pom.xml檔案,發現多了如下配置:
<modules>
<module>TaoBao-Trans</module>
</modules>
小節:
聚合關系的前提是繼承關系,父項目會把子項目包含到父項目中;
聚合項目的子項目的類型必須是Maven Module而不是Maven Project;
具有聚合關系的父項目在pom.xml檔案中會有
module
指向子項目;
聚合項目的父子關系比繼承項目的父子關系強。
4.優雅的使用聚合關系管理jar包版本
下面将父項目pom.xml檔案添加的依賴套上
<dependencyManagement>
标簽,如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
這時發現以繼承和聚合關系建立的子項目都不再有父項目中的依賴,此時如果還想在子項目中有父項目的依賴,可在子項目中再添加依賴,但無需指定依賴的
<version>
,而是由父項目來決定。
這是
<dependencyManagement>
标簽唯一的作用(或好處)。
小節: <dependencyManagement>
标簽用于聲明在聚合項目中可能用到的标簽,但子項目不會立即引入其中的依賴,而需要手動添加需要的依賴,但不需要聲明依賴的版本。
下面再對父項目的pom.xml檔案做優化,在
<dependencyManagement>
上方添加
<properties>
标簽,
<properties>
标簽中的子标簽名可以随意定義,假如寫如下标簽
然後替換spring-webmvc依賴的
<version>
内容為
${spring-version}
(花括号中寫剛剛定義的子标簽名),最終pom.xml檔案内容如下:
<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.alibaba</groupId>
<artifactId>TaoBao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<spring-version>4.1.6.RELEASE</spring-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>TaoBao-Trans</module>
</modules>
</project>
現在我們如果需要配置jar包的版本,隻需要對
<properties>
标簽中的内容做修改即可,而不需要費力去找
<version>
标簽修改版本。