-Java- Maven命令

1.Maven的開發(fā)流程

Maven的創(chuàng)建工程一般在工具中執(zhí)行,可以進(jìn)行創(chuàng)建工程的工具非常多,如ecplise。 怎么用maven開發(fā)? 一般在工具上創(chuàng)建一個(gè)工程就開始寫代碼,把所有的東西都寫在一個(gè)工程里面,這樣好嗎?我們用maven該怎么開發(fā)呢? 在一個(gè)工程里寫所有的東西,所以的東西集合在一處,不方便升級(jí)、不方便修改、不方便擴(kuò)展、復(fù)用。而maven提倡的是模塊化編程了,我們做模塊化編程就不應(yīng)該把【學(xué)Java,到凱哥學(xué)堂kaige123.com】所有的東西寫在一個(gè)工程里面了。 Maven里面的建議->模塊化編程,一個(gè)項(xiàng)目拆開為很多個(gè)模塊、多個(gè)子工程、方便以后的維護(hù)和復(fù)用。如果所有寫在一個(gè)工程里面,某個(gè)地方出錯(cuò)了,就要拿整個(gè)工程出來修改或擴(kuò)展,這樣錯(cuò)誤一多的時(shí)候,會(huì)老是要去修改這整個(gè)工程,會(huì)很亂。如果我們用maven呢?把一個(gè)工程劃分為多個(gè)子模塊、子工程、以后如果某個(gè)功能或子工程需要修改,只要單單修改對(duì)應(yīng)的子模塊和子工程就行了,其他沒有錯(cuò)誤的就不用動(dòng),這樣比較方便。 就像汽車一樣,不是由一個(gè)公司來完成整車制造,而是把它拆分為很多模塊,把各個(gè)模塊分給對(duì)應(yīng)模塊最厲害的公司去做,然后把所有模塊整合起來就是一輛很棒的汽車了。 樂高、模塊化手機(jī)等東西都是用到了把一個(gè)項(xiàng)目劃分為多個(gè)模塊的理念思想的。 銀行作業(yè)模塊化開發(fā)演示: 比如,我們的銀行開發(fā)分為三個(gè)模塊分別是:1.bank-id、bank-banklogic、bank-view,這三個(gè)模塊,我們可以建三個(gè)maven工程,然后因?yàn)閎ank-banklogic里面需要依賴與bank-id模塊,我們則把bank-id依賴進(jìn)bank-banklogic里面去。還有我們的bank-view模塊需要依賴bank-id和bank-banklogic模塊,所以我們就應(yīng)該把兩個(gè)模塊都依賴進(jìn)去,如下:

以上就是一個(gè)項(xiàng)目使用maven工程的大致流程。 上面的項(xiàng)目分成了三個(gè)模塊、三個(gè)工程、雖然做到了模塊化編程,但是我們希望我們能有一個(gè)工程專門用來對(duì)項(xiàng)目的所有模塊進(jìn)行統(tǒng)一管理、統(tǒng)一編譯等操作,我們?cè)撊绾危恳院筮€可以統(tǒng)一測試、統(tǒng)一運(yùn)行,這種統(tǒng)一方式就是聚合。 按照maven的意思就是要建立一個(gè)文件夾,將代表三個(gè)不同子工程的文件夾放到里面去,然后在管理工程目錄下建一個(gè)pom.xml文件來設(shè)置對(duì)三個(gè)子工程管理的一些配置信息,如下:

我們要建立的文件結(jié)構(gòu)就如上圖所示一個(gè)bank-system文件夾下有三個(gè)子工程文件夾和一個(gè)pom.xml文件,其中pom.xml文件用來對(duì)三大子工程模塊進(jìn)行管理。 聚合就是將子工程模塊統(tǒng)一管理、統(tǒng)一編譯、統(tǒng)一測試、統(tǒng)一運(yùn)行,這就是聚合的中心。 怎么用ecplise來建立統(tǒng)一管理的工程呢?

同樣是建立一個(gè)maven工程,在選packing的時(shí)候選pom,然后在pom.xml文件中進(jìn)行聚合設(shè)置,如:

用到modules和module,來把三個(gè)子工程變?yōu)樾枰酆瞎こ虂斫y(tǒng)一管理,記住要../bank-id這樣子寫,因?yàn)檫@三個(gè)子工程和pom.xml文件不在同一個(gè)目錄層下,我們把三個(gè)子工程用一個(gè)工程統(tǒng)一管理后,以后編譯就會(huì)四個(gè)工程一起編譯,測試也是一起測試了。 把項(xiàng)目拆分開各個(gè)模塊來是執(zhí)行了模塊化編程,但是模塊分散后確實(shí)也不好進(jìn)行統(tǒng)一編譯、統(tǒng)一測試、統(tǒng)一運(yùn)行,所以才需要聚合來創(chuàng)建一個(gè)工程來進(jìn)行統(tǒng)一管理。 如果只在管理工程的pom.xml文件中設(shè)置依賴junit是不會(huì)共享到三個(gè)子工程里面去的,要想在下面也用到j(luò)unit,則需要繼承了。

要使用繼承,就是繼承父類maven工程的配置信息,繼承之后,就擁有了父類maven工程里面pom.xml文件中設(shè)置的所有的東西了,先建一個(gè)管理工程students-parent,packing選pom,記住了,一定要選pom,不然可能會(huì)出錯(cuò)。 然后我們?cè)俳ㄒ粋€(gè)maven工程來繼承于它:

新建的maven工程的父類工程的地方的環(huán)球id、骨架id、版本信息等都要選全:

然后,我們?cè)诠芾砉こ痰膒om.xml文件中依賴進(jìn)來junit后,students-view由于繼承了students-parent,所以會(huì)自動(dòng)有了junit,這就是繼承的用處了。 繼承就是繼承別人的依賴,繼承別人的配置,這樣就免得了下面的每個(gè)子工程都去寫依賴,寫配置了,這樣省去了很多麻煩的操作,把父類maven工程的pom.xml文件的內(nèi)容進(jìn)行繼承。 有一個(gè)問題,只要子工程繼承了管理工程,則每個(gè)子工程都要有父類里面的依賴了,但是如果我的有一些子工程不想繼承管理工程里面的所有依賴怎么辦呢?就是我的子工程希望可以選擇性的繼承管理工程里面的依賴,我們則把強(qiáng)制子工程需要繼承的依賴寫在下,把可以選擇性繼承的依賴寫在下:

管理工程的pom.xml文件中的struts依賴寫為子工程可以選擇性繼承的,然后子工程里繼承這個(gè)可以選擇性繼承的依賴的時(shí)候可以少寫一個(gè)版本號(hào):

2.Maven的生命周期

所謂的生命周期,說白了也就是編譯流程,就是maven工程是如何編譯的,從哪里開始編譯,從哪塊走到哪里等等,這就是生命周期,為了好理解,我們把它看做是maven工程的流程,它包含了這個(gè)工程所要走過的所有流程,編譯的過程中有哪些任務(wù)去完成,就像一個(gè)流水線一樣、流水線的任務(wù)操作。 三個(gè)部分:1.清除(clean,有三個(gè)步驟)2.默認(rèn)的(也就是編譯)3.網(wǎng)站生成(site) 清除:哪三個(gè)步驟?首先是清除前的準(zhǔn)備工作,然后是把所有文件刪除掉,最后是清除后的尾部收尾工作。三個(gè)步驟也就是三個(gè)任務(wù),pre-clean、clean、post-clean,每次清除都要執(zhí)行這三個(gè)任務(wù)。 默認(rèn)編譯:在編譯的過程中總共要執(zhí)行的任務(wù)有:

由上圖可知,我們主要比較清楚的任務(wù)有:compile、test-compile、test、package、install等,這些和我們上次講的maven的常用命令剛好是一樣的,也就是說如果也執(zhí)行第15位的test任務(wù),則要把前面的14個(gè)任務(wù)執(zhí)行完成之后,才會(huì)去執(zhí)行第15個(gè)test任務(wù)。 如果要執(zhí)行deploy,則要把所有任務(wù)執(zhí)行一遍,這就是和流水線一樣的,我們要流到下一個(gè)崗位,則上一個(gè)崗位必須完成,整個(gè)編譯有很多個(gè)任務(wù),流水線生成,寫哪個(gè)命令就要走不同的流程、執(zhí)行不同的任務(wù)。以后如果覺得需要在編譯流程中加入某個(gè)任務(wù)也是可以的,我們可以使用插件來,在現(xiàn)有的編譯流程的任務(wù)中插入一些我們需要加入的任務(wù)。

如上所示,如果我們進(jìn)行的安裝任務(wù),則在執(zhí)行到這個(gè)任務(wù)之前,會(huì)先執(zhí)行打jar包、test、testcompile、testResources、compile等任務(wù),如果我們需要在某個(gè)任務(wù)之間插入一個(gè)任務(wù),可以使用插件來實(shí)現(xiàn)。 網(wǎng)站的生成:maven是模塊化開發(fā),開發(fā)時(shí)寫組件,寫完需要發(fā)布,發(fā)布就要生成網(wǎng)頁,所以有網(wǎng)站生成這個(gè)流程,maven可以幫你的組件生成一個(gè)介紹的網(wǎng)頁,如果你需要就需要執(zhí)行網(wǎng)站生成的生命周期,如果不需要就不用執(zhí)行了,一般用不到這個(gè)東西。 三個(gè)生命周期,每個(gè)生命周期有【學(xué)Java,到凱哥學(xué)堂kaige123.com】很多個(gè)任務(wù)組成,學(xué)習(xí)這個(gè)我們首先需要了解一下maven的編譯這樣的流程是怎么完成的,其次我們希望在一個(gè)生命周期的某個(gè)點(diǎn)上加上一個(gè)任務(wù),這個(gè)任務(wù)我們自己來弄,就要用插件了。 在生命周期的某個(gè)點(diǎn)上插入一個(gè)插件去,就是相當(dāng)于插入了一個(gè)任務(wù)了,我們自帶的任務(wù)還是不夠的。 怎么看maven有多少個(gè)任務(wù)? 在apache官網(wǎng)中,進(jìn)入maven頁面->plugin頁面進(jìn)去:

我們需要弄一個(gè)給源碼打包的插件,然后插入編譯流程中,讓編譯過程會(huì)給源碼打包而不僅僅是打jar包:

我們這里配置了插件有打源碼jar包和test源碼的jar包兩種,配置完后,保存然后run as –>test,得到的結(jié)果如右側(cè)所示,就會(huì)有源碼的jar包和test源碼的jar包了。如上圖所示的配置方法。 還可以加如一個(gè)插件來改變JDK的版本:

先在pom.xml文件中寫好配置語句,然后反鍵工程名->maven->update Mavne Project,然后jdk就會(huì)自動(dòng)變成1.6版本的了。 還可以把插件寫到父類maven工程里面去:

上面是父類maven工程的pom.xml文件信息,

下面是子工程的pom.xml信息

在管理工程的pom.xml文件,反鍵->run as ->test,一測試,就會(huì)在子工程下自動(dòng)打好下面的包。 我們還可以配置在編譯的時(shí)候先clean 后package,如:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容