




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
自動化構(gòu)建工具M(jìn)aven(二)自動化工具系列|JAVA架構(gòu)師課程主講老師Tank·Java行業(yè)十年經(jīng)驗·曾就職于凡客、飛牛、順豐等·負(fù)責(zé)應(yīng)用架構(gòu)設(shè)計,核心代碼研發(fā)·在分布式、多并發(fā)、通信等方面具有豐富的經(jīng)驗Maven的核心概念快速入門實戰(zhàn)掌握maven大綱Maven核心概念Maven能夠?qū)崿F(xiàn)自動化構(gòu)建和依賴管理與內(nèi)部機制密不可分,想掌握Maven為什么能自動化構(gòu)建和實現(xiàn)依賴管理,必須了解Maven的九個核心概念1POM2約定的目錄機構(gòu)3坐標(biāo)4依賴5倉庫6生命周期7插件和目標(biāo)8繼承9聚合使用maven新建一個項目使用Maven命令創(chuàng)建Java項目cd到要創(chuàng)建Java項目的文件夾F:>mvnarchetype:generate.dongnao-DartifactId=test2-DarchetypeArtifactId=maven-archetype-quickstart-DinteractiveMode=false使用maven-archetype-quickstart模板創(chuàng)建
Java項目。如果忽視
archetypeArtifactId
選項,所有Maven模板列表將列出maven-archetype-webapp創(chuàng)建web工程POMPOM(ProjectObjectModel):項目對象模型。將Java工程的相關(guān)信息封裝為對象作為便于操作和管理的模型。類比JavaOOP:在java中一切皆為對象,包含屬性和方法(行為),它大大地降低了軟件開發(fā)的難度,使編程就像搭積木一樣簡單。它是Maven中工作的基本單位,這是一個XML文件。學(xué)習(xí)Maven就是學(xué)習(xí)pom.xml文件中的配置,pom.xml文件用來包含各種配置信息,POM也包含了目標(biāo)和插件。在執(zhí)行任務(wù)或目標(biāo)時,Maven會使用當(dāng)前目錄中的POM,讀取POM得到所需要的配置信息,然后執(zhí)行目標(biāo)。超級POM:所有的POM繼承自父類,這個基礎(chǔ)的POM被稱為超級POM。約定的目錄結(jié)構(gòu)約定的目錄結(jié)構(gòu)工程名源碼目錄主程序目錄Java源文件目錄資源文件目錄測試程序目錄編譯結(jié)果目錄Maven核心配置文件約定的目錄結(jié)構(gòu)為什么需要約定的目錄結(jié)構(gòu) maven負(fù)責(zé)我們項目的自動化構(gòu)建,以編譯為例,maven想要自動編譯,那么必須知道java源文件保存的位置
tip:我們在開發(fā)中如果需要讓第三方工具或框架知道我們自己創(chuàng)建的資源文件在哪,那么基本上就是兩種方式: 1以配置的方式告訴工具或者框架 springapplicationContext.xml 2遵守約定 perties
約定配置編碼:簡化開發(fā)
架構(gòu)框架原始
意思就是能用配置解決的問題就不編碼,能基于約定的就不進(jìn)行配置。而Maven正是因為指定了特定文件保存的目錄才能夠?qū)ξ覀兊腏ava工程進(jìn)行自動化構(gòu)建。常用maven命令mvnclean 清理target
mvncompile 編譯主程序mvnpile 編譯測試程序mvntest 執(zhí)行測試程序
mvnpackage 打包mvninstall 將打包的文件安裝到本地倉庫mvndeploy 將打包的文件發(fā)布到本地倉庫和遠(yuǎn)程倉庫tips:執(zhí)行與構(gòu)建過程相關(guān)的maven命令,必須進(jìn)入pom.xml所在的目錄生命周期理解什么是生命周期
開發(fā)項目的時候,不斷地在編譯、測試、打包、部署等過程,maven的生命周期就是對所有構(gòu)建過程抽象與統(tǒng)一,生命周期包含項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生成等幾乎所有的過程。
Maven生命周期定義了各個構(gòu)建環(huán)節(jié)的執(zhí)行順序,Maven自動化的執(zhí)行構(gòu)建命令的基石。tips:生命周期類比為java設(shè)計模式之模版方法模式abstract父類具體方法生命周期的種類了解提供的幾種生命周期Maven有三套相互獨立的生命周期,分別是: 1CleanLifecycle 在進(jìn)行構(gòu)建之前進(jìn)行一些清理工作。 2DefaultLifecycle 構(gòu)建的核心部分,編譯,測試,打包,安裝,部署等等。 3SiteLifecycle 生成項目報告,站點,發(fā)布站點。它們是相互獨立的,你可以調(diào)用clean來清理工作目錄,僅僅調(diào)用site來生成站點。也可以直接運行mvncleaninstallsite運行所有這三套生命周期。每套生命周期都由一組階段(Phase)組成,我們平時在命令行輸入的命令總會對應(yīng)于一個特定的階段。
tip:階段可以類比為java設(shè)計模式之模版方法模式abstract父類抽象方法生命周期種類了解Clean生命周期Clean生命周期一共包含了三個階段: 1pre-clean 執(zhí)行一些需要在clean之前完成的工作 2clean 移除所有上一次構(gòu)建生成的文件 3post-clean 執(zhí)行一些需要在clean之后立刻完成的工作生命周期種類詳解Default生命周期Default生命周期是Maven生命周期中最重要的一個,絕大部分工作都發(fā)生在這個生命周期中。解釋一些比較重要和常用的階段:cess-resources 復(fù)制并處理資源文件,至目標(biāo)目錄,準(zhǔn)備打包。Compile 編譯項目的源代碼。............process-test-resources 復(fù)制并處理資源文件,至目標(biāo)測試目錄。pile 編譯測試源代碼。............test 使用單元測試框架運行測試,這些測試代碼不會被打包或部署。............ package 接受編譯好的代碼,打包成可發(fā)布的格式,如JAR。............Install 將包安裝至本地倉庫,以讓其它項目依賴。Deploy 將最終的包復(fù)制到遠(yuǎn)程的倉庫,以讓其它開發(fā)人員與項目共享或部署到服務(wù)器上運行。生命周期特點1maven的核心程序只定義了抽象的生命周期2各個構(gòu)建環(huán)節(jié)有固定的順序,必須按照順序來執(zhí)行3不論執(zhí)行生命周期的那一個階段,都是從生命周期最初的位置開始執(zhí)行插件什么是插件Maven的核心僅僅定義了抽象的生命周期,那么具體的任務(wù)是由誰實現(xiàn)的?
具體的任務(wù)都是由插件實現(xiàn)tips:插件類比為java設(shè)計模式之模版方法模式繼承abstract父類的子類,實現(xiàn)抽象方法(某個階段),做具體的事情插件的目標(biāo)1生命周期各個階段僅僅定義要執(zhí)行什么任務(wù)2Maven的生命周期與插件目標(biāo)相互綁定,以完成某個具體的構(gòu)建任務(wù)3每個插件都能實現(xiàn)多個功能,每個功能就是一個插件目標(biāo)生命周期階段插件目標(biāo)插件compilecompilepile-pluginpilepilepile-plugintips:可以將目標(biāo)看作調(diào)用插件功能命令生命周期執(zhí)行結(jié)果mvncompilemvntest實戰(zhàn)進(jìn)階隨著項目越來越大,我們需要將項目拆分成多個模塊: 1多個模塊之間如何調(diào)用和訪問呢? 2多個模塊之間的復(fù)雜jar包關(guān)系又該如何管理呢?持久層模塊邏輯層模塊控制層模塊………電商mall依賴什么是依賴當(dāng)Ajar包用到了Bjar包中的某些類時,A就對B產(chǎn)生了依賴。為什么需要依賴?如果不用依賴,我們需要將上面的包全部收到導(dǎo)入,在maven中只需要在pom.xml文件中配置dependency并可引用jar包 <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <scope>compile</scope> </dependency> 依賴信息中除了目標(biāo)jar包的坐標(biāo)還有一個scope設(shè)置,這是依賴的范圍。依賴的范圍有幾個可選值,compile、test、provided、runtime、system等我們用得到的是:compile、test、provided三個。運行時依賴范圍(runtime),使用該依賴范圍的maven依賴,只對測試和運行的classpath有效,對編譯的classpath無效,典型例子就是JDBC的驅(qū)動實現(xiàn),項目主代碼編譯的時候只需要JDK提供的JDBC接口,只有在測試和運行的時候才需要實現(xiàn)上述接口的具體JDBC驅(qū)動。系統(tǒng)依賴范圍(system),系統(tǒng)依賴范圍必須通過配置systemPath元素來顯示指定依賴文件的路徑,此類依賴不是由maven倉庫解析的,而且往往與本機系統(tǒng)綁定,可能造成構(gòu)件的不可移植,因此謹(jǐn)慎使用依賴的范圍從項目結(jié)構(gòu)角度理解compile和test的區(qū)別依賴的范圍持久層模塊test測試程序main主程序Compile的依賴test的依賴依賴的范圍從開發(fā)和運行這兩個不同階段理解compile和provided的區(qū)別持久層模塊開發(fā)打包部署運行compile的依賴provided的依賴Servlet容器Servlet-api依賴范圍總結(jié)有效性總結(jié)compiletestprovidedmain主程序√×√Test測試程序√√√打包部署√××依賴的傳遞性controller模塊依賴service模塊,service模塊依賴repository模塊,那么controller模塊也能使用repository模塊;并且repository模塊依賴的jar包也會傳遞到service和controller模塊模塊依賴的范圍對controller可見性controllerservicerepositorycompile√…..test×……provided×1可以傳遞的依賴不必要在每個模塊中都重復(fù)聲明(如模塊,jar包)2非compile范圍的依賴不能傳遞,所以需要在各個模塊中聲明依賴為什么需要依賴的排除repository模塊引入了一個依賴是dubbo,而dubbo又依賴了commons-logging,因為依賴的傳遞性將dubbo依賴的commons-logging引入repository模塊,但是個別情況下commons-logging有可能是一個不穩(wěn)定版,或?qū)Ξ?dāng)前模塊有不良影響,這時我們可以在引入dubbo的時候?qū)ommons-logging排除依賴的排除實現(xiàn)依賴的排除多依賴過濾單依賴過濾依賴jar包的排除實現(xiàn)依賴的排除依賴模塊的排除Service模塊pom.xml依賴的原則service模塊引入了repository模塊,因為依賴的傳遞性會講repository依賴的jar包導(dǎo)入到當(dāng)前模塊,但是service模塊引用的是最新版本的commons-logging,因為依賴的傳遞性,controller模塊就有兩個commons-logging版本,怎能解決呢?這種情況就需要依靠maven依賴的原則,來解決jar包的沖突依賴的原則分兩種 1路徑最短者優(yōu)先 2路徑相同時先聲明者優(yōu)先依賴的原則路徑最短者優(yōu)先controller模塊service模塊repository模塊commons-logging1.2commons-logging1.1commons-logging1.2依賴的原則路徑相同時先聲明者優(yōu)先controller模塊service模塊commons-logging1.2commons-logging1.1其他service模塊tips:聲明的先后順序指的是dependency標(biāo)簽配置的先后順序...........依賴的統(tǒng)一管理一般同一個框架的jar包用的都是對應(yīng)相同的版本號,想要統(tǒng)一升級,怎么辦?這個時候就用到依賴的統(tǒng)一管理,可以將jar包的版本信息統(tǒng)一抽取出來,以后框架升級只需修改抽取出來的版本信息即可1在<properties>標(biāo)簽內(nèi)使用自定義的標(biāo)簽統(tǒng)一聲明版本號2在需要用的同一版本的位置,使用${自定義標(biāo)簽}引用抽取出來的版本信息即可繼承了解如果項目中各個模塊各自使用的jar包版本不統(tǒng)一(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)派遺合同范本
- 養(yǎng)殖社購銷合同范本
- 借條正規(guī)合同范本
- 公司網(wǎng)絡(luò)線路維修合同范本
- 加工蔬菜采購合同范本
- 利益聯(lián)結(jié)機制合同范本
- 出租專用桌子合同范本
- 與社區(qū)合作社簽訂合同范例
- 二手房按揭買賣合同范本
- 公司許可經(jīng)營合同范本
- 2024年山東力明科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 譯林版小學(xué)英語四年級上冊單詞表(分單元含音標(biāo))
- 2025年江蘇無錫市屬國有企業(yè)招聘筆試參考題庫含答案解析
- 廣州市小學(xué)六年級上英語單詞
- 武漢市2024-2025學(xué)年度高三元月調(diào)考?xì)v史試題卷(含答案)
- 《慢性腎臟病相關(guān)心肌病綜合管理中國專家共識(2024版)》解讀
- DCMM解析版練習(xí)試題附答案
- 《工程建設(shè)質(zhì)量信得過班組建設(shè)活動準(zhǔn)則》
- 金融企業(yè)會計第八章證券公司業(yè)務(wù)的核算
- 2024下半年上海事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 網(wǎng)絡(luò)安全風(fēng)險評估行業(yè)研究報告
評論
0/150
提交評論