maven學習(上)- 基本入門用法

1、下載及安裝html

1.1 下載maven 3.1.1java

先到官網http://maven.apache.org/download.cgi 下載最新版本(目前是3.1.1 ),下載完成後,解壓到某個目錄(本文中是C:\Java\maven-3.1.1)web

 

2.1 配置環境變量apache

系統環境變量裏,添加MAVEN_HOME(或M2_HOME),其值爲C:\Java\maven-3.1.1,而後PATH環境變量最後附加上";%MAVEN_HOME%\bin"服務器

檢測方法:app

a) 從新進入命令行(DOS窗口)模式,輸入 echo %MAVEN_HOME% 若是能顯示 C:\Java\maven-3.1.1 說明環境變量起做用了eclipse

b) 輸入 mvn -version,正常狀況下會顯示maven及jdk的版本號webapp

(前提:jdk環境必須先安裝好,不然後面沒法正常編譯項目)maven

 

3 理解「倉庫」ide

首次運行完mvn -version後,會在用戶目錄下建立一個.m2的目錄(好比:C:\Users\當前用戶名\.m2\),這個目錄是maven的「本地倉庫」,倉庫是maven中一個很重要的概念。

試想一下,咱們會在工做中同時建立不少項目,每一個項目可能都會引用一些公用的jar包(.NET中是dll文件),一種做法是每一個項目裏,都複製一份這些依賴的jar包(或dll文件),這樣顯然很差,相同的文件在硬盤上保存了多份,太佔用空間,並且這些依賴的jar包(或dll文件)的版本也不太好管理(好比某個公用的jar包,從1.0升級到2.0,若是全部引用這個jar包的項目都須要更新,必須一個個項目的修改)。

maven的倉庫則很好的解決了這些問題,它在每臺機器上建立一個本機倉庫,把本機上全部maven項目依賴的jar包統一管理起來,並且這些jar包用「座標」來惟一標識(注:座標是另外一個重要的概念,後面還會講到,這裏只要簡單理解成「惟一識別某個jar包文件名、版本號」的標識便可),這樣全部maven項目就不須要再象之前那樣把jar包複製到lib目錄中,整個maven項目看起來十分清爽。

 

4 配置代理服務器(可選)

maven項目在編譯、測試、打包裏,會須要從maven的中央倉庫(即:maven組織公佈在互聯網上的一個站點,裏面已經收錄了目前絕大多數主流的jar包)下載jar包等文件,若是使用代理服務器上網,須要配置代理服務器。

把%MAVEN_HOME%\conf\settings.xml複製一份到本地倉庫C:\Users\當前用戶名\.m2\下,而後編輯該文件,找到下面這段

複製代碼
  <proxies> <!-- proxy | Specification for one proxy, to be used in connecting to the network. | <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>proxyuser</username> <password>proxypass</password> <host>proxy.host.net</host> <port>80</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> --> </proxies>
複製代碼

把註釋去掉,host這裏填寫代理服務器的地址(能夠用IP)以及port端口,若是須要用戶名/密碼認證,則填寫username/password節點,不然username/password這二個節點去掉,nonProxyHosts表示某些地址不須要通過代理服務器,多個地址之間用|分隔,支持通配符,好比172.156.* 

 

2、建立項目「骨架」

下面用命名行建立一個最基本的maven項目

2.1 mvn archetype:generate

先建立項目的根目錄,好比c:\test,命令行窗口下輸入

cd /d c:\test

mvn archetype:generate

首次運行時,mvn會從遠程"中央倉庫"下載一些必需的文件到"本地倉庫" - (若是你有興趣,能夠在等待下載過程當中,觀察一下"C:\Users\當前用戶名\.m2\repository"到底下載了些啥東東)

下載完成後(下一篇會講解如何,在局域網環境中搭建「私服」,直接從局域網的代理倉庫中下載這些依賴項),會自動進入交互模式,會讓你輸入一些基本信息,相似下面這樣:

...

[INFO] Generating project in Interactive mode (這裏會卡一下子,由於要聯網獲取項目模板) [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: remote -> br.com.ingenieux:elasticbeanstalk-service-webapp-archetype (A Maven Archetype Encompassing RestAssured, Jetty, Jackson, Guice and Jersey for Publishing JAX-RS-based Services on AWS' Elastic Beanstalk Service) ... (這裏會自動列出不少項目模板,每種模板前面會有一個數字序號)

336: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)

...

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (這裏根據每一個人機器上安裝的eclipse插件不一樣,可能默認的數字不是這個,先無論,直接回車)

Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 6: (直接回車) Define value for property 'groupId': : cnblogs (可暫時先理解成相似package或namespace的名稱,一般咱們填寫組織機構名稱縮寫) Define value for property 'artifactId': : maven-hello-world (組件名稱,可暫時理解成項目名稱) Define value for property 'version':  1.0-SNAPSHOT: : (版本號,直接回車,默認1.0-SNAPSHOT) Define value for property 'package':  cnblogs: : (打包後的jar文件名,至關於.net中項目最後生成的程序集dll名稱) Confirm properties configuration: groupId: cnblogs artifactId: maven-hello-world version: 1.0-SNAPSHOT package: cnblogs  Y: :  (直接回車確認) [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: cnblogs [INFO] Parameter: packageName, Value: cnblogs [INFO] Parameter: package, Value: cnblogs [INFO] Parameter: artifactId, Value: maven-hello-world ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS (看到這個,表示項目建立成功!) [INFO] ------------------------------------------------------------------------ ...

 

2.2 maven項目的目錄結構

C:\test\maven-hello-world>tree Folder PATH listing for volume win7 Volume serial number is AA2C-6E70 C:. ├───src │   ├───main │   │   └───java │   │       └───cnblogs │   └───test │       └───java │           └───cnblogs └───target     └───classes         └───cnblogs

注意上面帶紅色的目錄名,maven項目採用「約定優於配置」的原則,src/main/java約定用於存放源代碼,src/main/test用於存放單元測試代碼,src/target用於存放編譯、打包後的輸出文件。這是全世界maven項目的通用約定,請記住這些固定的目錄結構。

 

3、編譯項目

先進入剛纔建立項目的根目錄

cd /d c:\test\maven-hello-world

而後執行 mvn clean compile

這樣就能對項目進行編譯了,編譯後會自動在target目錄中生成class文件,若是編譯成功,會輸出相似下面的信息

yangjunmingmatoMacBook-Pro-7:maven-hello-world jimmy$ mvn clean compile [INFO] Scanning for projects... [INFO]                                                                          [INFO] ------------------------------------------------------------------------ [INFO] Building maven-hello-world 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-hello-world --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-hello-world --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/jimmy/Desktop/study/maven-hello-world/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ maven-hello-world --- [INFO] Compiling 1 source file to /Users/jimmy/Desktop/study/maven-hello-world/target/classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.515s [INFO] Finished at: Wed Jan 01 19:08:32 CST 2014 [INFO] Final Memory: 10M/156M [INFO] ------------------------------------------------------------------------

 

4、單元測試

mvn clean test

這樣就能作單元測試了,so easy !

若是單元測試不經過,會提示出錯信息,注意看輸出。

注:從輸出上能夠發現,test前,會先執行compile,即先編譯,再執行單元測試.

有興趣的朋友,能夠修改下/src/test/java/cnblogs/AppTest.java裏的內容,把testApp()方法中的assertTrue( true );改爲assertTrue( false );再跑下單元測試,看下有什麼不一樣

 

5、項目打包

一般咱們會把java項目打包成jar包或war包,maven中打包的命令爲

mvn clean package

運行完後,會在target目錄下生成jar包

注:從輸出 能夠發現,package前,會先執行compile,再執行test,最後纔是package打包

 

6、項目運行

該項目中的App.java中有main方法,能夠直接運行,常規方式下,咱們若是想直接運行class文件,得敲一段很長的命令,maven中沒必要這麼複雜,先用記事本打開項目根目錄下的pom.xml文件,增長下面這節內容:

 1     <build>  2 <finalName>${project.artifactId}</finalName>  3 <plugins>  4 <plugin>  5 <groupId>org.codehaus.mojo</groupId>  6 <artifactId>exec-maven-plugin</artifactId>  7 <version>1.2.1</version>  8 <executions>  9 <execution> 10 <goals> 11 <goal>exec</goal> 12 </goals> 13 </execution> 14 </executions> 15 <configuration> 16 <executable>java</executable> 17 <arguments> 18 <argument>-classpath</argument> 19 <classpath> 20 </classpath> 21 <argument>cnblogs.App</argument> 22 </arguments> 23 </configuration> 24 </plugin> 25 </plugins> 26 </build>
View Code

上述這段內容插入在</project>以前便可。

而後在命令行下,輸入

mvn exec:exec

便可直接運行,下面是輸出:

C:\test\maven-hello-world>mvn exec:exec [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building maven-hello-world 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- exec-maven-plugin:1.2.1:exec (default-cli) @ maven-hello-world --- Hello World! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.175s [INFO] Finished at: Mon Jan 13 22:35:02 CST 2014 [INFO] Final Memory: 6M/111M [INFO] ------------------------------------------------------------------------

 

7、項目部署

若是是web項目,使用命令

mvn clean jboss-as:deploy

就能自動將web項目部署到jboss中(前提是jboss web server已經成功啓動),由於剛纔咱們建立的是一個最基本的maven項目,並不是web項目,因此執行這條命令,應該會失敗,後面會講如何在eclipse中用插件部署web項目,這裏能夠先跳過。

另外:

有時候,咱們的項目是一個類庫,只是封裝一些方法供其它項目引用,對於這種項目,咱們能夠用 mvn clean install 把生成的jar包,安裝到「本地倉庫」中,這樣本機其它項目須要使用該jar包時,只要在pom裏配置依賴項便可,不用把jar包複製到當前項目中。

 

8、eclipse中集成maven

8.1 修改eclipse中使用的maven版本

eclipse自帶了maven3.0.4,若是想使用最新的3.1.1,能夠在eclipse -> window -> perferences -> Maven -> Installations 裏參考下圖設置一下

 

8.2 安裝Red Hat JBoss Developer Studio(可選,純我的喜歡)

eclipse -> help -> Eclipse Marketplace 搜索jboss,找到Red Hat JBoss Developer Studio,安裝便可

 

8.3 建立一個web的maven示例項目

File -> New -> Maven Project -> Next ,在接下來的窗口中會看到一大堆的項目模板,Filter欄裏輸入「jboss-javaee6-webapp-archetype」,參考下圖

而後Next,在接下來的界面中填寫groupId之類

而後Finish完成項目建立。整個過程其實跟前面提到的純手式命令行徹底相似,只不過藉助於插件,以圖形化的方式更友好而已,直接Finish

項目上右擊->Run As 就能看到不少Maven的選項,顧名思義,如何選擇Maven install,等效於命令行執行mvn clean install,其它幾項的含義一看便知,通常來說Maven test 和 Maven install這二個基本上已經夠用,若是還想定義本身的命令,好比 maven clean package,能夠選擇「6 Maven build...」,會彈出一個界面,以下圖,在name輸入框填寫名稱:maven-web-sample-package(名字能夠隨便寫,只要方便本身記憶就行),Goals欄輸入clean package

最後點擊Run關閉這個窗口,之後能夠直接從工具欄調出這個選擇,以下圖:

實際使用中,發現eclipse與maven之間並不是整合得完美無缺,有時候eclipse中項目圖標常常會莫名其妙的出現一些紅叉,如下是一些我的經驗:

a) 嘗試先到Dos命令行窗口,用mvn clean compile(或install)之類的命令試下可否正常編譯

b) 若是a) 步驟能正常編譯,在回到eclipse中,項目右擊->Maven-Update Project ,一般這樣就能消除紅叉

c) 有時候b)步驟操做完之後,仍然會有紅色感嘆號或紅叉,可是eclipse編譯、調試都OK,這就要具體問題具體分析了,能夠嘗試把Problems面板調出來,逐個分析

d) 以上3個步驟都嘗試無效後,最後還能夠嘗試 Windows -> Preferences -> Validation -> Disable All 把全部驗證都關掉

下一篇,將介紹如何搭建"倉庫私服"等其它內容

相關文章
相關標籤/搜索