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