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