1、創建父項目
cmd進入項目工作目錄,執行以下代碼:
mvn archetype:generate
創建成功,接着修改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>testparentgroupid</groupId> <artifactId>testparentartifactId</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>testparentartifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
注:修改packageing打包方式爲pom,父項目的packageing設置爲pom,才能去管理其他工程.
2、父項目創建子項目
cmd進入父項目pom.xml所在的目錄,執行構建代碼如下:
mvn archetype:generate
子項目創建成功,此時Maven修改了父項目的pom.xml內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <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>testparentgroupid</groupId> <artifactId>testparentartifactId</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>testparentartifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <modules> <module>testchild1artifactId</module> </modules> </project>
新增了modles節點,將子項目包含到了裏面.建立了父項目與子項目的關聯.通過modles節點,子項目的pom.xml內容如下:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>testparentgroupid</groupId> <artifactId>testparentartifactId</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>testchild1groupId</groupId> <artifactId>testchild1artifactId</artifactId> <version>1.0-SNAPSHOT</version> <name>testchild1artifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
可以看到新生成了一個parent節點,Maven自動建立了子項目父項目的關聯通過parent節點.
注:如果子項目和父項目的groupId和version一樣,一般情況下是一樣的.這兩個屬性可以刪除,只保留artifactId,所以修改子項目pom如下:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>testparentgroupid</groupId> <artifactId>testparentartifactId</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>testchild1artifactId</artifactId> <name>testchild1artifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
到這裏,父子項目已經建立了關聯
3、父項目管理所有依賴信息
修改父項目的pom.xml,如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <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>testparentgroupid</groupId> <artifactId>testparentartifactId</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>testparentartifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <modules> <module>testchild1artifactId</module> </modules> </project>
父項目通過dependencyManagement節點引入了一系列的sping框架依賴.注意這裏只是一個列表而已,不會真正的去下載這些依賴.可以通過cmd進入父項目的pom.xml,執行如下代碼:
mvn dependency:list
可以發現父項目沒有去執行任何下載包的操作
修改子項目的pom.xml如下:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>tpgroupId</groupId> <artifactId>tpartifactId</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>tpchild1groupId</groupId> <artifactId>tpchild1artifactId</artifactId> <version>1.0-SNAPSHOT</version> <name>tpchild1artifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
這裏添加了spring-aop的依賴.因爲本地maven倉庫和相關倉庫沒有,所以如下圖
執行了相關下載.同時在切換爲父項目查看依賴,cmd進入父項目的pom.xml目錄,執行如下代碼:
mvn dependency:list
父項目依然沒有依賴.
到這裏,可以菜刀父項目提供了一個依賴列表,其提供了依賴默認的版本,可以在子項目中不指定依賴的版本,而採用父項目的版本,因爲上面的子項目並沒有指定spring-aop的具體版本,但是卻下載了父項目中的spring-aop的版本.所以pom項目有一定的版本管理功能,version遵循以下規律:
(1)、父項目已經引入的依賴,子項目可以不用寫version ,此時子項目採用父項目的version
(2)、如果子項目寫了version和父項目的version不一致,採用子項目的version
4、查看子項目的依賴層級
cmd進入指定子項目的pom.xml,執行如下代碼:
mvn dependency:tree
5、父項目升級管理的所有依賴項的版本
修改父項目的pom.xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <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>tpgroupId</groupId> <artifactId>tpartifactId</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>tpartifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <modules> <module>tpchild1artifactId</module> </modules> </project>
升級spring相關項目的版本到4.1.0,接着cmd進入子項目的pom.xml所在的目錄執行如下代碼:
mvn dependency:list
可以看到下載了4.1.0相關的包,依賴解析結果也顯示升級到了4.1.0相關的版本,再看下本地Maven倉庫
4.0.0和4.1.0都存在於倉庫中
6、父子項目添加自定義屬性,控制pom中的相關配置
修改父項目pom.xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <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>tpgroupId</groupId> <artifactId>tpartifactId</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>tpartifactId</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <custome.spring.version>4.2.0.RELEASE</custome.spring.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${custome.spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${custome.spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${custome.spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${custome.spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${custome.spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <modules> <module>tpchild1artifactId</module> </modules> </project>
這裏在properties節點下新增了custome.spring.version節點,並修改了依賴列表中所有spring相關項目的version節點爲 <version>${custome.spring.version}</version>
接着cmd定位到父項目所在的pom.xml,執行如下代碼:
mvn dependency:list
可以看到子項目開始下載4.2.0版本的相關包.說明自定義屬性配置成功,這裏也可以在子項目的pom.xml中配置自定義屬性.並不是只能在父項目中配置