| 1、首先,確保eclipse中已經(jīng)配置了maven,如下圖: 2、New-Project-MavenProject...如下圖,選擇create a simple project,原因父項(xiàng)目需要建立的packaging為POM,子項(xiàng)目建立的packaging為jar或者war,勾選此處,在下一步中可以選擇packaging: 3、選擇打包方式 4、創(chuàng)建子工程,New-Project-Maven Module,再次提醒,父項(xiàng)目的packaging選擇POM,子項(xiàng)目選擇Jar或者war,順便說一句,一般來說,要創(chuàng)建在tomcat里運(yùn)行的項(xiàng)目,應(yīng)該是要創(chuàng)建war,比如本文說的service子項(xiàng)目和web子項(xiàng)目,應(yīng)該是創(chuàng)建成war,但是有例外是,如果要創(chuàng)建spring boot微服務(wù)項(xiàng)目,因?yàn)閟pring boot采用的都是富jar形式,就需要所有的子項(xiàng)目都為jar,這僅僅是個人理解,具體按照自己的需求建立。 5、選擇子工程的打包方式,這里設(shè)置為jar 6、寫到此時,已經(jīng)創(chuàng)建完成了,我們可以看一下項(xiàng)目架構(gòu) 7、我們把整個項(xiàng)目(父項(xiàng)目)上打包,編譯運(yùn)行,再看一下項(xiàng)目架構(gòu): 8、我們可以在DemoParent-Son2中引用項(xiàng)目DemoParent-Son1,直接在pom文件中加入依賴即可。 這樣,在子項(xiàng)目DemoParent-Son2中就能直接調(diào)用子項(xiàng)目DemoParent-Son1中的類。 注意:子工程之間的引用:子工程若是web項(xiàng)目(對應(yīng)的自動達(dá)成的就是war包),可以引用子工程是java項(xiàng)目的工程。但是子工程是java項(xiàng)目卻不能引用子工程是web項(xiàng)目的工程。 9、寫到此時,項(xiàng)目已經(jīng)告一段落了,但是小編基于需求,又嘗試了一下maven的子項(xiàng)目war與war之間的引用。發(fā)現(xiàn)也是可以的。我們再新建一個web子工程DemoParent-Son3,在pom文件中引入子項(xiàng)目DemoParent-Son2,配置文件如下:  兩個項(xiàng)目編譯、打包之后,生成的WAR文件(DemoParent-Son3.war和DemoParent-Son2.war)幾乎是相同的,盡管DemoParent-Son3項(xiàng)目還沒有任何類和資源。重要的是,兩個WAR歸檔文件中都有全部的依賴庫和配置。 根據(jù)Java規(guī)范,classpath不能指定WAR文件。這就意味著在編譯時,DemoParent-Son3項(xiàng)目無法訪問DemoParent-Son2項(xiàng)目中定義的類,所以在DemoParent-Son3l項(xiàng)目中,我們不能像常規(guī)類組件那樣擴(kuò)展或使用DemoParent-Son2定義的類。要解決這一問題,我們必須重新設(shè)置maven-war-plugin的一項(xiàng)缺省配置,該設(shè)置如下面所示: 可以看到,DemoParent-Son3項(xiàng)目用DemoParent-Son2 WAR創(chuàng)建最終的Web歸檔文件,出于編譯需要,還使用了DemoParent-Son2的類(打包在JAR里)。我們將屬性classifier設(shè)置為classes,以此定義該從倉庫中選擇哪個工件。將scope設(shè)置為provided,則是告訴Maven只在編譯時需要該工件,運(yùn)行時則從其他地方獲得?!捌渌胤健碑?dāng)然就是指DemoParent-Son3項(xiàng)目的WAR工件,WAR插件會將WAR和JAR合并在一起?,F(xiàn)在已經(jīng)正確配置了依賴關(guān)系,那我們就開始測試一下。在DemoParent-Son3中創(chuàng)建一個測試類Test,在測試類中調(diào)用一下DemoParent-Son2中的類Student,如下: 源代碼鏈接https://pan.baidu.com/s/13baE0YjgbEGbM263MRWb5g | 
|  |