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

