面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等
本文已收錄至 Github(MD-Notes),若博客中圖片模糊或打不開,可以來我的 Github 倉庫,包含了完整圖文:https://github.com/HanquanHq/MD-Notes,涵蓋了互聯(lián)網(wǎng)大廠面試必問的知識點(diǎn),講解透徹,長期更新中,歡迎一起學(xué)習(xí)探討 ~
更多內(nèi)容,可以訪問:
面試必會系列專欄:https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系統(tǒng)系列專欄:https://blog.csdn.net/sinat_42483341/category_10519484.html
目錄
- Maven詳解
- 什么是Maven
- Maven的下載目錄結(jié)構(gòu)、IDEA整合Maven
- 【1】IDEA默認(rèn)整合了Maven:
- 【2】下載地址:
- 【3】目錄結(jié)構(gòu):
- 【4】如果沒有.m2目錄 ,自己手動執(zhí)行mvn命令:
- Maven倉庫
- 遠(yuǎn)程倉庫
- 本地倉庫
- 倉庫配置
- 在settings.xml文件中配置本地倉庫
- 在settings.xml文件中配置鏡像倉庫
- 倉庫優(yōu)先級問題
- JDK的配置
- 總結(jié):
- Maven工程類型
- 【1】POM工程
- 【2】JAR工程
- 【3】WAR工程
- 在IDEA中創(chuàng)建Maven工程
- 【1】過程:
- Maven項(xiàng)目結(jié)構(gòu)
- ?src/main/java
- ?src/main/resources
- ?src/test/java
- ?src/test/resources
- ?src
- ?target
- ?pom.xml
- 目錄結(jié)構(gòu)圖:
- 注意:
- POM模式-Maven工程關(guān)系
- 依賴關(guān)系
- 【1】依賴關(guān)系:
- 【2】如何注入依賴呢?
- 【3】依賴的好處:
- 特性_依賴的傳遞性
- 案例:
- 原則:兩個(gè)原則
- 【1】第一原則:最短路徑優(yōu)先原則
- 【2】第二原則:最先聲明原則
- 排除依賴
- 依賴范圍(重要!)
- ?compile
- ?provided(重要)
- ?runtime
- ?system
- ?test
- ?Import
- 補(bǔ)充:dependencyManagement的使用
- 繼承關(guān)系
- 聚合關(guān)系
- Maven常見插件
- 編譯器插件
- 【1】 settings.xml文件中配置全局編譯器插件:
- 【2】配置編譯器插件:pom.xml配置片段
- 資源拷貝插件
- tomcat 插件
- Maven常見命令介紹
- ? install
- ? clean
- ? compile
- ? package
- 注:install和package的區(qū)別
Maven詳解
什么是Maven
目前無論使用IDEA還是Eclipse等其他IDE,使用里面ANT工具。ANT工具幫助我們進(jìn)行編譯,打包運(yùn)行等工作。Apache基于ANT進(jìn)行了升級,研發(fā)出了全新的自動化構(gòu)建工具M(jìn)aven。Maven是Apache的一款開源的項(xiàng)目管理工具。以后無論是普通javase項(xiàng)目還是javaee項(xiàng)目,我們都創(chuàng)建的是Maven項(xiàng)目。
Maven使用項(xiàng)目對象模型(POM-Project Object Model,項(xiàng)目對象模型)的概念,可以通過一小段描述信息來管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的軟件項(xiàng)目管理工具。在Maven中每個(gè)項(xiàng)目都相當(dāng)于是一個(gè)對象,對象(項(xiàng)目)和對象(項(xiàng)目)之間是有關(guān)系的。關(guān)系包含了:依賴、繼承、聚合,實(shí)現(xiàn)Maven項(xiàng)目可以更加方便的實(shí)現(xiàn)導(dǎo)jar包、拆分項(xiàng)目等效果。
Maven的下載目錄結(jié)構(gòu)、IDEA整合Maven
【1】IDEA默認(rèn)整合了Maven:
【2】下載地址:
http://maven.apache.org/
【3】目錄結(jié)構(gòu):
bin:存放的是執(zhí)行文件,命令
在IDEA中可以直接集成Maven:
conf目錄:下面有一個(gè)非常重要的配置文件–> settings.xml —> maven的核心配置文件/全局配置文件。
【4】如果沒有.m2目錄 ,自己手動執(zhí)行mvn命令:
mvn help:system
Maven倉庫
Maven倉庫是基于簡單文件系統(tǒng)存儲的,集中化管理Java API資源(構(gòu)件)的一個(gè)服務(wù)。
倉庫中的任何一個(gè)構(gòu)件都有其唯一的坐標(biāo),根據(jù)這個(gè)坐標(biāo)可以定義其在倉庫中的唯一存儲路徑。得益于 Maven 的坐標(biāo)機(jī)制,任何 Maven項(xiàng)目使用任何一個(gè)構(gòu)件的方式都是完全相同的。
Maven 可以在某個(gè)位置統(tǒng)一存儲所有的 Maven 項(xiàng)目共享的構(gòu)件,這個(gè)統(tǒng)一的位置就是倉庫,項(xiàng)目構(gòu)建完畢后生成的構(gòu)件也可以安裝或者部署到倉庫中,供其它項(xiàng)目使用。
對于Maven來說,倉庫分為兩類:本地倉庫、遠(yuǎn)程倉庫。
遠(yuǎn)程倉庫
不在本機(jī)中的一切倉庫,都是遠(yuǎn)程倉庫:分為 中央倉庫 和 本地私服倉庫
遠(yuǎn)程倉庫指通過各種協(xié)議如file://和http://訪問的其它類型的倉庫。這些倉庫可能是第三方搭建的真實(shí)的遠(yuǎn)程倉庫,用來提供他們的構(gòu)件下載(例如repo.maven.apache.org和uk.maven.org是Maven的中央倉庫)。其它“遠(yuǎn)程”倉庫可能是你的公司擁有的建立在文件或HTTP服務(wù)器上的內(nèi)部倉庫(不是Apache的那個(gè)中央倉庫,而是你們公司的私服,你們自己在局域網(wǎng)搭建的maven倉庫),用來在開發(fā)團(tuán)隊(duì)間共享私有構(gòu)件和管理發(fā)布的。
默認(rèn)的遠(yuǎn)程倉庫使用的Apache提供的中央倉庫:
https://mvnrepository.com/
本地倉庫
本地倉庫指本機(jī)的一份拷貝,用來緩存遠(yuǎn)程下載,包含你尚未發(fā)布的臨時(shí)構(gòu)件。
倉庫配置
在settings.xml文件中配置本地倉庫
本地倉庫是開發(fā)者本地電腦中的一個(gè)目錄,用于緩存從遠(yuǎn)程倉庫下載的構(gòu)件。默認(rèn)的本地倉庫是${user.home}/.m2/repository。用戶可使用settings.xml文件修改本地倉庫。具體內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <settingsxmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!-- 本地倉庫配置 --><localRepository>具體本地倉庫位置</localRepository><!-- 省略,具體信息參考后續(xù)內(nèi)容。 --> </settings>在settings.xml文件中配置鏡像倉庫
如果倉庫A可以提供倉庫B存儲的所有內(nèi)容,那么就可以認(rèn)為A是B的一個(gè)鏡像。例如:在國內(nèi)直接連接中央倉庫下載依賴,由于一些特殊原因下載速度非常慢。這時(shí),我們可以使用阿里云提供的鏡像http://maven.aliyun.com/nexus/content/groups/public/來替換中央倉庫http://repol.maven.org/maven2/。修改maven的setting.xml文件,具體內(nèi)容如下:
<mirror><!-- 指定鏡像ID(可自己改名) --><id>nexus-aliyun</id><!-- 匹配中央倉庫(阿里云的倉庫名稱,不可以自己起名,必須這么寫)--><mirrorOf>central</mirrorOf><!-- 指定鏡像名稱(可自己改名) --><name>Nexus aliyun</name><!-- 指定鏡像路徑(鏡像地址) --><url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>倉庫優(yōu)先級問題
優(yōu)先級別:
JDK的配置
當(dāng)你的idea中有多個(gè)jdk的時(shí)候,就需要指定你編譯和運(yùn)行的jdk。在settings.xml中配置:
<profile><!-- settings.xml中的id不能隨便起的 --><!-- 告訴maven我們用jdk1.8 --><id>jdk-1.8</id><!-- 開啟JDK的使用 --><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><!-- 配置編譯器信息 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties> </profile>配置的前提是,你的idea中要有1.8的jdk
總結(jié):
在settings.xml中:配置了三個(gè)信息:
【1】本地倉庫
【2】鏡像倉庫
【3】JDK
Maven工程類型
【1】POM工程
POM工程是邏輯工程。用在父級工程或聚合工程中。用來做jar包的版本控制。
【2】JAR工程
將會打包成jar,用作jar包使用。即常見的本地工程 —> Java Project。
【3】WAR工程
將會打包成war,發(fā)布在服務(wù)器上的工程。
在IDEA中創(chuàng)建Maven工程
【1】過程:
標(biāo)準(zhǔn)目錄結(jié)構(gòu):
Maven項(xiàng)目結(jié)構(gòu)
標(biāo)準(zhǔn)目錄結(jié)構(gòu):
?src/main/java
這個(gè)目錄下儲存java源代碼
?src/main/resources
儲存主要的資源文件。比如xml配置文件和properties文件
?src/test/java
儲存測試用的類,比如JUNIT的測試一般就放在這個(gè)目錄下面
因?yàn)闇y試類本身實(shí)際是不屬于項(xiàng)目的,所以放在任何一個(gè)包下都顯得很尷尬,所以maven專門創(chuàng)建了一個(gè)測試包
用于存放測試的類
?src/test/resources
可以自己創(chuàng)建你,儲存測試環(huán)境用的資源文件
?src
包含了項(xiàng)目所有的源代碼和資源文件,以及其他項(xiàng)目相關(guān)的文件。
?target
編譯后內(nèi)容放置的文件夾
?pom.xml
是Maven的基礎(chǔ)配置文件。配置項(xiàng)目和項(xiàng)目之間關(guān)系,包括配置依賴關(guān)系等等
目錄結(jié)構(gòu)圖:
–MavenDemo 項(xiàng)目名
–.idea 項(xiàng)目的配置,自動生成的,無需關(guān)注。
–src
–main 實(shí)際開發(fā)內(nèi)容
–java 寫包和java代碼,此文件默認(rèn)只編譯.java文件
–resource 所有配置文件。最終編譯把配置文件放入到classpath中。
– test 測試時(shí)使用,自己寫測試類或junit工具等
–java 儲存測試用的類
pom.xml 整個(gè)maven項(xiàng)目所有配置內(nèi)容。
注意:
目錄名字不可以隨便改,因?yàn)閙aven進(jìn)行編譯或者jar包生成操作的時(shí)候,是根據(jù)這個(gè)目錄結(jié)構(gòu)來找的,你若輕易動,那么就找不到了。
POM模式-Maven工程關(guān)系
Maven工具基于POM(Project Object Model,項(xiàng)目對象模型)模式實(shí)現(xiàn)的。在Maven中每個(gè)項(xiàng)目都相當(dāng)于是一個(gè)對象,對象(項(xiàng)目)和對象(項(xiàng)目)之間是有關(guān)系的。關(guān)系包含了:依賴、繼承、聚合,實(shí)現(xiàn)Maven項(xiàng)目可以更加方便的實(shí)現(xiàn)導(dǎo)jar包、拆分項(xiàng)目等效果。
依賴關(guān)系
【1】依賴關(guān)系:
即A工程開發(fā)或運(yùn)行過程中需要B工程提供支持,則代表A工程依賴B工程。
在這種情況下,需要在A項(xiàng)目的pom.xml文件中增加下屬配置定義依賴關(guān)系。
通俗理解:就是導(dǎo)jar包。
B工程可以是自己的項(xiàng)目打包后的jar包,也可以是中央倉庫的jar包。
【2】如何注入依賴呢?
在pom.xml文件 根元素project下的 dependencies標(biāo)簽中,配置依賴信息,內(nèi)可以包含多個(gè) dependence元素,以聲明多個(gè)依賴。每個(gè)依賴dependence標(biāo)簽都應(yīng)該包含以下元素:groupId, artifactId, version : 依賴的基本坐標(biāo), 對于任何一個(gè)依賴來說,基本坐標(biāo)是最重要的, Maven根據(jù)坐標(biāo)才能找到需要的依賴。
【3】依賴的好處:
省去了程序員手動添加jar包的操作,省事!!
可以幫我們解決jar包沖突問題:
特性_依賴的傳遞性
傳遞性依賴是Maven2.0的新特性。假設(shè)你的項(xiàng)目依賴于一個(gè)庫,而這個(gè)庫又依賴于其他庫。你不必自己去找出所有這些依賴,你只需要加上你直接依賴的庫,Maven會隱式的把這些庫間接依賴的庫也加入到你的項(xiàng)目中。這個(gè)特性是靠解析從遠(yuǎn)程倉庫中獲取的依賴庫的項(xiàng)目文件實(shí)現(xiàn)的。一般的,這些項(xiàng)目的所有依賴都會加入到項(xiàng)目中,或者從父項(xiàng)目繼承,或者通過傳遞性依賴。
如果A依賴了B,那么C依賴A時(shí)會自動把A和B都導(dǎo)入進(jìn)來。
創(chuàng)建A項(xiàng)目后,選擇IDEA最右側(cè)Maven面板lifecycle,雙擊install后就會把項(xiàng)目安裝到本地倉庫中,其他項(xiàng)目就可以通過坐標(biāo)引用此項(xiàng)目。
案例:
項(xiàng)目1:MavenDemo項(xiàng)目依賴了Mybatis的內(nèi)容:
注意:請將項(xiàng)目1打包為jar包—》重新打包
再創(chuàng)建項(xiàng)目2:讓項(xiàng)目2依賴項(xiàng)目1:
從上面可以證明:項(xiàng)目2依賴項(xiàng)目1,項(xiàng)目1依賴Mybatis工程,–》傳遞性—》項(xiàng)目2可以直接使用Mybatis工程
原則:兩個(gè)原則
【1】第一原則:最短路徑優(yōu)先原則
“最短路徑優(yōu)先”意味著項(xiàng)目依賴關(guān)系樹中路徑最短的版本會被使用。
例如,假設(shè)A、B、C之間的依賴關(guān)系是A->B->C->D(2.0) 和A->E->(D1.0),那么D(1.0)會被使用,因?yàn)锳通過E到D的路徑更短。
【2】第二原則:最先聲明原則
依賴路徑長度是一樣的的時(shí)候,第一原則不能解決所有問題,比如這樣的依賴關(guān)系:A–>B–>Y(1.0),A–>C–>Y(2.0),Y(1.0)和Y(2.0)的依賴路徑長度是一樣的,都為2。那么到底誰會被解析使用呢?在maven2.0.8及之前的版本中,這是不確定的,但是maven2.0.9開始,為了盡可能避免構(gòu)建的不確定性,maven定義了依賴調(diào)解的第二原則:第一聲明者優(yōu)先。在依賴路徑長度相等的前提下,在POM中依賴聲明的順序決定了誰會被解析使用。順序最靠前的那個(gè)依賴優(yōu)勝。
排除依賴
exclusions: 用來排除傳遞性依賴 其中可配置多個(gè)exclusion標(biāo)簽,每個(gè)exclusion標(biāo)簽里面對應(yīng)的有g(shù)roupId, artifactId, version三項(xiàng)基本元素。注意:不用寫版本號。
比如:A—>B—>C (Mybatis.jar) 排除C中的Mybatis.jar
依賴范圍(重要!)
依賴范圍就決定了你依賴的坐標(biāo) 在什么情況下有效,什么情況下無效:
?compile
這是默認(rèn)范圍。如果沒有指定,就會使用該依賴范圍。表示該依賴在編譯和運(yùn)行時(shí)都生效。
?provided(重要)
已提供依賴范圍。使用此依賴范圍的Maven依賴。典型的例子是servlet-api,編譯和測試項(xiàng)目的時(shí)候需要該依賴,但在運(yùn)行項(xiàng)目的時(shí)候,由于容器已經(jīng)提供,就不需要Maven重復(fù)地引入一遍(如:servlet-api,例如tomcat)
?runtime
runtime范圍表明編譯時(shí)不需要生效,而只在運(yùn)行時(shí)生效。典型的例子是JDBC驅(qū)動實(shí)現(xiàn),項(xiàng)目主代碼的編譯只需要JDK提供的JDBC接口,只有在執(zhí)行測試或者運(yùn)行項(xiàng)目的時(shí)候才需要實(shí)現(xiàn)上述接口的具體JDBC驅(qū)動。
?system
系統(tǒng)范圍與provided類似,不過你必須顯式指定一個(gè)本地系統(tǒng)路徑的JAR,此類依賴應(yīng)該一直有效,Maven也不會去倉庫中尋找它。但是,使用system范圍依賴時(shí)必須通過systemPath元素顯式地指定依賴文件的路徑。
?test
test范圍表明使用此依賴范圍的依賴,只在編譯測試代碼和運(yùn)行測試的時(shí)候需要,應(yīng)用的正常運(yùn)行不需要此類依賴。典型的例子就是JUnit,它只有在編譯測試代碼及運(yùn)行測試的時(shí)候才需要。Junit的jar包就在測試階段用就行了,你導(dǎo)出項(xiàng)目的時(shí)候沒有必要把junit的東西到處去了就,所在在junit坐標(biāo)下加入scope-test
?Import
補(bǔ)充:dependencyManagement的使用
作用:Maven中的dependencyManagement元素提供了一種管理依賴版本號的方式。在dependencyManagement元素中聲明所依賴的jar包的版本號等信息,那么所有子項(xiàng)目再次引入此依賴jar包時(shí)則無需顯式的列出版本號。Maven會沿著父子層級向上尋找擁有dependencyManagement 元素的項(xiàng)目,然后使用它指定的版本號。
如果有多個(gè)子項(xiàng)目都引用同一樣依賴,則可以避免在每個(gè)使用的子項(xiàng)目里都聲明一個(gè)版本號。當(dāng)想升級或切換到另一個(gè)版本時(shí),只需要在頂層父容器里更新,而不需要逐個(gè)修改子項(xiàng)目;另外如果某個(gè)子項(xiàng)目需要另外的一個(gè)版本,只需要聲明version即可。
注意:dependencyManagement中定義的只是依賴的聲明,并不實(shí)現(xiàn)引入,因此子項(xiàng)目需要顯式的聲明需要用的依賴。
import范圍只適用于pom文件中的部分。表明指定的POM必須使用部分的依賴。
注意:import只能用在dependencyManagement的scope里。
定義一個(gè)父工程 -->POM工程:
注意:工程1要 mvn install 打成自己的jar包,提供給子工程用
定義一個(gè)子工程:(里面寫上父工程的坐標(biāo))
如果父工程中加入score-import,相當(dāng)于強(qiáng)制的指定了版本號,子工程在引入父工程的時(shí)候,強(qiáng)制使用父工程的版本號,即子工程無法指定自己的版本號。
繼承關(guān)系
如果A工程繼承B工程,則代表A工程默認(rèn)依賴B工程依賴的所有資源,且可以應(yīng)用B工程中定義的所有資源信息。被繼承的工程(B工程)只能是POM工程。
注意:在父項(xiàng)目中放在<dependencyManagement>中的內(nèi)容時(shí)不被子項(xiàng)目繼承,不可以直接使用
放在<dependencyManagement>中的內(nèi)容主要目的是進(jìn)行版本管理。里面的內(nèi)容在子項(xiàng)目中依賴時(shí)坐標(biāo)只需要填寫<group id>和<artifact id>即可。(注意:如果子項(xiàng)目不希望使用父項(xiàng)目的版本,可以明確配置version)。
父工程是一個(gè)POM工程:
創(chuàng)建子工程:
繼承關(guān)系在本質(zhì)上,是POM文件的繼承
聚合關(guān)系
當(dāng)我們開發(fā)的工程擁有2個(gè)以上模塊的時(shí)候,每個(gè)模塊都是一個(gè)獨(dú)立的功能集合。比如某大學(xué)系統(tǒng)中擁有搜索平臺,學(xué)習(xí)平臺,考試平臺等。開發(fā)的時(shí)候每個(gè)平臺都可以獨(dú)立編譯,測試,運(yùn)行。這個(gè)時(shí)候我們就需要一個(gè)聚合工程。
在創(chuàng)建聚合工程的過程中,總的工程必須是一個(gè)POM工程(Maven Project)(聚合項(xiàng)目必須是一個(gè)pom類型的項(xiàng)目,jar項(xiàng)目war項(xiàng)目是沒有辦法做聚合工程的),各子模塊可以是任意類型模塊(Maven Module)。
前提:繼承。
聚合包含了繼承的特性。
聚合時(shí)多個(gè)項(xiàng)目的本質(zhì)還是一個(gè)項(xiàng)目。這些項(xiàng)目被一個(gè)大的父項(xiàng)目包含。且這時(shí)父項(xiàng)目類型為pom類型。同時(shí)在父項(xiàng)目的pom.xml中出現(xiàn)表示包含的所有子模塊。
總項(xiàng)目:一般總項(xiàng)目:POM項(xiàng)目
具體模塊:
Maven常見插件
編譯器插件
通過編譯器插件,我們可以配置使用的JDK或者說編譯器的版本:
【1】 settings.xml文件中配置全局編譯器插件:
找到profiles節(jié)點(diǎn),在里面加入profile節(jié)點(diǎn):
<profile><!-- 定義的編譯器插件ID,全局唯一,名字隨便起 --><id>jdk-1.7</id><!-- 插件標(biāo)記,activeByDefault :true默認(rèn)編譯器,jdk提供編譯器版本 --><activation><activeByDefault>true</activeByDefault><jdk>1.7</jdk></activation><!-- 配置信息source-源信息,target-字節(jié)碼信息,compilerVersion-編譯過程版本 --><properties><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion></properties> </profile>【2】配置編譯器插件:pom.xml配置片段
<!-- 配置maven的編譯插件 --> <build><plugins><!--JDK編譯插件 --><plugin><!--插件坐標(biāo) --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><!-- --><configuration><!-- 源代碼使用JDK版本--><source>1.7</source><!-- 源代碼編譯為class文件的版本,要保持跟上面版本一致--><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins> </build>資源拷貝插件
Maven在打包時(shí)默認(rèn)只將src/main/resources里的配置文件拷貝到項(xiàng)目中并做打包處理,而非resource目錄下的配置文件在打包時(shí)不會添加到項(xiàng)目中。
我們的配置文件,一般都放在:src/main/resources,然后打包后配置文件就會在target的classes下面放著:
測試:
我現(xiàn)在想把非resources下面的文件也打包到classes下面,需要配置:
pom.xml配置片段:
配置好以后,那么你設(shè)置的位置下的配置文件都會被打包了:
tomcat 插件
我們?nèi)绻麆?chuàng)建war項(xiàng)目,必然要部署在服務(wù)器上,方式:
(1)部署在遠(yuǎn)程服務(wù)器上
(2)將IDEA和外部tomcat產(chǎn)生關(guān)聯(lián),然后將項(xiàng)目部署在外部tomcat上
現(xiàn)在學(xué)習(xí)一個(gè)新的方式,不再依賴外部的tomcat,maven提供了tomcat插件,我們可以配置來使用。
創(chuàng)建web項(xiàng)目(war項(xiàng)目):
使用Tomcat插件發(fā)布部署并執(zhí)行war工程的時(shí)候,需要使用啟動命令,啟動命令為: tomcat7:run。命令中的tomcat7是插件命名,由插件提供商決定。run為插件中的具體功能。
(注意:之前用的編譯器插件,資源拷貝插件,不是可運(yùn)行的插件,maven直接幫我們運(yùn)行了,但是tomcat屬于可運(yùn)行插件,它什么時(shí)候工作需要程序員來控制,怎么控制呢?我們必須通過命令來運(yùn)行控制)
具體pom.xml文件的配置如下:
右側(cè)maven執(zhí)行命令tomcat7:run:
看到運(yùn)行結(jié)果,顯示tomcat啟動成功。在瀏覽器中訪問index.jsp頁面。
Maven常見命令介紹
Maven的命令非常多,我們只是講解常用的幾個(gè):(所有命令都可以在控制臺運(yùn)行的)
? install
本地安裝, 包含編譯,打包,安裝到本地倉庫
編譯 - javac
打包 - jar, 將java代碼打包為jar文件
安裝到本地倉庫 - 將打包的jar文件,保存到本地倉庫目錄中。
? clean
清除已編譯信息。
刪除工程中的target目錄。
? compile
只編譯。 javac命令
? package
打包。 包含編譯,打包兩個(gè)功能。
注:install和package的區(qū)別
-
package 命令完成了項(xiàng)目編譯、單元測試、打包功能,但沒有把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉庫和遠(yuǎn)程maven私服倉庫
-
install 命令完成了項(xiàng)目編譯、單元測試、打包功能,同時(shí)把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉庫,但沒有布署到遠(yuǎn)程maven私服倉庫
總結(jié)
以上是生活随笔為你收集整理的面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试必会系列 - 5.2 详解OSI模型
- 下一篇: 面试必会系列 - 5.3 LVS负载均衡