<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Maven實(shí)戰(zhàn)與原理分析(二):maven實(shí)戰(zhàn)精華

          共 8987字,需瀏覽 18分鐘

           ·

          2021-12-28 19:04

          1 Maven 介紹

          1.1 為什么使用 Maven

          由于 Java 的生態(tài)非常豐富,無(wú)論你想實(shí)現(xiàn)什么功能,都能找到對(duì)應(yīng)的工具類(lèi),這些工具類(lèi)都是以 jar 包的形式出現(xiàn)的,例如 Spring,SpringMVC、MyBatis、數(shù)據(jù)庫(kù)驅(qū)動(dòng),等等,都是以 jar 包的形式出現(xiàn)的,jar 包之間會(huì)有關(guān)聯(lián),在使用一個(gè)依賴(lài)之前,還需要確定這個(gè)依賴(lài)所依賴(lài)的其他依賴(lài),所以,當(dāng)項(xiàng)目比較大的時(shí)候,依賴(lài)管理會(huì)變得非常麻煩臃腫,這是 Maven 解決的第一個(gè)問(wèn)題。

          Maven 還可以處理多模塊項(xiàng)目。簡(jiǎn)單的項(xiàng)目,單模塊分包處理即可,如果項(xiàng)目比較復(fù)雜,要做成多模塊項(xiàng)目,例如一個(gè)電商項(xiàng)目有訂單模塊、會(huì)員模塊、商品模塊、支付模塊...,一般來(lái)說(shuō),多模塊項(xiàng)目,每一個(gè)模塊無(wú)法獨(dú)立運(yùn)行,要多個(gè)模塊合在一起,項(xiàng)目才可以運(yùn)行,這個(gè)時(shí)候,借助 Maven 工具,可以實(shí)現(xiàn)項(xiàng)目的一鍵打包。

          Maven 之前,我們更多的是使用 Ant 的項(xiàng)目構(gòu)建工具,Ant 有一個(gè)特點(diǎn),每次都得寫(xiě),每次都寫(xiě)的差不多,配置也臃腫。所以,后來(lái)搞出來(lái) Maven。Maven 就是最先進(jìn)的版本構(gòu)建工具嗎?不是的,只不過(guò),目前在 Java 領(lǐng)域 Maven 使用比較多。除了 Maven,還有 Gradle。

          1.2 Maven 是什么

          Maven 是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型(Project Object Model),反映在配置中,就是一個(gè) pom.xml 文件。是一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目的生命周期、一個(gè)依賴(lài)管理系統(tǒng),另外還包括定義在項(xiàng)目生命周期階段的插件(plugin)以及目標(biāo)(goal)。

          當(dāng)我們使用 Maven 的使用,通過(guò)一個(gè)自定義的項(xiàng)目對(duì)象模型,pom.xml 來(lái)詳細(xì)描述我們自己的項(xiàng)目。

          Maven 中的有兩大核心:

          • 依賴(lài)管理:對(duì) jar 的統(tǒng)一管理(Maven 提供了一個(gè) Maven 的中央倉(cāng)庫(kù),mvnrepository.com/,當(dāng)我們?cè)陧?xiàng)目中添加完…?會(huì)自動(dòng)去中央倉(cāng)庫(kù)下載相關(guān)的依賴(lài),并且解決依賴(lài)的依賴(lài)問(wèn)題)

          • 項(xiàng)目構(gòu)建:對(duì)項(xiàng)目進(jìn)行編譯、測(cè)試、打包、部署、上傳到私服等

          2. Maven 安裝

          • Maven 是 Java 項(xiàng)目,因此必須先安裝 JDK。


          下載 Maven:

          • 下載 Maven

          下載地址:maven.apache.org/download.cg…


          • 解壓并配置


          配置,只需要配置環(huán)境變量即可:

          首先配置 MAVEN_HOME:


          然后配置環(huán)境變量:


          • 檢驗(yàn)安裝


          如果使用了 IntelliJ IDEA ,可以不用去額外下載 Maven,直接使用 IDEA 中自帶的 Maven 插件即可。IntelliJ IDEA 中自帶的 Maven 插件在?\ideaIU-2019.2.4.win\plugins\maven\lib\maven3

          3. Maven 配置

          實(shí)際上,沒(méi)有特殊需求的話(huà),安裝好之后直接就可以用了。一般來(lái)說(shuō),還是需要稍微配置一下,比如中央倉(cāng)庫(kù)的問(wèn)題。默認(rèn)使用 Maven 自己的中央倉(cāng)庫(kù),使用起來(lái)網(wǎng)速比較慢,這個(gè)時(shí)候,可以通過(guò)修改配置文件,將倉(cāng)庫(kù)改成國(guó)內(nèi)的鏡像倉(cāng)庫(kù),國(guó)內(nèi)倉(cāng)庫(kù)使用較多的是阿里巴巴的倉(cāng)庫(kù)。

          3.1 倉(cāng)庫(kù)類(lèi)型

          倉(cāng)庫(kù)類(lèi)型說(shuō)明
          本地倉(cāng)庫(kù)就是你自己電腦上的倉(cāng)庫(kù),每個(gè)人電腦上都有一個(gè)倉(cāng)庫(kù),默認(rèn)位置在?當(dāng)前用戶(hù)名\.m2\repository
          私服倉(cāng)庫(kù)一般來(lái)說(shuō)是公司內(nèi)部搭建的 Maven 私服,處于局域網(wǎng)中,訪(fǎng)問(wèn)速度較快,這個(gè)倉(cāng)庫(kù)中存放的 jar 一般就是公司內(nèi)部自己開(kāi)發(fā)的 jar
          中央倉(cāng)庫(kù)有 Apache 團(tuán)隊(duì)來(lái)維護(hù),包含了大部分的 jar,早期不包含 Oracle 數(shù)據(jù)庫(kù)驅(qū)動(dòng),從 2019 年 8 月開(kāi)始,包含了 Oracle 驅(qū)動(dòng)

          現(xiàn)在存在 3 個(gè)倉(cāng)庫(kù),那么 jar 包如何查找呢?


          3.2 本地倉(cāng)庫(kù)配置

          本地倉(cāng)庫(kù)默認(rèn)位置在?當(dāng)前用戶(hù)名\.m2\repository,這個(gè)位置可以自定義,但是不建議大家自定義這個(gè)地址,有幾個(gè)原因:

          1. 雖然所有的本地的 jar 都放在這個(gè)倉(cāng)庫(kù)中,但是并不會(huì)占用很大的空間。

          2. 默認(rèn)的位置比較隱蔽,不容易碰到

          技術(shù)上來(lái)說(shuō),當(dāng)然是可以自定義本地倉(cāng)庫(kù)位置的,在 conf/settings.xml 中自定義本地倉(cāng)庫(kù)位置:


          3.3 遠(yuǎn)程鏡像配置

          由于默認(rèn)的中央倉(cāng)庫(kù)下載較慢,因此,也可以將遠(yuǎn)程倉(cāng)庫(kù)地址改為阿里巴巴的倉(cāng)庫(kù)地址:


          nexus-aliyun
          central
          Nexus aliyun
          http://maven.aliyun.com/nexus/content/groups/public

          復(fù)制代碼


          這段配置,加在 settings.xml 中的 mirrors 節(jié)點(diǎn)中:


          4. Maven 常用命令

          Maven 中有一些常見(jiàn)的命令,如果使用 Eclipse 需要手動(dòng)敲命令,如果使用 IDEA 的話(huà),可以不用命令,直接點(diǎn)點(diǎn)點(diǎn)就可以了。

          常用命令中文含義說(shuō)明
          mvn clean清理這個(gè)命令可以用來(lái)清理已經(jīng)編譯好的文件
          mvn compile編譯將 Java 代碼編譯成 Class 文件
          mvn test測(cè)試項(xiàng)目測(cè)試
          mvn package打包根據(jù)用戶(hù)的配置,將項(xiàng)目打成 jar 包或者 war 包
          mvn install安裝手動(dòng)向本地倉(cāng)庫(kù)安裝一個(gè) jar
          mvn deploy上傳將 jar 上傳到私服

          這里需要注意的是,這些命令都不是獨(dú)立運(yùn)行的,它有一個(gè)順序。舉個(gè)簡(jiǎn)單例子:

          我想將 jar 上傳到私服,那么就要構(gòu)建 jar,就需要執(zhí)行 package 命令,要打包,當(dāng)然也需要測(cè)試,那就要走 mvn test 命令,要測(cè)試就要先編譯.....,因此,最終所有的命令都會(huì)執(zhí)行一遍。不過(guò),開(kāi)發(fā)者也可以手動(dòng)配置不執(zhí)行某一個(gè)命令,這就是跳過(guò)。一般來(lái)是,除了測(cè)試,其他步驟都不建議跳過(guò)。

          當(dāng)然,如果開(kāi)發(fā)者使用了 IDEA ,這些命令不用手動(dòng)敲,點(diǎn)一下就行:


          4.1 通過(guò)命令來(lái)構(gòu)建項(xiàng)目

          可以直接通過(guò)命令來(lái)構(gòu)建一個(gè) Maven 項(xiàng)目,不過(guò)在實(shí)際開(kāi)發(fā)中,一般使用 Eclipse 或者 IDEA 就可以直接創(chuàng)建 Maven 項(xiàng)目了。

          創(chuàng)建命令:

          mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
          復(fù)制代碼



          看到如下提示,表示項(xiàng)目創(chuàng)建成功:


          項(xiàng)目創(chuàng)建成功后,就兩個(gè)文件:


          說(shuō)明對(duì)一個(gè)任何一個(gè)項(xiàng)目而言,最最核心的就是這兩個(gè)。


          pom.xml 中,則定義了所有的項(xiàng)目配置。


          4.2 對(duì)項(xiàng)目進(jìn)行打包

          接下來(lái),我們通過(guò) mvn package 命令可以將剛剛創(chuàng)建的項(xiàng)目打成一個(gè) jar 包。

          在打包之前,需要配置 JDK 的版本至少為 7 以上,因此,我們還需要手動(dòng)修改一下 pom.xml 文件,即添加如下配置:


          添加完成后,執(zhí)行打包命令,注意執(zhí)行所有命令時(shí),命令行要定位到 pom.xml 文件所在的目錄,看到如下提示,表示項(xiàng)目打包成功。


          4.3 將項(xiàng)目安裝到本地倉(cāng)庫(kù)

          如果需要將項(xiàng)目安裝到本地倉(cāng)庫(kù),可以直接執(zhí)行 mvn install 命令,注意,mvn install 命令會(huì)包含上面的 mvn package 過(guò)程。


          安裝到本地倉(cāng)庫(kù)之后,這個(gè)時(shí)候,點(diǎn)開(kāi)自己的本地倉(cāng)庫(kù),就可以看到相關(guān)的 jar 了。

          5. IDEA 中使用 Maven

          不同于 Eclipse,IDEA 安裝完成后,就可以直接使用 Maven 了。

          5.1 Maven 相關(guān)配置

          IDEA 中,Maven 的配置在?File->Settings->Build,Execution,Deployment->Build Tools->Maven:


          5.2 JavaSE 工程創(chuàng)建

          首先在創(chuàng)建一個(gè)工程時(shí),選擇 Maven 工程:


          如果勾選上 Create from archetype ,則表示可以根據(jù)一個(gè)項(xiàng)目骨架(項(xiàng)目模板)來(lái)創(chuàng)建一個(gè)新的工程,不過(guò),如果只是創(chuàng)建 JavaSE 項(xiàng)目,則不用選擇項(xiàng)目骨架。直接 Next 即可。然后填入項(xiàng)目的坐標(biāo),即 groupId 和 artifactId。


          填完之后,直接 Next 即可。這樣,我們就會(huì)獲取一個(gè) JavaSE 工程,項(xiàng)目結(jié)構(gòu)和你用命令創(chuàng)建出來(lái)的項(xiàng)目一模一樣。


          5.3 JavaWeb 工程創(chuàng)建

          在 IDEA 中,創(chuàng)建 Maven Web 項(xiàng)目,有兩種思路:

          • 首先創(chuàng)建一個(gè) JavaSE 項(xiàng)目,然后手動(dòng)將 JavaSE 項(xiàng)目改造成一個(gè) JavaWeb 項(xiàng)目

          • 創(chuàng)建項(xiàng)目時(shí)選擇項(xiàng)目骨架,骨架就選擇 webapp

          兩種方式中,推薦使用第一種方式。

          5.3.1 改造 JavaSE 項(xiàng)目

          這種方式,首先創(chuàng)建一個(gè) JavaSE 項(xiàng)目,創(chuàng)建步驟和上面的一致。

          項(xiàng)目創(chuàng)建完成后,首先修改 pom.xml ,配置項(xiàng)目的打包格式為 war 包。?這樣,IDEA 就知道當(dāng)前項(xiàng)目是一個(gè) Web 項(xiàng)目:


          然后,選中 JavaSE 工程,右鍵單擊,選擇 Open Module Settings,或者直接按 F4,然后選擇 Web,如下圖:


          接下來(lái),在 webapp 目錄中,添加 web.xml 文件。


          注意,一定要修改 web.xml 文件位置:


          配置完成后,點(diǎn)擊 OK 退出。

          項(xiàng)目創(chuàng)建完成后,接下來(lái)就是部署了。

          部署,首先點(diǎn)擊 IDEA 右上角的 Edit Configurations:


          然后,配置 Tomcat:



          接下來(lái)選擇 Deployment 選項(xiàng)卡,配置要發(fā)布的項(xiàng)目:



          最后,點(diǎn)擊 IDEA 右上角的三角符號(hào),啟動(dòng)項(xiàng)目。


          5.3.2 通過(guò) webapp 骨架直接創(chuàng)建

          這種方式比較簡(jiǎn)單,基本上不需要額外的配置,項(xiàng)目創(chuàng)建完成后,就是一個(gè) web 項(xiàng)目。只需要我們?cè)趧?chuàng)建項(xiàng)目時(shí),選擇 webapp 骨架即可。


          選擇骨架之后,后面的步驟和前文一致。

          項(xiàng)目創(chuàng)建成功后,只有 webapp 目錄,這個(gè)時(shí)候,自己手動(dòng)創(chuàng)建 java 和 resources 目錄,創(chuàng)建完成后,右鍵單擊,選擇 Mark Directory As,將 java 目錄標(biāo)記為 sources root,將 resources 目錄標(biāo)記為 resources root 即可。

          凡是在 IDEA 右下角看到了 Enable Auto Import 按鈕,一定點(diǎn)一下

          6. Maven 依賴(lài)管理

          Maven 項(xiàng)目,如果需要使用第三方的控件,都是通過(guò)依賴(lài)管理來(lái)完成的。這里用到的一個(gè)東西就是 pom.xml 文件,概念叫做項(xiàng)目對(duì)象模型(POM,Project Object Model),我們?cè)?pom.xml 中定義了 Maven 項(xiàng)目的形式,所以,pom.xml 相當(dāng)于是 Maven 項(xiàng)目的一個(gè)地圖。就類(lèi)似于 web.xml 文件用來(lái)描述三大 web 組件一樣。

          這個(gè)地圖中都涉及到哪些東西呢?

          6.1 Maven 坐標(biāo)



          junit
          junit
          4.11
          test


          復(fù)制代碼


          • dependencies

          在 dependencies 標(biāo)簽中,添加項(xiàng)目需要的 jar 所對(duì)應(yīng)的 maven 坐標(biāo)。

          • dependency

          一個(gè) dependency 標(biāo)簽表示一個(gè)坐標(biāo)

          • groupId

          團(tuán)體、公司、組織機(jī)構(gòu)等等的唯一標(biāo)識(shí)。團(tuán)體標(biāo)識(shí)的約定是它以創(chuàng)建這個(gè)項(xiàng)目的組織名稱(chēng)的逆向域名(例如 org.javaboy)開(kāi)頭。一個(gè) Maven 坐標(biāo)必須要包含 groupId。一些典型的 groupId 如 apache 的 groupId 是 org.apache.

          • artifactId

          artifactId 相當(dāng)于在一個(gè)組織中項(xiàng)目的唯一標(biāo)識(shí)符。

          • version

          一個(gè)項(xiàng)目的版本。一個(gè)項(xiàng)目的話(huà),可能會(huì)有多個(gè)版本。如果是正在開(kāi)發(fā)的項(xiàng)目,我們可以給版本號(hào)加上一個(gè) SNAPSHOT,表示這是一個(gè)快照版(新建項(xiàng)目的默認(rèn)版本號(hào)就是快照版)

          • scope

          表示依賴(lài)范圍。


          我們添加了很多依賴(lài),但是不同依賴(lài)的使用范圍是不一樣的。最典型的有兩個(gè),一個(gè)是數(shù)據(jù)庫(kù)驅(qū)動(dòng),另一個(gè)是單元測(cè)試。

          數(shù)據(jù)庫(kù)驅(qū)動(dòng),在使用的過(guò)程中,我們自己寫(xiě)代碼,寫(xiě)的是 JDBC 代碼,只有在項(xiàng)目運(yùn)行時(shí),才需要執(zhí)行 MySQL 驅(qū)動(dòng)中的代碼。所以,MySQL 驅(qū)動(dòng)這個(gè)依賴(lài)在添加到項(xiàng)目中之后,可以設(shè)置它的 scope 為 runtime,編譯的時(shí)候不生效。

          單元測(cè)試,只在測(cè)試的時(shí)候生效,所以可以設(shè)置它的 scope 為 test,這樣,當(dāng)項(xiàng)目打包發(fā)布時(shí),單元測(cè)試的依賴(lài)就不會(huì)跟著發(fā)布。

          6.2 依賴(lài)沖突

          • 依賴(lài)沖突產(chǎn)生的原因


          在圖中,a.jar 依賴(lài) b.jar,同時(shí) a.jar 依賴(lài) d.jar,這個(gè)時(shí)候,a 和 b、d 的關(guān)系是直接依賴(lài)的關(guān)系,a 和 c 的關(guān)系是間接依賴(lài)的關(guān)系。

          6.2.1 沖突解決

          1. 先定義先使用

          2. 路徑最近原則(直接聲明使用)

          以 spring-context 為例,下圖中 x 表示失效的依賴(lài)(優(yōu)先級(jí)低的依賴(lài),即路徑近的依賴(lài)優(yōu)先使用):


          上面這兩條是默認(rèn)行為。

          我們也可以手動(dòng)控制。手動(dòng)控制主要是通過(guò)排除依賴(lài)來(lái)實(shí)現(xiàn),如下:


          org.springframework
          spring-context
          5.1.9.RELEASE


          org.springframework
          spring-core



          復(fù)制代碼


          這個(gè)表示從 spring-context 中排除 spring-core 依賴(lài)。

          7. Maven 私服

          Maven 倉(cāng)庫(kù)管理也叫 Maven 私服或者代理倉(cāng)庫(kù)。使用 Maven 私服有兩個(gè)目的:

          1. 私服是一個(gè)介于開(kāi)發(fā)者和遠(yuǎn)程倉(cāng)庫(kù)之間的代理

          2. 私服可以用來(lái)部署公司自己的 jar

          7.1 Nexus 介紹

          Nexus 是一個(gè)強(qiáng)大的 Maven 倉(cāng)庫(kù)管理工具,使用 Nexus 可以方便的管理內(nèi)部倉(cāng)庫(kù)同時(shí)簡(jiǎn)化外部倉(cāng)庫(kù)的訪(fǎng)問(wèn)。官網(wǎng)是:www.sonatype.com/

          7.2 安裝

          • 下載

          下載地址:www.sonatype.com/download-os…

          • 解壓

          將下載下來(lái)的壓縮包,拷貝到一個(gè)沒(méi)有中文的路徑下,然后解壓。

          • 啟動(dòng)

          解壓之后,打開(kāi) cmd 窗口(以管理員身份打開(kāi) cmd 窗口),然后定位了 nexus 解壓目錄,執(zhí)行 nexus.exe/run 命令啟動(dòng)服務(wù)。


          這個(gè)啟動(dòng)稍微有點(diǎn)慢,大概有 1 兩分鐘的樣子

          啟動(dòng)成功后,瀏覽器輸入 http://lcoalhost:8081 打開(kāi)管理頁(yè)面。

          打開(kāi)管理頁(yè)面后,點(diǎn)擊右上角上的登錄按鈕進(jìn)行登錄,默認(rèn)的用戶(hù)名/密碼是 admin/admin123。當(dāng)然,用戶(hù)也可以點(diǎn)擊設(shè)置按鈕,手動(dòng)配置其他用戶(hù)。


          點(diǎn)擊 Repositories 可以查看倉(cāng)庫(kù)詳細(xì)信息:


          7.2.1 倉(cāng)庫(kù)類(lèi)型

          名稱(chēng)說(shuō)明
          proxy表示這個(gè)倉(cāng)庫(kù)是一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的代理,最典型的就是代理 Maven 中央倉(cāng)庫(kù)
          hosted宿主倉(cāng)庫(kù),公司自己開(kāi)發(fā)的一些 jar 存放在宿主倉(cāng)庫(kù)中,以及一些在 Maven 中央倉(cāng)庫(kù)上沒(méi)有的 jar
          group倉(cāng)庫(kù)組,包含代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù)
          virtual虛擬倉(cāng)庫(kù)

          7.2.2 上傳 jar

          上傳 jar,配置兩個(gè)地方:

          • Maven 的 conf/settings.xml 文件配置:


          releases
          admin
          admin123


          snapshots
          admin
          admin123

          復(fù)制代碼


          在要上傳 jar 的項(xiàng)目的 pom.xml 文件中,配置上傳路徑:



          releases
          http://localhost:8081/repository/maven-releases/


          snapshots
          http://localhost:8081/repository/maven-snapshots/


          復(fù)制代碼


          配置完成后,點(diǎn)擊 deploy 按鈕,或者執(zhí)行 mvn deploy 命令就可以將 jar 上傳到私服上。

          7.2.3 下載私服上的 jar

          直接在項(xiàng)目中添加依賴(lài),添加完成后,額外增加私服地址即可:



          local-repository
          http://localhost:8081/repository/maven-public/

          true


          true



          復(fù)制代碼


          8. 聚合工程

          所謂的聚合工程,實(shí)際上也就是多模塊項(xiàng)目。在一個(gè)比較大的互聯(lián)網(wǎng)項(xiàng)目中,項(xiàng)目需要拆分成多個(gè)模塊進(jìn)行開(kāi)發(fā),比如訂單模塊、VIP 模塊、支付模塊、內(nèi)容管理模塊、CMS、CRM 等等。這種拆分方式,實(shí)際上更接近于微服務(wù)的思想。在一個(gè)模塊中,還可以繼續(xù)進(jìn)行拆分,例如分成 dao、service、controller 等。

          有人可能會(huì)說(shuō),這個(gè)分包不就行了嗎?

          小項(xiàng)目當(dāng)然可以分包,大項(xiàng)目就沒(méi)法分包了。比如,在一個(gè)大的電商系統(tǒng)中,有一個(gè)子模塊叫做用戶(hù)管理、還有一個(gè)子模塊叫做訂單管理,這兩個(gè)子模塊都涉及到用戶(hù),像這種情況,我們就需要將用戶(hù)類(lèi)單獨(dú)提取出來(lái),做成單獨(dú)的模塊,供其他模塊調(diào)用。

          8.1 多模塊項(xiàng)目展示

          |--javaboy-parent
          |-- javaboy-cms
          |-- javaboy-crm
          |-- javaboy-manger
          |-- javaboy-manager-model
          |-- javaboy-manager-dao
          |-- javaboy-manager-service
          |-- javaboy-manager-web
          復(fù)制代碼


          以 javaboy-manger 為例,javaboy-manager 本身并不提供功能,它只負(fù)責(zé)管理他自己的子模塊,而他的子模塊每一個(gè)都無(wú)法獨(dú)立運(yùn)行,需要四個(gè)結(jié)合在一起,才可以運(yùn)行。項(xiàng)目打包時(shí),model、dao、service 都將打包成 jar,然后會(huì)自動(dòng)將打包好的 jar 復(fù)制到 web 中,再自動(dòng)將 web 打包成 war 包。

          8.2 IDEA 中創(chuàng)建聚合工程

          1.創(chuàng)建一個(gè)空的 Maven 項(xiàng)目:


          項(xiàng)目創(chuàng)建完成后,由于 parent 并不參與業(yè)務(wù)的實(shí)現(xiàn),只是用來(lái)管理它的子模塊,因此,src 目錄可以將其刪除。


          2.選中當(dāng)前工程,右鍵單擊,New->Module


          然后繼續(xù)選擇創(chuàng)建一個(gè) Maven 項(xiàng)目:


          在 IDEA 中,已經(jīng)默認(rèn)指明了當(dāng)前 Module 的 parent,開(kāi)發(fā)者只需要填入當(dāng)前 Module 的 artifactId 即可:


          javaboy-manager 創(chuàng)建完成后,此時(shí),觀(guān)察 javaboy-parent 的 pom.xml 文件,發(fā)現(xiàn)它自動(dòng)加上了 packing 屬性:


          其中,它的 packaging 屬性值為 pom,這表示它是一個(gè)聚合工程,同時(shí),他還多了 modules 節(jié)點(diǎn),指明了它自己的子模塊。同時(shí),注意 javaboy-manager ,它自身多了一個(gè) parent 節(jié)點(diǎn),這個(gè) parent 節(jié)點(diǎn)描述了它的父模塊的屬性值:


          javaboy-parent
          org.javaboy
          1.0-SNAPSHOT

          復(fù)制代碼


          這個(gè) parent 不僅僅是一個(gè)簡(jiǎn)單的父子關(guān)系描述,它存在繼承關(guān)系,一般我們可以在 parent 中統(tǒng)一定義依賴(lài)或者插件的版本號(hào)

          3.由于 javaboy-manager 本身也是一個(gè)聚合工程,因此,javaboy-manager 的 src 目錄也可以刪除。


          4.選中 javaboy-manager,右鍵單擊,New->Module 創(chuàng)建一個(gè)新的 Maven 模塊出來(lái)。這個(gè)步驟類(lèi)似于第二步,不在贅述。這里,新的 javaboy-manager-model 創(chuàng)建成功后,我們手動(dòng)配置它的 packaging 屬性值為 jar。


          5.依照第 4 步,再分別創(chuàng)建 javaboy-manager-service 以及 javaboy-manager-dao 6.繼續(xù)創(chuàng)建 javaboy-manager-web 模塊,不同于其他模塊,web 模塊需要打包成 war。web 模塊創(chuàng)建可以參考【第五篇文章】。7.web 工程創(chuàng)建完成后,完善模塊之間的繼承關(guān)系。

          javaboy-manager-web 依賴(lài) javaboy-manager-service javaboy-manager-service 依賴(lài) javaboy-manager-dao javaboy-manager-dao 依賴(lài) javaboy-manager-model

          注意,依賴(lài)默認(rèn)是有傳遞性的,即在 javaboy-manager-dao 中依賴(lài)了 javaboy-manager-model,在 javaboy-manager-service 也能訪(fǎng)問(wèn)到。

          配置后的依賴(lài)關(guān)系如下圖:


          接下來(lái)就可以在不同的模塊中寫(xiě)代碼,然后進(jìn)行項(xiàng)目部署了。部署方式參考【第五篇文章】

          有一個(gè)需要注意的地方,在多模塊項(xiàng)目中,web 項(xiàng)目打包需要注意以下問(wèn)題:

          1. 不可以直接單獨(dú)打包

          2. 如果要打包,有兩種方式:

          • 第一種就是先手動(dòng)挨個(gè)將 model、dao、service 安裝到本地倉(cāng)庫(kù)

          • 從聚合工程處打包,即從 web 的parent 處打包。

          —?【 THE END 】—
          公眾號(hào)[程序員黃小斜]全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲取!

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) PDF?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話(huà),在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产成人久久精品77777综合 | 在线视频日本不卡 | 五十路视频在线 | 草草永久地址发布页①免费 | 人人爽人人操人人 |