若要使用Maven,那麼項目的目錄結構必須符合Maven的規範css
,如寫一個使用Spring的Web項目就須要引入大量的jar包。一個項目Jar包的數量之多每每讓咱們瞠目結舌,而且Jar包之間的關係錯綜複雜,一個Jar包每每又會引用其餘Jar包,缺乏任何一個Jar包都會致使項目編譯失敗。java
-v:查詢Maven版本spring
本命令用於檢查maven是否安裝成功。apache
Maven安裝完成以後,在命令行輸入mvn -v,若出現maven信息,則說明安裝成功。api
compile:編譯ruby
將java源文件編譯成class文件maven
test:測試項目ide
執行test目錄下的測試用例性能
package:打包測試
將項目打成jar包
clean:刪除target文件夾
install:安裝
將當前項目放到Maven的本地倉庫中。供其餘項目使用
Maven倉庫用來存放Maven管理的全部Jar包。分爲:本地倉庫 和 中央倉庫。
當項目編譯時,Maven首先從本地倉庫中尋找項目所需的Jar包,若本地倉庫沒有,再到Maven的中央倉庫下載所需Jar包。
在Maven中,座標是Jar包的惟一標識,Maven經過座標在倉庫中找到項目所需的Jar包。
以下代碼中,groupId和artifactId構成了一個Jar包的座標。
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.1</version> </dependency>
<exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions>
若項目中多個Jar同時引用了相同的Jar時,會產生依賴衝突,但Maven採用了兩種避免衝突的策略,所以在Maven中是不存在依賴衝突的。
本項目——>A.jar——>B.jar——>X.jar 本項目——>C.jar——>X.jar
若本項目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,而且C.jar也引用了X.jar。
在此時,Maven只會引用引用路徑最短的Jar。
什麼是聚合?
將多個項目同時運行就稱爲聚合。
如何實現聚合?
只需在pom中做以下配置便可實現聚合:
<modules>
<module>../模塊1</module> <module>../模塊2</module> <module>../模塊3</module> </modules>
什麼是繼承?
在聚合多個項目時,若是這些被聚合的項目中須要引入相同的Jar,那麼能夠將這些Jar寫入父pom中,各個子項目繼承該pom便可。
如何實現繼承?
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.2</version> </dependency> </dependencies> </dependencyManagement>
<parent> <groupId>父pom所在項目的groupId</groupId> <artifactId>父pom所在項目的artifactId</artifactId> <version>父pom所在項目的版本號</version> </parent>
New Maven項目:選擇WebApp:
若使用JSP,需添加Servlet依賴:
注:Servlet依賴只在編譯和測試時使用!
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <!-- 只在編譯和測試時運行 --> <scope>provided</scope> </dependency>
10.
pom.xml是Maven的核心,你的項目須要什麼Jar包就在pom.xml裏面配置。當編譯項目時Maven讀取該文件,並從倉庫中下載相應的Jar包。
11.maven 自動讀取pom文件,maven會自動查找和讀取pom文件
12.插件也是保存在倉庫裏的!是以maven座標的方式!插件也有maven 一樣的groupid和archifact id座標方式,
插件也是從倉庫去下載的!
<plugin> <!--插件在倉庫裏的group ID--> <groupId/> <!--插件在倉庫裏的artifact ID--> <artifactId/> <!--被使用的插件的版本(或版本範圍)--> <version/> <!--是否從該插件下載Maven擴展(例如打包和類型處理器),因爲性能緣由,只有在真須要下載時,該元素才被設置成enabled。--> <extensions/> <!--在構建生命週期中執行一組目標的配置。每一個目標可能有不一樣的配置。--> <executions> <!--execution元素包含了插件執行須要的信息--> <execution> <!--執行目標的標識符,用於標識構建過程當中的目標,或者匹配繼承過程當中須要合併的執行目標--> <id/> <!--綁定了目標的構建生命週期階段,若是省略,目標會被綁定到源數據裏配置的默認階段--> <phase/> <!--配置的執行目標--> <goals/> <!--配置是否被傳播到子POM--> <inherited/> <!--做爲DOM對象的配置--> <configuration/> </execution> </executions> <!--項目引入插件所須要的額外依賴--> <dependencies>