淺談一下maven優(yōu)缺點(diǎn)及使用和特點(diǎn)
1.什么是maven:
maven是Java平臺下的一款項(xiàng)目構(gòu)建和依賴管理的自動化管理工具。
項(xiàng)目構(gòu)建:將我們的源代碼、配置文件變成可執(zhí)行的war包或者jar包。
依賴管理:項(xiàng)目需要正常運(yùn)行,必須依賴一些第三方的jar包,對于這些第三方的jar包的管理,可以認(rèn)為就是依賴的管理。
Maven的作用主要體現(xiàn)在兩個(gè)詞上面:項(xiàng)目和管理。項(xiàng)目管理從技術(shù)上來理解,就是 Maven 為項(xiàng)目提供了一種讓團(tuán)隊(duì)能夠更科學(xué)地管理、構(gòu)建項(xiàng)目的手段。我們可以用配置文件的方式對項(xiàng)目的描述、名稱、項(xiàng)目版本號、項(xiàng)目依賴等信息進(jìn)行描述,使我們的項(xiàng)目結(jié)構(gòu)更加清晰。
并且,有一些項(xiàng)目需要依賴一些第三方項(xiàng)目的模塊或組件來完成,那么 Maven 則提供了一種 Maven倉庫 的概念。將這些依賴全部放到 Maven倉庫中,其他項(xiàng)目如果想要使用這些依賴,直接到倉庫中取即可,避免了到開源網(wǎng)站下載 jar 包資源的步驟。
Maven的優(yōu)點(diǎn):
1、原來的項(xiàng)目中需要的jar包必須手動“復(fù)制”、”粘貼” 到WEB-INF/lib 項(xiàng)目下,而借助Maven,可以將jar包僅僅保存在“倉庫”中,有需要使用的工程只需要“引用”這個(gè)文件,并不需要重復(fù)復(fù)制到工程中。
2、原來的項(xiàng)目中所需要的jar包都是提前下載好的,而Maven在聯(lián)網(wǎng)狀態(tài)下會自動下載所需要的jar包。首先在本地倉庫中找,找不到就在網(wǎng)上進(jìn)行下載。
3、原來的項(xiàng)目中一個(gè)jar包所依賴的其他jar包必須手動導(dǎo)進(jìn)來,而Maven會自動將被依賴的jar包導(dǎo)進(jìn)來。
4、原來的項(xiàng)目一個(gè)項(xiàng)目就是一個(gè)工程,而借助Maven可以將一個(gè)項(xiàng)目拆分成多個(gè)工程。
Maven的缺點(diǎn):
1.由于需要下載,導(dǎo)入等,導(dǎo)致加載緩慢,或者出現(xiàn)錯(cuò)誤,和不穩(wěn)定
2.缺少對Maven的文檔描述(網(wǎng)上一大堆,但是沒有標(biāo)準(zhǔn))
3.中央存儲庫中的元數(shù)據(jù)不佳
4.POM.xml做為項(xiàng)目元數(shù)據(jù)的來源
maven常見的指令:
- mvn archetype:generate :創(chuàng)建 Maven 項(xiàng)目
- mvn compile :編譯源代碼
- mvn test-compile :編譯測試代碼
- mvn test : 運(yùn)行應(yīng)用程序中的單元測試
- mvn site : 生成項(xiàng)目相關(guān)信息的網(wǎng)站
- mvn clean :清除目標(biāo)目錄中的生成結(jié)果
- mvn package : 依據(jù)項(xiàng)目生成 jar 文件
- mvn install :在本地 Repository 中安裝 jar
- mvn deploy:將jar包發(fā)布到遠(yuǎn)程倉庫
- mvn eclipse:eclipse :生成 Eclipse 項(xiàng)目文件
maven依賴范圍:
- compile:編譯范圍,指 A 在編譯時(shí)依賴 B,此范圍為默認(rèn)依賴范圍。編譯范圍的依賴會用在 編譯、測試、運(yùn)行,由于運(yùn)行時(shí)需要所以編譯范圍的依賴會被打包。
- provided:provided 依賴只有在當(dāng) JDK 或者一個(gè)容器已提供該依賴之后才使用, provided 依賴在編譯和測試時(shí)需要,在運(yùn)行時(shí)不需要,打包:比如:servlet-api,jsp-api 被 tomcat 容器提供。
- runtime:runtime 依賴在運(yùn)行和測試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要。比如:jdbc 的驅(qū)動包。由于運(yùn)行時(shí)需要所以 runtime 范圍的依賴會被打包。
- test:test 范圍依賴 在編譯和運(yùn)行時(shí)都不需要,它們只有在測試編譯和測試運(yùn)行階段可用, 比如:junit。由于運(yùn)行時(shí)不需要所以 test范圍依賴不會被打包。
- system:system 范圍依賴與 provided 類似,但是你必須顯式的提供一個(gè)對于本地系統(tǒng)中 JAR 文件的路徑,需要指定 systemPath 磁盤路徑,system依賴不推薦使用。
maven四大特性:
1.第一大特性:
依賴管理系統(tǒng) maven為java世界引入了一個(gè)新的依賴管理系統(tǒng)jar包管理jar升級時(shí)修改配置文件即可,在java世界中,可以用groupid,artifactid,version組成的Coordination(做標(biāo))唯一標(biāo)識一個(gè)依賴。
任何基于Maven構(gòu)建的項(xiàng)目自身也必須定義這三項(xiàng)屬性,生成的包可以是jar包,也可以是war包或者jar包。
①groupId:定義當(dāng)前Maven項(xiàng)目隸屬的實(shí)際項(xiàng)目--公司名稱。
②artifactId:該元素定義實(shí)際項(xiàng)目中的一個(gè)Maven模塊--項(xiàng)目名。推薦的做法是使用實(shí)際項(xiàng)目名稱作為artifactId的前綴。比如:spring-bean,spring-webmvc等。
③version:該元素定義maven項(xiàng)目當(dāng)前所處的版本。
2.第二大特性:
多模塊構(gòu)建 項(xiàng)目復(fù)查時(shí)dao service controller 層分離將一個(gè)項(xiàng)目分解為多個(gè)模塊已經(jīng)是很通用的一種方式。
在maven中需要定義一個(gè)parent POM作為一組module的聚合POM,在該P(yáng)OM中可以<modules>標(biāo)簽來定義一組子模塊,parent POM不會有什么實(shí)際構(gòu)建產(chǎn)生。而parent POM中的build配置以及依賴配置都會自動繼承給子module。
3.第三大特性:
一致的項(xiàng)目構(gòu)建 主要解決了我們在idea中和eclipse中創(chuàng)建的項(xiàng)目,目錄可能不一樣,但是如果使用了maven后,我們創(chuàng)建的項(xiàng)目目錄都是一樣的。 Maven在設(shè)計(jì)之初的理念就是Conversion over configuration(約定大于配置) ,其制定了一套項(xiàng)目目錄結(jié)構(gòu)作為標(biāo)準(zhǔn)的java項(xiàng)目結(jié)構(gòu),解決不同ide帶來的文件目錄不一致問題。
4.第四大特性:
一致的構(gòu)建模型和插件機(jī)制如果我們需要tomcat服務(wù)器的時(shí)候,我們就把tomcat服務(wù)器的引進(jìn)來。
到此這篇關(guān)于淺談一下maven優(yōu)缺點(diǎn)及使用和特點(diǎn)的文章就介紹到這了,更多相關(guān)maven優(yōu)缺點(diǎn)及使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 下載遠(yuǎn)程maven倉庫的jar?手動放到本地倉庫詳細(xì)操作
- 解決問題:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
- maven導(dǎo)入本地倉庫jar包,報(bào):Could?not?find?artifact的解決
- Maven項(xiàng)目修改JDK版本全過程
- Spring Boot結(jié)合IDEA自帶Maven插件如何快速切換profile
- Maven?項(xiàng)目用Assembly打包可執(zhí)行jar包的方法
- IDEA 中 maven 的 Lifecycle 和Plugins 的區(qū)別
相關(guān)文章
解讀Spring事務(wù)是如何實(shí)現(xiàn)的
這篇文章主要介紹了Spring事務(wù)是如何實(shí)現(xiàn)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03JVM內(nèi)存溢出和內(nèi)存泄漏的區(qū)別及說明
這篇文章主要介紹了JVM內(nèi)存溢出和內(nèi)存泄漏的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02SpringBoot中使用Filter和Interceptor的示例代碼
這篇文章主要介紹了SpringBoot中使用Filter和Interceptor的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06MyBatis入門實(shí)例教程之創(chuàng)建一個(gè)簡單的程序
這篇文章主要介紹了MyBatis入門創(chuàng)建一個(gè)簡單的程序,在?MySQL?中創(chuàng)建數(shù)據(jù)庫?mybatisdemo,編碼為?utf8,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02java swing實(shí)現(xiàn)簡單的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了java swing實(shí)現(xiàn)簡單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03Spring?boot事務(wù)無效報(bào)錯(cuò):Transaction?not?enabled問題排查解決
在業(yè)務(wù)代碼中經(jīng)常需要保證事務(wù)的原子性,但是有的時(shí)候確實(shí)是出現(xiàn)事務(wù)沒有生效,這篇文章主要給大家介紹了關(guān)于Spring?boot事務(wù)無效報(bào)錯(cuò):Transaction?not?enabled問題排查的相關(guān)資料,需要的朋友可以參考下2023-11-11