1、POM ( Project Object Model,項目對象模型 )——Maven項目的核心,定義了項目的基本信息,用於描述項目如何構建,聲明項目依賴等等。java
1.groupId、artifactId和version這三個元素定義了一個項目的基本座標,在Maven的世界裏,任何的jar、pom或者war都是基於這些基本的座標進行區分的。spring
2.groupId定義了項目屬於哪一個組,這個組每每和項目所在的組織或公司存在關聯。例如:com.googlecode.myapp。api
3.artifactId定義了當前Maven項目在組中惟一的ID。例如:myappapp
4.version指定了Hello World項目當前的版本——1.0SNAPSHOP。SNAPSHOT說明該項目還處於開發中,是不穩定的版本。隨着項目的發展,version會不斷更新,如升級爲1.0、1.一、2.0等。ide
5.name元素聲明瞭一個對於用戶更爲友好的項目名稱,不是必須的,推薦爲每一個POM聲明name。測試
2、項目主代碼和測試代碼google
1.項目主代碼和測試代碼不一樣,項目的主代碼會被打包到最終的構件中(如jar),而測試代碼只在運行測試時用到,不會被打包。spa
2.默認狀況下,Maven項目主代碼位於src/main/java目錄,這是Maven的約定。code
3.默認狀況下,Maven項目中默認的測試代碼目錄是src/test/java。對象
4.使用JUnit進行測試時,首先須要爲項目添加一個JUnit依賴,修改項目的POM代碼增長如下代碼:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.6</version> <scope>test</scope> </dependency>
上述POM代碼有一個值爲test的元素scope,scope爲依賴範圍,若依賴範圍爲test表示該依賴只對測試有效,若是在主代碼中用Junit就會形成編譯錯誤。若是不聲明依賴範圍,那麼默認值就是compile,表示該依賴對主代碼和測試代碼都有效。
5.Maven執行測試命令:mvn clean test。
3、使用Maven進行編譯
1.在項目根目錄下運行命令mvn clean compile。
2.clean告訴Maven清理輸出目錄target/,compile告訴Maven編譯項目主代碼,將項目的主代碼編譯至target/classes目錄。
4、打包和運行
1.若是POM中沒有指定打包類型,使用默認打包類型jar。執行命令:mvn clean package進行打包。
2.若是要讓其餘的Maven項目直接使用打包的jar,還須要一個安裝的步驟,執行mvn clean install。
到此爲止,Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。這四個命令必須按前後順序執行。
3.使用intellij IDEA來用Maven編譯咱們的代碼,打開Maven Projects菜單,選中clean、compile並右鍵點擊Run 'xxx[clean,compile]'按鈕便可。
5、Maven的座標
1.Maven座標的元素包括groupId、artifactId、version、packaging、classifier。
2.groupId:定義當前Maven項目隸屬的實際項目。
3.artifactId:該元素定義實際項目中的一個Maven項目(模塊),推薦的作法是使用實際項目名稱做爲artifactId的前綴,這樣作的好處是方便尋找實際構件。在默認狀況下,Maven生成的構件,其文件名會以artifactId做爲開頭。
4.version:該元素定義Maven項目當前所處的版本。
5.packaging:該元素定義Maven項目的打包方式。首先,打包方式一般與所生成構件的文件擴展名對應。其次,打包方式會影響到構=構建的生命週期。最後,當不定義packaging的時候,Maven會使用默認值jar。
6.classifier:該元素用來幫助定義構建輸出的一些附屬構件。
上述5個元素中,groupId、artifactId、version是必須定義的,packaging是可選的(默認爲jar),而classifier是不能直接定義的。
6、依賴範圍scope的取值
依賴範圍就是用來控制依賴與三種classpath的關係(編譯classpath、測試classpath、運行classpath)的關係。
1.compile:編譯依賴範圍。默認使用該值。使用此依賴範圍,對於編譯、測試、運行三種classpath都有效。如spring-core。
2.test:測試依賴範圍。只對於測試classpath有效。如JUnit。
3.provided:已提供依賴範圍。對於編譯和測試classpath有效,但在運行時無效。如servlet-api。
4.runtime:運行時依賴範圍。對於測試和運行classpath有效,但在編譯主代碼時無效。如JDBC驅動實現。
5.system:系統依賴範圍。與provided徹底一致。儘可能少用。
6.import:導入依賴範圍。不會對三種classpath產生實際的影響。