maven還生成了一個重要的文件pom.xml,maven就是經過這個文件來來管理整個project,能夠理解位相似於eclipse的.project文件。默認生成的pom.xml文件的內容以下:web
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <!-- 這個XML文件所使用的POM格式的版本 --> <modelVersion>4.0.0</modelVersion> <!-- 表明組織和整個項目的惟一標誌 --> <groupId>com.msc</groupId> <!-- 這個project最後所生成的文檔(jar、war)的名字 --> <artifactId>first</artifactId> <!-- 這個項目的打包的類型 --> <packaging>war</packaging> <!-- 項目的版本 --> <version>0.0.1-SNAPSHOT</version> <!-- 項目的名字,生成文檔等內容的時候會用的這個名字 --> <name>first Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>first</finalName> </build> </project>
以最終客戶的角度來看,JAR文件就是一種封裝,他們不須要知道jar文件中有多少個.class文件,每一個文件中的功能與做用,一樣能夠獲得他們但願的結果。除jar之外對於J2EE來講還有war和ear。區別見下表:
apache
JAR | WAR | EAR | |
英文 | Java Archive file | Web Archive file | Enterprise Archive file |
包含內容 | class、properties文件,是文件封裝的最小單元;包含Java類的普通庫、資源(resources)、輔助文件(auxiliary files)等 | Servlet、JSP頁面、JSP標記庫、JAR庫文件、HTML/XML文檔和其餘公用資源文件,如圖片、音頻文件等 | 除了包含JAR、WAR之外,還包括EJB組件 |
部署文件 | application-client.xml | web.xml | application.xml |
容器 | 應用服務器(application servers) | 小型服務程序容器(servlet containers) | EJB容器(EJB containers) |
級別 | 小 | 中 | 大 |
archetype(原型)是一個Maven項目模板工具包。服務器
一個archetype指明瞭app
pom.xml文件的POM全稱是Project Object Model,這個文件對於maven的使用者來講是一個和maven交互的渠道,pom.xml包含了一個maven project的配置,一個project該如何編譯打包,project有哪些依賴項等等。eclipse
仔細看一下咱們前面建立project的命令:mvn archetype:generate DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=myappmaven
使用方法:用命令行進入指定文件夾輸入建立命令工具
1) archetype:generate, 這是一個maven的plugin,用來從一個archetype建立一個project,關於plugin後面再說。單元測試
2) DarchetypeGroupId,這個就是指的archetype的groupid,也就是說是用的哪一個archetype,或者說用哪一個項目模板。測試
3) 後面的兩個參數,用來放大pom.xml文件裏面,做爲當前建立的project的描述信息。ui
Project建立好了,看如何去編譯,直接進入的project的目錄,在命令行下:
mvn compile
編譯完後maven會建立一個target目錄去保存編譯結果。 咱們須要編譯成一個什麼樣的內容,以及要輸出到什麼地方等等,都是能夠在pom.xml文件裏面配置的,可是由於咱們目前並無指定這些內容,因此maven會使用默認值。
咱們還能夠用maven執行test:
mvn test
第一次執行時,maven會去下載一些依賴項。另外要注意的時,若是咱們更改了默認的目錄結構,maven會由於找bu到test而沒法去執行test。若是隻須要編譯test能夠執行:
mvn test-compile
要把項目打包,執行:
mvn package
mvn會根據pom.xml裏面的packaging選項打包成相應的文件。
maven裏面有一個repository的概念,當咱們的項目依賴於某個jar時,maven會去repository裏面去找。repository分兩種,一種是遠程的,一種是本地的。若是有幾個project都用到junit,咱們能夠把junit放在repository裏面,幾個project能夠公用,節約存儲空間並且方便管理,這個repository的位置能夠在pom.xml裏面設置。
本地的默認的路徑是安裝用戶的目錄下的 .m2\repository 文件夾。若是一個依賴項在本地的repository裏面沒有,那麼maven會去他本身的遠程的repository http://repo.maven.apache.org/maven2 去下載後放到本地的repository裏面。
也就是說,咱們若是咱們的project須要要引用一個依賴項,咱們只須要在pom.xml文件中進行配置,maven會自動幫咱們去引用。 咱們以前的建立project裏面須要寫單元測試,引用到了junit,看pom中的配置:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
每個須要爲每個 dependency 指明groupId,artifactId,version。scope很簡單,意思是說咱們須要怎麼引用,好比咱們上面的例子裏面設置的是test,意思是說只在test裏面引用junit。 可是咱們如何知道groupId,artifactId和version呢? 好比我如今想引用log4j,這個幾個值怎麼填? 能夠去http://mirrors.ibiblio.org/maven2/ 上去查找。好比log4j,咱們就在上面這個地址加上log4j,也就是http://mirrors.ibiblio.org/maven2/junit/。進去後會有一個maven-metadata.xml,打開就能夠知道這些值了而後添加這個dependency了。
若是要把一個project安裝到本地的repository裏面,能夠執行下面的命令:
mvn install
到這裏就說完了建立,編譯,測試,打包以及安裝,大部分的項目也就是作這些事情。
再介紹幾個其它命令: