maven基本知識整理

1. 基本功能和用途

maven是 一個項目管理和構建自動化的工具,相比於ant,maven不需要寫複雜的腳本,採用聲明式的類庫依賴管理。可以完成項目構建,比如生成war,打包jar;可以生成項目文檔,比如javadoc;生成報告,比如junit測試報告;生成依賴類庫,執行發佈和部署等。
maven的安裝過程比較簡單,網上有很多教程,不再贅述。maven的配置,主要是配置環境變量,修改conf下的setting文件。該過程可以參考:http://maven.oschina.net/help.html

2. pom文件解析

pom文件格式整理規則
描述依賴關係的繼承關係 <parent>
多模塊的工程描述 <modules>
第一塊應該爲當前項目的相關說明。<project>
第二塊爲依賴中所使用的版本變量,<properties>
第三塊爲依賴的jar包集合 <dependencies>
第四塊爲依賴的jar的版本說明,解除部分依賴集 <dependencyManagement>
第五塊爲構建時的設置 <build>
第六塊爲項目中資源文件的位置<resources>
設置管理,管理項目引用不同的環境設置<profiles>
項目中引用的插件 <plugins>
插件管理 <pluginManagement>
還可以設置公告信息<reportings>許可文件<licenses>開發者信息<developers>
分發管理,告訴別的項目如何抓取本項目<distributionManagement >

其中<dependencies>中有座標的概念,形式如:

<dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
            <scope>***</scope>
 </dependency>

其中,groupId,atrifactId和version:依賴的jar的基本座標,maven根據座標可以找到所需要的依賴
scope:依賴的範圍。maven有6種依賴範圍,分別是:
1.compile:編譯依賴範圍。如果沒有指定,所有的項目依賴都會默認使用該依賴範圍。
2.test:測試依賴範圍,跑單元測試時的maven依賴,例如junit
3.provided:以提供的依賴訪問,例如servlet-api。web應用容器就提供了,所以不需要maven重複引入一遍
4.runtime:運行時依賴範圍,例如JDBC驅動實現。
5.system:系統依賴範圍,和provided依賴範圍完全一直,例如jdk種rt.jar。該類依賴範圍和系統配置相關,不能通過maven倉庫管理,所以慎用。
6.import:導入依賴範圍(目前基本沒用過)。
上面的依賴範圍都與相應生命週期對應的classpath對應。比如,測試時maven用的是一套classpath,運行時用的時另外一套classpath。
最好的例子還是使用junit。我們只有在測試時纔會用到這個項目依賴,所以它的scope就是test。
type:依賴的類型,大部分情況下不用定義,默認值是jar
optional:標記依賴是否可選。(ps:這個太複雜,還沒想好怎麼簡單的表述出來)

<dependencyManagement>爲依賴的jar的版本說明,解除部分依賴集,解除時使用exclusions:
exclusions:用來排除傳遞性依賴。
這裏需要解釋下什麼叫傳遞性依賴。如果一個A.jar包依賴B.jar包,B.jar包依賴於C.jar包,那麼我們就認爲A.jar直接依賴於B.jar,而A.jar間接依賴於C.jar.
而這種依賴關係會給項目隱式的引入很多依賴,這大大的簡化了項目依賴的管理,但是有些時候這種特性也會帶來問題,例如當前項目中使用了C.jar的最新版本,而B.jar中依賴的C.jar版本過低,並且新舊版本並存會直接影響到當前項目,這時就可以使用exclusions來排除依賴傳遞性。
一般情況下 ,在整理pom文件或引入新的jar包時,往往需要解決傳遞性依賴的問題。

3. 生命週期概述

生命週期是maven的核心概念。有三種內建的生命週期:default,clean,site。default解決項目發佈,clean解決項目清除。
default生命週期由以下過程組成:

* validate - validate the project is correct and all necessary information is available
* compile - compile the source code of the project
* test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
* package - take the compiled code and package it in its distributable format, such as a JAR.
* integration-test - process and deploy the package if necessary into an environment where integration tests can be run
* verify - run any checks to verify the package is valid and meets quality criteria
* install - install the package into the local repository, for use as a dependency in other projects locally
* deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

4 基本指令整理

  1. 創建Maven的普通java項目:
mvn archetype:create
   -DgroupId=packageName
   -DartifactId=projectName 
  1. 創建Maven的Web項目:
    mvn archetype:create
    -DgroupId=packageName   
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp  
  1. 編譯源代碼: mvn compile
  2. 編譯測試代碼:mvn test-compile
  3. 運行測試:mvn test
  4. 產生site:mvn site
  5. 打包:mvn package
  6. 在本地Repository中安裝jar:mvn install
  7. 清除產生的項目:mvn clean
  8. 生成eclipse項目:mvn eclipse:eclipse
  9. 生成idea項目:mvn idea:idea
  10. 組合使用goal命令,如只打包不測試:mvn -Dtest package
  11. 編譯測試的內容:mvn test-compile
  12. 只打jar包: mvn jar:jar
  13. 只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile ( -skipping 的靈活運用,當然也可以用於其他組合命令)
  14. 清除eclipse的一些系統設置:mvn eclipse:clean

此外:
1. 構建的時候跳過測試, mvn install -Dmaven.test.skip=true 如果是eclipse,勾選那個skipTest選項
2. 在實際中通常同一個項目有多個配置文件,比如有local,dev,beta,prod等,構建的時候需要指定配置文件時,使用:mvn -Pdev package
還有一種方法是手動的改pom文件,在dev的節點下,添加:

<activation>
    <activeByDefault>true</activeByDefault>
</activation>

參考文檔:
http://cloudera.iteye.com/blog/424795
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
http://maven.apache.org/
http://maven.oschina.net/help.html

發佈了36 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章