maven學(xué)習(xí)-初窺門徑
最近在一個(gè)公司實(shí)習(xí),由于剛出校門對(duì)公司開發(fā)流程還是不太清楚。對(duì)Maven知之甚少,最近我就在惡補(bǔ)Maven。
Maven定義
Maven 是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model), 一組標(biāo)準(zhǔn)集合, 一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。 當(dāng)你使用 Maven 的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來描述你的項(xiàng)目,然后 Maven 可以應(yīng)用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。Maven是基于項(xiàng)目對(duì)象模型(POM),可以通過一小段描述信息來管理項(xiàng)目的構(gòu)建、報(bào)告和文檔的軟件項(xiàng)目管理工具。
在沒有自定義的情況下,源代碼假定是在 ${basedir}/src/main/java,資源文件假定是在${basedir}/src/main/resources 。測(cè)試代碼假定是在 ${basedir}/src/test 。項(xiàng)目假定會(huì)產(chǎn)生一個(gè) JAR 文件。 Maven 假定你想要把編譯好的字節(jié)碼放到${basedir}/target/classes 并且在 ${basedir}/target 創(chuàng)建一個(gè)可分發(fā)的 JAR文件。 雖然這看起來無關(guān)緊要,但是想想大部分基于 Ant 的構(gòu)建必須為每個(gè)子項(xiàng)目定義這些目錄。 Maven 對(duì)約定優(yōu)于配置的應(yīng)用不僅僅是簡(jiǎn)單的目錄位置, Maven 的核心插件使用了一組通用的約定,以用來編譯源代碼,打包可分發(fā)的構(gòu)件,生成 web 站點(diǎn),還有許多其他的過程。
Maven插件的全局性重用
Maven 的核心,解析一些 XML 文檔,管理生命周期與插件。 Maven 被設(shè)計(jì)成將主要的職責(zé)委派給一組 Maven 插件,這些插件可以影響 Maven 生命周期,提供對(duì)目標(biāo)的訪問。絕大多數(shù) Maven 的動(dòng)作發(fā)生于 Maven 插件的目標(biāo),如編譯源碼,打包二進(jìn)制代碼,發(fā)布站點(diǎn)和其它構(gòu)建任務(wù)。從 Apache 下載的 Maven 不知道如何打包 WAR 文件,也不知道如何運(yùn)行單元測(cè)試, Maven 大部分的智能是由插件實(shí)現(xiàn)的,而插件從 Maven 倉(cāng)庫獲得。第一次你用全新的 Maven 安裝運(yùn)行諸如 mvn install 命令的時(shí)候,它會(huì)從中央 Maven 倉(cāng)庫下載大部分核心 Maven 插件。這不僅僅是一個(gè)最小化 Maven分發(fā)包大小的技巧,這種方式更能讓你升級(jí)插件以給你項(xiàng)目的構(gòu)建提高能力。 Maven從遠(yuǎn)程倉(cāng)庫獲取依賴和插件的這一事實(shí)允許了構(gòu)建邏輯的全局性重用。
依賴管理
由于項(xiàng)目是根據(jù)一個(gè)包含組標(biāo)識(shí)符,構(gòu)件標(biāo)識(shí)符和版本的唯一的坐標(biāo)定義的。項(xiàng)目間可以使用這些坐標(biāo)來聲明依賴
遠(yuǎn)程倉(cāng)庫
和項(xiàng)目依賴相關(guān)的,我們可以使用定義在項(xiàng)目對(duì)象模型( POM)中的坐標(biāo)來創(chuàng)建 Maven 構(gòu)件的倉(cāng)庫。
Ant 和 Maven 的區(qū)別
Apache Ant
Ant 沒有正式的約定如一個(gè)一般項(xiàng)目的目錄結(jié)構(gòu), 你必須明確的告訴 Ant哪里去找源代碼,哪里放置輸出。隨著時(shí)間的推移,非正式的約定出現(xiàn)了,但是它們還沒有在產(chǎn)品中模式化。
Ant 是程序化的,你必須明確的告訴 Ant 做什么,什么時(shí)候做。你必須告訴它去編譯,然后復(fù)制,然后壓縮。
Ant 沒有生命周期,你必須定義目標(biāo)和目標(biāo)之間的依賴。你必須手工為每個(gè)目標(biāo)附上一個(gè)任務(wù)序列。
Apache Maven
Maven 擁有約定,因?yàn)槟阕裱思s定,它已經(jīng)知道你的源代碼在哪里。它把字節(jié)碼放到 target/classes ,然后在 target 生成一個(gè) JAR文件。
Maven 是聲明式的。你需要做的只是創(chuàng)建一個(gè) pom.xml 文件然后將源代碼放到默認(rèn)的目錄。 Maven 會(huì)幫你處理其它的事情。
Maven 有一個(gè)生命周期,當(dāng)你運(yùn)行 mvn install 的時(shí)候被調(diào)用。這條命令告訴 Maven 執(zhí)行一系列的有序的步驟,直到到達(dá)你指定的生命周期。遍歷生命周期旅途中的一個(gè)影響就是, Maven 運(yùn)行了許多默認(rèn)的插件目標(biāo),這些目標(biāo)完成了像編譯和創(chuàng)建一個(gè) JAR 文件這樣的工作。
Maven 以插件的形式為一些一般的項(xiàng)目任務(wù)提供了內(nèi)置的智能。如果你想要編寫運(yùn)行單元測(cè)試,你需要做的只是編寫測(cè)試然后放到 ${basedir}/src/test/java ,添加一個(gè)對(duì)于 TestNG 或者 JUnit 的測(cè)試范圍依賴,然后運(yùn)行 mvn test 。如果你想要部署一個(gè) web 應(yīng)用而非 JAR ,你需要做的是改變你的項(xiàng)目類型為 war ,然后把你文檔根目錄置為 ${basedir}/src/main/webapp 。當(dāng)然,你可以用 Ant 做這些事情,但是你將需要從零開始寫這些指令。使用 Ant ,你首先需要確定 JUnit JAR 文件應(yīng)該放在哪里,然后你需要?jiǎng)?chuàng)建一個(gè)包含這個(gè) JUnit JAR 文件的 classpath ,然后告訴 Ant 它應(yīng)該從哪里去找測(cè)試源代碼,編寫一個(gè)目標(biāo)來編譯測(cè)試源代碼為字節(jié)碼,使用 JUnit 來執(zhí)行單元測(cè)試
簡(jiǎn)單使用語句
mvn -v 查看版本
compile 編譯
test 測(cè)試
package 打包
clean 清楚target
install 安裝jar包到本地倉(cāng)庫中
自動(dòng)創(chuàng)建目錄骨架
archetype插件用于創(chuàng)建符合maven規(guī)定的目錄骨架創(chuàng)建目錄有兩種方式
方式一:archetype:generate 按照提示進(jìn)行選擇
方式二:archetype:generate -DgroupId=組織名,公司網(wǎng)址的反寫+項(xiàng)目名
-DartifactId=項(xiàng)目名-模塊名
-Dversion=版本號(hào)
-Dpackage=代碼所存在的包名
其他知識(shí)點(diǎn)
坐標(biāo)
構(gòu)件
倉(cāng)庫 分為本地倉(cāng)庫和遠(yuǎn)程倉(cāng)庫
鏡像倉(cāng)庫
clean 清理項(xiàng)目
pre-clean 執(zhí)行清理前的工作
clean清理上一次構(gòu)建生成的所有文件
post-clean執(zhí)行清理后的文件
site生成項(xiàng)目站點(diǎn)
pre-site 在生成項(xiàng)目站點(diǎn)前要完成的工作
site 生成項(xiàng)目的站點(diǎn)文檔
post-site在生成項(xiàng)目站點(diǎn)后要完成的工作
site-deploy發(fā)布生成的站點(diǎn)到服務(wù)器上
依賴范圍
依賴沖突
依賴傳遞
聚合和繼承,其他知識(shí)點(diǎn)以后在詳細(xì)介紹。。
總結(jié)
以上就是本文關(guān)于maven學(xué)習(xí)-初窺門徑的全部?jī)?nèi)容,對(duì)maven作了簡(jiǎn)要介紹,有什么不對(duì)的地方歡迎留言指出,小編也可以學(xué)習(xí)學(xué)習(xí)。感興趣的朋友可以繼續(xù)參閱本站:使用maven運(yùn)行Java Main的三種方法解析、Java利用future及時(shí)獲取多線程運(yùn)行結(jié)果等,感謝閱讀。希望對(duì)大家有所幫助。
相關(guān)文章
Spring Boot與RabbitMQ結(jié)合實(shí)現(xiàn)延遲隊(duì)列的示例
本篇文章主要介紹了Spring Boot與RabbitMQ結(jié)合實(shí)現(xiàn)延遲隊(duì)列的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java利用DelayQueue實(shí)現(xiàn)延遲任務(wù)代碼實(shí)例
這篇文章主要介紹了Java利用DelayQueue實(shí)現(xiàn)延遲任務(wù)代碼實(shí)例,DelayQueue?是一個(gè)支持延時(shí)獲取元素的阻塞隊(duì)列,?內(nèi)部采用優(yōu)先隊(duì)列?PriorityQueue?存儲(chǔ)元素,同時(shí)元素必須實(shí)現(xiàn)?Delayed?接口,需要的朋友可以參考下2023-12-12
SpringBoot集成Shiro進(jìn)行權(quán)限控制和管理的示例
這篇文章主要介紹了SpringBoot集成Shiro進(jìn)行權(quán)限控制和管理的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
SpringBoot項(xiàng)目中控制臺(tái)日志的保存配置操作
這篇文章主要介紹了SpringBoot項(xiàng)目中控制臺(tái)日志的保存配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
java Class文件內(nèi)部結(jié)構(gòu)解析過程詳解
java class的文件結(jié)構(gòu),java class文件結(jié)構(gòu)是基于字節(jié)流的,用unicode進(jìn)行編碼,下面說說java Class文件內(nèi)部結(jié)構(gòu)分析2013-11-11
Java?Web應(yīng)用小案例之實(shí)現(xiàn)用戶登錄功能全過程
在Java開發(fā)過程中實(shí)現(xiàn)用戶的注冊(cè)功能是最基本的,這篇文章主要給大家介紹了關(guān)于Java?Web應(yīng)用小案例之實(shí)現(xiàn)用戶登錄功能的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01

