maven学习(上)- 基本入门用法
2019獨角獸企業重金招聘Python工程師標準>>>
一、下載及安裝
1.1?下載maven 3.1.1
先到官網http://maven.apache.org/download.cgi?下載最新版本(目前是3.1.1?),下載完成后,解壓到某個目錄(本文中是C:\Java\maven-3.1.1)
?
2.1?配置環境變量
系統環境變量里,添加MAVEN_HOME(或M2_HOME),其值為C:\Java\maven-3.1.1,然后PATH環境變量最后附加上";%MAVEN_HOME%\bin"
檢測方法:
a) 重新進入命令行(DOS窗口)模式,輸入 echo %MAVEN_HOME% 如果能顯示 C:\Java\maven-3.1.1 說明環境變量起作用了
b) 輸入 mvn -version,正常情況下會顯示maven及jdk的版本號
(前提:jdk環境必須先安裝好,否則后面無法正常編譯項目)
?
3?理解“倉庫”
首次運行完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.*?
?
二、創建項目“骨架”
下面用命名行創建一個最基本的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項目的通用約定,請記住這些固定的目錄結構。
?
三、編譯項目
先進入剛才創建項目的根目錄
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] ------------------------------------------------------------------------
?
四、單元測試
mvn clean test
這樣就能做單元測試了,so easy !
如果單元測試不通過,會提示出錯信息,注意看輸出。
注:從輸出上可以發現,test前,會先執行compile,即先編譯,再執行單元測試.
有興趣的朋友,可以修改下/src/test/java/cnblogs/AppTest.java里的內容,把testApp()方法中的assertTrue(?true?);改成assertTrue(?false?);再跑下單元測試,看下有什么不同
?
五、項目打包
通常我們會把java項目打包成jar包或war包,maven中打包的命令為
mvn clean package
運行完后,會在target目錄下生成jar包
注:從輸出 可以發現,package前,會先執行compile,再執行test,最后才是package打包
?
六、項目運行
該項目中的App.java中有main方法,可以直接運行,常規方式下,我們如果想直接運行class文件,得敲一段很長的命令,maven中不必這么復雜,先用記事本打開項目根目錄下的pom.xml文件,增加下面這節內容:
?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] ------------------------------------------------------------------------
?
七、項目部署
如果是web項目,使用命令
mvn clean jboss-as:deploy
就能自動將web項目部署到jboss中(前提是jboss web server已經成功啟動),因為剛才我們創建的是一個最基本的maven項目,并非web項目,所以執行這條命令,應該會失敗,后面會講如何在eclipse中用插件部署web項目,這里可以先跳過。
另外:
有時候,我們的項目是一個類庫,只是封裝一些方法供其它項目引用,對于這種項目,我們可以用?mvn clean install?把生成的jar包,安裝到“本地倉庫”中,這樣本機其它項目需要使用該jar包時,只要在pom里配置依賴項即可,不用把jar包復制到當前項目中。
?
八、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 把所有驗證都關掉
轉載于:https://my.oschina.net/u/1866821/blog/464153
總結
以上是生活随笔為你收集整理的maven学习(上)- 基本入门用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中垃圾回收日志信息
- 下一篇: 友盟 集成测试