下运行maven命令_实话实说 | 这些maven命令,你会几个?
今天有位微信好友私下問(wèn)我:mvn install怎么好像把mvn compile的活也干了,所以我平時(shí)都是使用mvn install就ok了。奇怪的是,為什么還要搞個(gè)mvn compile呢?
聽(tīng)了這位朋友這么說(shuō),我想起了,我剛剛開(kāi)始使用mvn的時(shí)候,仿佛也是這樣的。
我老大就是這么教我的,我就這么用,感覺(jué)蠻爽的...
有時(shí)候看到大佬們使用mvn ....一長(zhǎng)串命令的時(shí)候,就會(huì)蒙圈了,這是什么命令?什么-Dxxx -Pxxx的。
于是想了想還是很有必要來(lái)寫(xiě)一篇關(guān)于Maven命令的文章,希望通過(guò)此分享大家能掌握更多的 mvn 命令。
使用命令創(chuàng)建項(xiàng)目
以下是命令模板:
mvn?archetype:generate?固定格式-DgroupId?組織標(biāo)識(shí)(包名)-DartifactId?項(xiàng)目名稱-DarchetypeArtifactId 指定ArchetypeId,maven-archetype-quickstart,創(chuàng)建一個(gè)Java Project;maven-archetype-webapp,創(chuàng)建一個(gè)Web?Project-DinteractiveMode?是否使用交互模式-DarchetypeCatalog=local?離線模式下面我們就來(lái)演示一下如何創(chuàng)建項(xiàng)目,我們演示兩種項(xiàng)目:標(biāo)準(zhǔn)的項(xiàng)目和web類型的項(xiàng)目。
創(chuàng)建java標(biāo)準(zhǔn)項(xiàng)目
我們來(lái)創(chuàng)建一個(gè)my-maven的項(xiàng)目。
使用命令:
mvn?archetype:generate?-DgroupId=com.tian.maven?-DartifactId=my-maven?-DarchetypeArtifactId=maven-archetype-quickstart?-DinteractiveMode=false?-DarchetypeCatalog=local進(jìn)入自己的workspace中。
這個(gè)是我們之前手動(dòng)創(chuàng)建的maven項(xiàng)目,今天我們使用命令來(lái)創(chuàng)建一個(gè)my-maven項(xiàng)目。
打開(kāi)運(yùn)行窗口。
輸入上面的命令:
按下 Enter鍵。
BUILD SUCCESS,表示我們構(gòu)建成功。回到我們的workspace中。
發(fā)現(xiàn)已經(jīng)創(chuàng)建好了my-maven項(xiàng)目。
my-maven項(xiàng)目結(jié)構(gòu)
my-maven|--?pom.xml`--?src????|--?main????|???`--?java????|???????`--?com????|???????????`--?tian????|???????????????`--?maven????|???????????????????`--?App.java????`--?test?????????`--?java????????????`--?com?????????????????`--?tian????????????????????`--?maven????????????????????????`--?AppTest.java我們打開(kāi)這個(gè)pom.xml文件。
pom文件頭部標(biāo)簽
我們這里對(duì)這些標(biāo)簽做一個(gè)簡(jiǎn)單的說(shuō)明:
:模型版本。maven2.0必須是這樣寫(xiě),現(xiàn)在是maven2唯一支持的版本。
:公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 如:com.tian.trade,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/tian/trade。
:本項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來(lái)區(qū)分的。
:本項(xiàng)目目前所處的版本號(hào)。
:打包的機(jī)制,如pom、jar、maven-plugin、ejb、war、ear、 rar、par,默認(rèn)為jar。
:項(xiàng)目名稱。
:中央倉(cāng)庫(kù)地址。
:定義本項(xiàng)目的依賴關(guān)系。
:每個(gè)dependency都對(duì)應(yīng)這一個(gè)jar包。一般情況下,maven是通過(guò)groupId、artifactId、version這三個(gè)元素值(俗稱坐標(biāo))來(lái)檢索該構(gòu)件, 然后引入你的工程。如果別人想引用你現(xiàn)在開(kāi)發(fā)的這個(gè)項(xiàng)目(前提是已開(kāi)發(fā)完畢并發(fā)布到了遠(yuǎn)程倉(cāng)庫(kù)),就需要在他的pom文件中新建一個(gè)dependency節(jié)點(diǎn),將本項(xiàng)目的groupId、artifactId、version寫(xiě)入, maven就會(huì)把你上傳的jar包下載到他的本地 。
:依賴范圍。scope包含如下的取值:compile(編譯范圍)、provided(已提供范圍)、runtime(運(yùn)行時(shí)范圍)、test(測(cè)試范圍)、system(系統(tǒng)范圍)。
AppTest類內(nèi)容就是測(cè)試main目錄下的App類。這里使用到的junit測(cè)試。細(xì)心點(diǎn)也會(huì)發(fā)現(xiàn)里面Test相關(guān)的類都是junit包目錄下的,并且在pom.xml文件中我們也看到了由于默認(rèn)依賴junit。
ok,以上便是使用maven命令創(chuàng)建的一個(gè)java標(biāo)準(zhǔn)項(xiàng)目。是不是覺(jué)得很爽。不需要手動(dòng)一個(gè)一個(gè)創(chuàng)建文件夾和類了。
其實(shí),還可以使用相對(duì)簡(jiǎn)單的命令來(lái)搞定。
mvn?archetype:generate?-DgroupId=com.tian.maven?-DartifactId=my-maven?-Dversion=1.0-SNAPSHOT效果和上面的一樣。
創(chuàng)建web項(xiàng)目
同樣在我們的workspace中創(chuàng)建:
按下Enter鍵:
這樣我們的web項(xiàng)目就創(chuàng)建成功了。下面我們來(lái)看看創(chuàng)建了些什么:
同樣的創(chuàng)建了src目錄和pom文件。先看pom.xml內(nèi)容:
pom.xmln內(nèi)容和前面的沒(méi)什么區(qū)別。
my-web-maven項(xiàng)目結(jié)構(gòu)
????my-web-maven????|--?pom.xml????`--?src????????|--?main????????????`--?resource????????????`--?webapp????????????????`--?index.jsp????????????????`--?WEB-INF????????????????????`--?web.xml其中resource目錄下啥也沒(méi)有,因?yàn)榕渲梦募枰覀冏约禾砑?#xff0c;maven也不知道我們需要的是xml、properties還是什么配置文件。
進(jìn)入webapp目錄下有個(gè)index.jsp和WEB-INF,WEB-INF里面有個(gè)web.xml。
以上目錄就是我們搞SpringMVC的簡(jiǎn)單版目錄。但是我們想要存放java源文件還得自己創(chuàng)建java目錄。
ok,到這里我們使用Maven創(chuàng)建一個(gè)web項(xiàng)目就搞定了。
但是很多人可能會(huì)覺(jué)得麻煩,所以也有另外的懶人辦法:也可以在IDEA中新建java項(xiàng)目、新建web項(xiàng)目。
-D和-P參數(shù)
Maven 命令參數(shù) 中的 -D 表示 Properties屬性,而 -P 表示 Profiles配置文件。
-D開(kāi)頭
D 表示設(shè)置 Properties屬性,使用命令行設(shè)置屬性 -D 模板:
mvn?-DpropertyName=propertyValue?clean?package如果 propertyName 不存在于 pom.xml 文件中,它將被設(shè)置。如果 propertyName 已經(jīng)存在 pom.xml 文件中,其值將被作為參數(shù)傳遞的值覆蓋。
比如我們?cè)趧?chuàng)建java標(biāo)準(zhǔn)項(xiàng)目中用到了-DgroupId、DartifactId以及-Dversion。-D后面的都在pom.xml文件中有對(duì)應(yīng)的標(biāo)簽。
-DgroupId=com.tian.maven就是給groupId賦值,其他類似。最后我們就得出了。
version我們沒(méi)有指定,使用的是默認(rèn)的。同樣也是可以給version賦值的:
-Dversion=1.0-SNAPSHOT要設(shè)置多個(gè)變量,請(qǐng)使用多個(gè)空格分隔符加-D:
mvn?-DpropA=valueA?-DpropB=valueB?-DpropC=valueC-P開(kāi)頭
-P 代表 Profiles 配置文件的屬性,也就是說(shuō)在指定的中,可以通過(guò)-P進(jìn)行傳遞或者賦值。通常表示我們要打那個(gè)環(huán)境的jar包,在實(shí)際項(xiàng)目中還會(huì)伴隨著相應(yīng)環(huán)境的配置文件。
比如通常使用:mvn test -Ptest。表示指定為test環(huán)境。
常用命令
上面我們已經(jīng)創(chuàng)建了兩個(gè)項(xiàng)目java標(biāo)準(zhǔn)項(xiàng)目和web項(xiàng)目。下面我們就以java標(biāo)準(zhǔn)項(xiàng)目為例,來(lái)演示一下幾個(gè)命令。
mvn compile
編譯項(xiàng)目。
編譯成功后會(huì)增加一個(gè)target目錄(編譯后的文件)。
這個(gè)target目錄在前面文章中已經(jīng)說(shuō)過(guò),這里就不再贅述了。
mvn clean
刪除target整個(gè)目錄。
mvn test
測(cè)試,前提是我們集成了junit,并且有test目錄,還有對(duì)應(yīng)的測(cè)試類。
從日志中可以看出其失敗、錯(cuò)誤以及耗時(shí)等信息。另外還發(fā)現(xiàn)在target目錄下多了個(gè)test-classes目錄:
其實(shí)就是把測(cè)試類編譯后,放在這個(gè)目錄下。
mvn package
打包,繼續(xù)使用上面的項(xiàng)目進(jìn)行演示:
執(zhí)行mvn package的時(shí)候也執(zhí)行了mvn test。因?yàn)樯芷诘捻樞騺?lái),package在test后面。并且還打成了jar包。
在target目錄下可以看到:
mvn install
安裝,就是把我們的大號(hào)的jar,安裝到我們的本地倉(cāng)庫(kù)中去。
現(xiàn)在我的本地倉(cāng)庫(kù)中是沒(méi)有上面的my-maven-1.0-SNAPSHOT.jar包的。
我們執(zhí)行mvn install命令:
從日志中可以看出,同樣也執(zhí)行了mvn test,另外install命令 中把我們的my-maven-1.0-SNAPSHOT.jar包拷貝一份到本地倉(cāng)庫(kù)中去了。
命令結(jié)合使用
前面我們演示都是單命令進(jìn)行演示。
mvn clean compile、mvn clean install等。IDEA中可視化
在IDEA中我們可以使用可視化,雙擊就搞定得了上面的那些mvane命令。情況下圖:
比如:雙擊clean:
也可以在IDEA中輸入命令方式:
下面幾個(gè)比較常用:
- 跳過(guò)測(cè)試:-Dmaven.test.skip(=true)
- 指定端口:-Dmaven.tomcat.port=9090
- 忽略測(cè)試失敗:-Dmaven.test.failure.ignore=true 。
當(dāng)然,如果你的其它關(guān)聯(lián)項(xiàng)目有過(guò)更新的話,一定要在項(xiàng)目根目錄下運(yùn)行mvn clean install來(lái)執(zhí)行更新,再運(yùn)行mvn tomcat:run使改動(dòng)生效。
其他命令
- mvn eclipse:eclipse: 生成eclipse項(xiàng)目 。
- mvn idea:idea:生成idea項(xiàng)目。
- mvn test-compile:編譯測(cè)試的內(nèi)容 。
- mvn test -skipping compile -skipping test-compile:只測(cè)試而不編譯,也不測(cè)試編譯 。
- mvn -version/-v:顯示版本信息 。
- mvn -Dmaven.test.skip=true:不執(zhí)行測(cè)試用例,也不編譯測(cè)試用例類。
- mvn -e : 顯示詳細(xì)錯(cuò)誤 信息.
- mvn -U :強(qiáng)制更新依賴包
- mvn -B :該參數(shù)表示讓Maven使用批處理模式構(gòu)建項(xiàng)目
- mvn clean install -pl user-dao:只對(duì)user-dao進(jìn)行安裝。
- springboot:run:就是運(yùn)行Spring Boot項(xiàng)目,對(duì)應(yīng)還有start、stop。
- mvn jetty:run:在jetty上運(yùn)行項(xiàng)目。
發(fā)布第三方j(luò)ar到本地倉(cāng)庫(kù)中
實(shí)際開(kāi)發(fā)中會(huì)遇到某些jar包并不在中央倉(cāng)庫(kù)或者我們的私服里,但是我們項(xiàng)目使用的是maven,這時(shí)會(huì)比較好的辦法就是包這個(gè)jar包放到我們的私服里,這樣我們就可以更好的管理了。
比如說(shuō):某某支付需要的jar,某某短信發(fā)送需要的jar等。
mvn?install:install-file?-DgroupId=com?-DartifactId=client?-Dversion=0.1.0?-Dpackaging=jar?-Dfile=d:client-0.1.0.jar?-DdownloadSources=true?-DdownloadJavadocs=true注意:版本、表當(dāng)前存放目錄、groupId、artifactId。
小幫手
- mvn help:system 顯示平臺(tái)詳細(xì)信息的列表,例如系統(tǒng)屬性和環(huán)境變量。
- mvn help:active-profiles 列出了當(dāng)前對(duì)構(gòu)建[有效的配置]文件。
- mvn help:all-profiles 列出當(dāng)前項(xiàng)目下的可用配置文件。
- mvn help:describe:描述插件和/或Mojo(Maven普通的Old Java Object)的屬性 。
- mvn help:evaluate:以交互方式評(píng)估用戶給出的Maven表達(dá)式。
- mvn help:effective-pom:將有效的POM顯示為當(dāng)前版本的XML,并考慮了活動(dòng)配置文件。如果為verbose,則會(huì)向每個(gè)XML元素添加一個(gè)注釋,以描述行的起點(diǎn)。
- mvn help:effective-settings:會(huì)在給定配置文件增強(qiáng)功能以及將全局設(shè)置繼承到用戶級(jí)別設(shè)置的情況下,將計(jì)算出的設(shè)置顯示為項(xiàng)目的XML。
你是否因?yàn)橛洸磺迥硞€(gè)插件有哪些goal而痛苦過(guò),你是否因?yàn)橄氩黄鹉硞€(gè)goal有哪些參數(shù)而苦惱,那就試試這個(gè)命令吧,它會(huì)告訴你一切的 。參數(shù):
-Dplugin=pluginName???-Dgoal(或-Dmojo)=goalName:-Dgoal與-Dplugin一起使用,它會(huì)列出某個(gè)插件的goal信息。
如果嫌不夠詳細(xì),同樣可以加-Ddetail,(注:一個(gè)插件goal也被認(rèn)為是一個(gè) “Mojo”,Maven plain Old Java Object,這個(gè)在后面的插件中講)。
mvn?help:describe?-Dplugin=help?-Dmojo=describe面試題:說(shuō)說(shuō)mvn compile、package、 install、deploy的區(qū)別
總結(jié)
本文講述了如何使用maven命令創(chuàng)建java標(biāo)準(zhǔn)項(xiàng)目和web項(xiàng)目。講述了-D開(kāi)頭和-P開(kāi)頭參數(shù)的含義。講述了命令的使用和說(shuō)明,面試題以及在IDEA中的兩種使用方式。
「PS」:Maven 命令看起來(lái)簡(jiǎn)單,一學(xué)即會(huì) 。Mvane就是領(lǐng)導(dǎo),插件就是我們開(kāi)發(fā)人員,真正干活的人其實(shí)我們開(kāi)發(fā)人員。所以Maven本質(zhì)上是一個(gè)插件框架,它的核心并不執(zhí)行任何具體的構(gòu)建任務(wù),所有這些任務(wù)都交給插件來(lái)完成。后面我們會(huì)有一篇專門講解maven插件的,敬請(qǐng)期待~
「人生的關(guān)鍵在于:只要用心做了,輸和贏都很精彩。」
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的下运行maven命令_实话实说 | 这些maven命令,你会几个?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 更新卡住解决_windows10系统更新
- 下一篇: python快递分拣小程序_python