Maven學習總結(五)——聚合與繼承

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

Maven學習總結(五)——聚合與繼承

一、聚合

  如果我們想一次構建多個項目模塊,那我們就需要對多個項目模塊進行聚合

1.1、聚合配置代碼

1 <modules>
2       <module>模塊一</module>
3       <module>模塊二</module>
4       <module>模塊三</module>
5 </modules>

  例如:對項目的Hello、HelloFriend、MakeFriends這三個模塊進行聚合

1 <modules>
2       <module>../Hello</module>  
3       <module>../HelloFriend</module>        
4       <module>../MakeFriends</module>
5 </modules>

  其中module的路徑為相對路徑。

二、繼承

  繼承為了消除重復,我們把很多相同的配置提取出來,例如:grouptId,version等

2.1、繼承配置代碼

1 <parent>  
2          <groupId>me.gacl.maven</groupId>
3          <artifactId>ParentProject</artifactId>
4          <version>0.0.1-SNAPSHOT</version>
5          <relativePath>../ParentProject/pom.xml</relativePath>  
6 </parent>

2.2、繼承代碼中定義屬性

  繼承代碼過程中,可以定義屬性,例如:

1 <properties>
2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3     <junit.version>4.9</junit.version>
4     <maven.version>0.0.1-SNAPSHOT</maven.version>
5 </properties>

  訪問屬性的方式為${junit.version},例如:

1 <dependency>
2     <groupId>junit</groupId>
3     <artifactId>junit</artifactId>
4     <version>${junit.version}</version>
5     <scope>test</scope>
6 </dependency>

2.3、父模塊用dependencyManagement進行管理

復制代碼
 1 <dependencyManagement>
 2     <dependencies>
 3     <dependency>
 4         <groupId>junit</groupId>
 5         <artifactId>junit</artifactId>
 6         <version>${junit.version}</version>
 7         <scope>test</scope>
 8     </dependency>    
 9     <dependency>
10             <groupId>cn.itcast.maven</groupId>
11             <artifactId>HelloFriend</artifactId>
12             <version>${maven.version}</version>
13             <type>jar</type>
14             <scope>compile</scope>
15        </dependency>
16      </dependencies>
17 </dependencyManagement>
復制代碼

  這樣的好處是子模塊可以有選擇行的繼承,而不需要全部繼承。

三、聚合與繼承的關系

  聚合主要為了快速構建項目,繼承主要為了消除重復

四、聚合與繼承實戰演練

  創建四個Maven項目,如下圖所示:

?  

  這四個項目放在同一個目錄下,方便后面進行聚合和繼承

  

  Parent項目是其它三個項目的父項目,主要是用來配置一些公共的配置,其它三個項目再通過繼承的方式擁有Parent項目中的配置,首先配置Parent項目的pom.xml,添加對項目的Hello、HelloFriend、MakeFriends這三個模塊進行聚合以及jar包依賴,pom.xml的配置信息如下:

  Parent項目的pom.xml配置

復制代碼
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4 
 5     <groupId>me.gacl.maven</groupId>
 6     <artifactId>Parent</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>pom</packaging>
 9 
10     <name>Parent</name>
11     <url>http://maven.apache.org</url>
12     
13     <!-- 對項目的Hello、HelloFriend、MakeFriends這三個模塊進行聚合 -->
14     <modules>
15         <module>../Hello</module>
16         <module>../HelloFriend</module>
17         <module>../MakeFriends</module>
18     </modules>
19     
20     <!-- 定義屬性 -->
21     <properties>
22         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23         <junit.version>4.9</junit.version>
24         <maven.version>0.0.1-SNAPSHOT</maven.version>
25     </properties>
26 
27     <!-- 用dependencyManagement進行jar包依賴管理 -->
28     <dependencyManagement>
29         <!-- 配置jar包依賴 -->
30         <dependencies>
31             <dependency>
32                 <groupId>junit</groupId>
33                 <artifactId>junit</artifactId>
34                 <!-- 訪問junit.version屬性 -->
35                 <version>${junit.version}</version>
36                 <scope>test</scope>
37             </dependency>
38             <dependency>
39                 <groupId>me.gacl.maven</groupId>
40                 <artifactId>Hello</artifactId>
41                 <!-- 訪問maven.version屬性 -->
42                 <version>${maven.version}</version>
43                 <scope>compile</scope>
44             </dependency>
45             <dependency>
46                 <groupId>me.gacl.maven</groupId>
47                 <artifactId>HelloFriend</artifactId>
48                 <!-- 訪問maven.version屬性 -->
49                 <version>${maven.version}</version>
50             </dependency>
51         </dependencies>
52     </dependencyManagement>
53 </project>
復制代碼

  在Hello項目的pom.xml中繼承Parent項目的pom.xml配置

復制代碼
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   
 4   <modelVersion>4.0.0</modelVersion>
 5   <artifactId>Hello</artifactId>
 6   
 7       <!-- 繼承Parent項目中的pom.xml配置 -->
 8        <parent>  
 9           <groupId>me.gacl.maven</groupId>
10          <artifactId>Parent</artifactId>
11           <version>0.0.1-SNAPSHOT</version>
12           <!-- 使用相對路徑 -->
13         <relativePath>../Parent/pom.xml</relativePath>  
14     </parent>
15     
16     <dependencies>
17         <dependency>
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20         </dependency>
21     </dependencies>
22 </project>
復制代碼

  在HelloFriend項目的pom.xml中繼承Parent項目的pom.xml配置

復制代碼
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <artifactId>HelloFriend</artifactId>
 5     <name>HelloFriend</name>
 6     
 7     <!-- 繼承Parent項目中的pom.xml配置 -->
 8     <parent>
 9         <groupId>me.gacl.maven</groupId>
10         <artifactId>Parent</artifactId>
11         <version>0.0.1-SNAPSHOT</version>
12         <relativePath>../Parent/pom.xml</relativePath>
13     </parent>
14     <dependencies>
15         <dependency>
16             <!-- Parent項目的pom.xml文件配置中已經指明了要使用的Junit的版本號,因此在這里添加junit的依賴時,
17             可以不指明<version></version>和<scope>test</scope>,會直接從Parent項目的pom.xml繼承 -->
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20         </dependency>
21         <!-- HelloFriend項目中使用到了Hello項目中的類,因此需要添加對Hello.jar的依賴 
22         Hello.jar的<version>和<scope>也已經在Parent項目的pom.xml文件配置中已經指明了
23         因此這里也可以省略不寫了
24         -->
25         <dependency>
26             <groupId>me.gacl.maven</groupId>
27             <artifactId>Hello</artifactId>
28         </dependency>
29     </dependencies>
30 </project>
復制代碼

  在MakeFriends項目的pom.xml中繼承Parent項目的pom.xml配置

復制代碼
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <artifactId>MakeFriends</artifactId>
 5     <!-- 繼承Parent項目中的pom.xml配置 -->
 6     <parent>
 7         <groupId>me.gacl.maven</groupId>
 8         <artifactId>Parent</artifactId>
 9         <version>0.0.1-SNAPSHOT</version>
10         <relativePath>../Parent/pom.xml</relativePath>
11     </parent>
12     <dependencies>
13         <dependency>
14         <!-- Parent項目的pom.xml文件配置中已經指明了要使用的Junit的版本號,因此在這里添加junit的依賴時,
15             可以不指明<version></version>和<scope>test</scope>,會直接從Parent項目的pom.xml繼承 -->
16             <groupId>junit</groupId>
17             <artifactId>junit</artifactId>
18         </dependency>
19         <dependency>
20         <!-- MakeFriends項目中使用到了HelloFriend項目中的類,因此需要添加對HelloFriend.jar的依賴 
21         HelloFriend.jar的<version>和<scope>也已經在Parent項目的pom.xml文件配置中已經指明了
22         因此這里也可以省略不寫了
23         -->
24             <groupId>me.gacl.maven</groupId>
25             <artifactId>HelloFriend</artifactId>
26         </dependency>
27     </dependencies>
28 </project>
復制代碼

  以上的四個項目的pom.xml經過這樣的配置之后,就完成了在Parent項目中聚合Hello、HelloFriend、MakeFriends這三個子項目(子模塊),而Hello、HelloFriend、MakeFriends這三個子項目(子模塊)也繼承了Parent項目中的公共配置,這樣就可以使用Maven一次性構建所有的項目了,如下圖所示:

  

  選中Parent項目的pom.xml文件→【Run As】→【Maven install】,這樣Maven就會一次性同時構建Parent、Hello、HelloFriend、MakeFriends這四個項目,如下圖所示:

  

轉載于:https://my.oschina.net/zhanghaiyang/blog/597627

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448581.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

19-6/28作業:100以內偶數求和

?作業要求 ?分析思路 在循環里面增加約束&#xff0c;使累加1變成累加2 ?do-while循環代碼 public class GaoSiFor { public static void main(String[] args) { //定義兩個變量 int sum 0; int i 0; //開始循環 do{ //…

Visual Studio Code 常用快捷鍵

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、常用快捷鍵 編輯器與窗口管理 打開一個新窗口&#xff1a; CtrlShiftN 關閉窗口&#xff1a; CtrlShiftW 新建文件 CtrlN 文件之間切…

李洋瘋狂C語言之用遞歸解決李白喝酒問題(附填空題解法)

這是14年藍橋杯的一道填空題 題目&#xff1a;“李白街上走&#xff0c;提壺去買酒&#xff0c;遇店加一倍&#xff0c;見花喝一斗”&#xff0c; 途中&#xff0c;遇見5次店&#xff0c;見了10此花&#xff0c;壺中原有2斗酒&#xff0c;最后剛好喝 完酒&#xff0c;要求最…

coco creator編輯動畫坑之拖圖片

如圖所示&#xff0c;批量選中多張圖片之后&#xff0c;拖到右下角的框中&#xff0c;發現有時候可以有時候不行。這個我覺得是個軟件的bug 后來經過測試發現只有在粉紅色圈的高度才可以正確放入圖片&#xff0c;否則都放不了。轉載于:https://www.cnblogs.com/codeDevotee/p/1…

Spring MVC常用注解說明

2019獨角獸企業重金招聘Python工程師標準>>> 使用Spring MVC的注解及其用法和其它相關知識來實現控制器功能。02 之前在使用Struts2實現MVC的注解時&#xff0c;是借助struts2-convention這個插件&#xff0c;如今我們使用Spring自帶的spring-webmvc組件來實現同…

Ubuntu12.10中安裝ati顯卡驅動amd driver 13.1

1. 先安裝依賴庫 [plain] view plaincopyprint?sudo apt-get install build-essential cdbs dh-make dkms execstack dh-modaliases fakeroot libqtgui4 debhelper debconf libstdc6 dkms libqtgui4 libelfg0 linux-headers-generic 2. 如果是64位系統&#xff0c;需要安裝3…

李洋瘋狂C語言之用遞歸解決李白喝酒問題(二)

之前用遞歸求出了多少種情況&#xff0c;如果要打印出所有的結果&#xff0c;就需要一個數組來存放可能的情況&#xff1a; /****************************************************** 題目&#xff1a;“李白街上走&#xff0c;提壺去買酒&#xff0c;遇店加一倍&#xff0c;…

vue.js 三種方式安裝 ( vue-cli ) 、安裝詳解、創建項目

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Vue.js&#xff08;讀音 /vju?/, 類似于 view&#xff09;是一個構建數據驅動的 web 界面的漸進式框架。Vue.js 的目標是通過盡可能簡單…

C學習筆記:基礎

C 語言是一種面向過程的高級語言。 運行速度與匯編語言編寫的代碼運行速度幾乎一樣。C 語言的源碼文件擴展名為 .c 例如 hello.c 。 概述 C 語言有三套標準分別是 C89 C99 C11&#xff0c;目前最常用的是 C99 標準。 C 編譯器&#xff0c;寫在源文件中的源代碼需要編譯&#xf…

spring-boot

1,創建springboot 工程 2.導入你所需要的包, (這篇只是簡單介紹一下,沒導入太過復雜的包)Developer tools Sprig Boot DevTools LombokWed Spring Wed Starter 轉載于:https://www.cnblogs.com/lxx-1843693653/p/11104622.html

李洋瘋狂C語言之合法幀

題目: 輸入一個字符串,同時輸入幀頭和幀尾(可以是多個字符),將該字符串中合法的幀識別出來. 提示:幀頭和幀尾分別是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法幀 #include <stdio.h> #include <string.h> #include <stdlib.h>ch…

vuex 最簡單、最詳細的入門文檔

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如果你在使用 vue.js , 那么我想你可能會對 vue 組件之間的通信感到崩潰 。 我在使用基于 vue.js 2.0 的UI框架 ElementUI 開發網站的時…

科目三路考操作要點

一踏&#xff08;離合器&#xff09;二掛&#xff08;擋&#xff09;三撥&#xff08;左轉向燈&#xff09;四看&#xff08;左右鏡及側頭觀察周邊情況&#xff09;五按&#xff08;喇叭&#xff09;六松&#xff08;閘&#xff0c;即手制動&#xff09; 在科目三考試途中的注…

10種頂級javascript框架比較-The Top 10 Javascript MVC Frameworks

轉載于&#xff1a;http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/ Gordon L. Hempton是西雅圖的一位黑客和設計師&#xff0c;他花費了幾個月的時間研究和比較了12種流行的JavaScript MVC框架&#xff0c;并在博客中總結了每種框架的優缺點&am…

數據結構之順序表(一)

有關順序表&#xff0c;由于代碼太長&#xff0c;我將分成2部分&#xff0c;這邊是頭文件SeqList.h和主函數&#xff1a; #ifndef __SEQLIST_H__ #define __SEQLIST_H__#define FALSE -1 #define TRUE 0#define INIT_SIZE 100 #define INCRESS_SIZE 20typedef int Seq…

centos7 安裝 node.js 運行環境、卸載

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一.安裝 1.進入官網下載最新版本 https://nodejs.org/en/ 選擇下載后上傳或直接使用wget下載 wget https://nodejs.org/dist/v8.11.…

白云山腳下的廉價菜-飲勝酒家

亞運將至&#xff0c;我們已經漸漸感受到那種氣氛了&#xff0c;最明顯就是搭公交車不用錢&#xff0c;我可以不再做那輛兜路的54路車&#xff0c;每天可以睡多10分鐘&#xff0c;然后從家樓下轉3趟車上班&#xff0c;重要部部都有位置坐&#xff0c;每天在路上都看到有好多好多…

科目三考試指南

正在準備科目三的您&#xff0c;對順利通過考試有信心嗎&#xff1f;今天&#xff0c;小編為大家帶來科目三靠邊停車技巧&#xff0c;通過講解靠邊停車考試要求&#xff0c;讓學員更好地掌握相關技巧&#xff0c;希望能幫到大家。 靠邊停車考試項目中規定&#xff0c;車前保險杠…

docker學習4-docker安裝mysql環境

前言 docker安裝mysql環境非常方便&#xff0c;簡單的幾步操作就可以了 拉取mysql鏡像 先拉取mysql的鏡像&#xff0c;可以在docker的鏡像倉庫找到不同TAG標簽的版本https://hub.docker.com/_/mysql?tabtags 我這里選擇mysql:5.7標簽 [rootyoyo ~]# docker pull mysql:5.7 5.7…

數據結構之順序表(二)

這是接著之前的剩下來的部分&#xff1a; #include <stdlib.h> #include "SeqList.h" #include <stdio.h>SeqList *Create_List() {//創建一個順序表SeqList* s (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (NULL s){return NULL;}//初始化順…