今天有位微信好友私下問我:mvn install怎麼好像把mvn compile的活也幹了,因此我平時都是使用mvn install就ok了。奇怪的是,爲何還要搞個mvn compile呢?
java
有時候看到大佬們使用mvn ....一長串命令的時候,就會蒙圈了,這是什麼命令?什麼-Dxxx -Pxxx的。web
因而想了想仍是頗有必要來寫一篇關於Maven命令的文章,但願經過此分享你們能掌握更多的 mvn 命令。面試
如下是命令模板:spring
mvn archetype:generate 固定格式
-DgroupId 組織標識(包名)
-DartifactId 項目名稱
-DarchetypeArtifactId 指定ArchetypeId,maven-archetype-quickstart,建立一個Java Project;
maven-archetype-webapp,建立一個Web Project
-DinteractiveMode 是否使用交互模式
-DarchetypeCatalog=local 離線模式
下面咱們就來演示一下如何建立項目,咱們演示兩種項目:標準的項目和web類型的項目。tomcat
咱們來建立一個my-maven的項目。springboot
使用命令:微信
mvn archetype:generate -DgroupId=com.tian.maven -DartifactId=my-maven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local
進入本身的workspace中。併發
這個是咱們以前手動建立的maven項目,今天咱們使用命令來建立一個my-maven項目。app
打開運行窗口。框架
輸入上面的命令:
按下 Enter鍵。
BUILD SUCCESS,表示咱們構建成功。回到咱們的workspace中。
發現已經建立好了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文件。
咱們這裏對這些標籤作一個簡單的說明:
<modelVersion>
:模型版本。maven2.0必須是這樣寫,如今是maven2惟一支持的版本。
<groupId>
:公司或者組織的惟一標誌,而且配置時生成的路徑也是由今生成, 如:com.tian.trade,maven會將該項目打成的jar包放本地路徑:/com/tian/trade
。
<artifactId>
:本項目的惟一ID,一個groupId下面可能多個項目,就是靠artifactId來區分的。
<version>
:本項目目前所處的版本號。
<packaging>
:打包的機制,如pom、jar、maven-plugin、ejb、war、ear、 rar、par,默認爲jar。
<name>
:項目名稱。
<url>
:中央倉庫地址。
<dependencies>
:定義本項目的依賴關係。
<dependency>
:每一個dependency都對應這一個jar包。通常狀況下,maven是經過groupId、artifactId、version這三個元素值(俗稱座標)來檢索該構件, 而後引入你的工程。若是別人想引用你如今開發的這個項目(前提是已開發完畢併發布到了遠程倉庫),就須要在他的pom文件中新建一個dependency節點,將本項目的groupId、artifactId、version寫入, maven就會把你上傳的jar包下載到他的本地 。
<scope>
:依賴範圍。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
效果和上面的同樣。
一樣在咱們的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項目。
Maven 命令參數 中的 -D 表示 Properties屬性,而 -P 表示 Profiles配置文件。
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 表明 Profiles 配置文件的屬性,也就是說在指定的中,能夠經過-P進行傳遞或者賦值。一般表示咱們要打那個環境的jar包,在實際項目中還會伴隨着相應環境的配置文件。
好比一般使用:mvn test -Ptest。表示指定爲test環境。
上面咱們已經建立了兩個項目java標準項目和web項目。下面咱們就以java標準項目爲例,來演示一下幾個命令。
編譯項目。
編譯成功後會增長一個target目錄(編譯後的文件)。
這個target目錄在前面文章中已經說過,這裏就不在贅述了。
刪除target整個目錄。
測試,前提是咱們集成了junit,而且有test目錄,還有對應的測試類。
從日誌中能夠看出其失敗、錯誤以及耗時等信息。另外還發如今target目錄下多了個test-classes目錄:
其實就是把測試類編譯後,放在這個目錄下。
打包,繼續使用上面的項目進行演示:
執行mvn package的時候也執行了mvn test。由於生命週期的順序來,package在test後面。而且還打成了jar包。
在target目錄下能夠看到:
安裝,就是把咱們的大號的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包並不在中央倉庫或者咱們的私服裏,可是咱們項目使用的是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
本文講述瞭如何使用maven命令建立java標準項目和web項目。講述了-D開頭和-P開頭參數的含義。講述了命令的使用和說明,面試題以及在IDEA中的兩種使用方式。
「PS」:Maven 命令看起來簡單,一學即會 。Mvane就是領導,插件就是咱們開發人員,真正幹活的人其實咱們開發人員。因此Maven本質上是一個插件框架,它的核心並不執行任何具體的構建任務,全部這些任務都交給插件來完成。後面咱們會有一篇專門講解maven插件的,敬請期待~
「人生的關鍵在於:只要用心作了,輸和贏都很精彩。」