MAVEN是很是優秀,可是老是要開命令行敲命令是比較不爽的,咱們已經習慣了使用IDE,因此還有一種將MAVEN整合到Eclipse的方法。html
詳情查看:http://www.eclipse.org/m2e/,http://download.eclipse.org/technology/m2e/releasesgit
其中,後者也是該插件的更新地址;安裝完成以後要重啓Eclipse,而後對幾項MAVEN的插件進行設置:github
首先須要修改maven倉庫的位置,由於默認是保存到C盤的:apache
<localRepository>D://maven_repository</localRepository>
找到window->preferences->Maven,須要修改兩處地方:eclipse
詳情查看http://blog.sina.com.cn/s/blog_924d6a570102w2kf.html maven
安裝並配置完成以後,將以前的兩個項目(Hello,HelloFriend)導入到Eclipse中:測試
依賴管理是MAVEN最核心的功能,也是MAVEN最出彩的地方。POM中關係包括下面幾部分:依賴(包括傳播性依賴)、繼承和聚合。MAVEN中有一個傳統,那就是即便是最簡單的項目可能也會有很是複雜的依賴關係管理。MAVEN經過MAVEN庫解決了jar包的錯誤依賴問題和jar包衝突的問題。spa
在MAVEN中,咱們只須要在pom.xml配置文件中聲明須要依賴的jar包便可,若是本地MAVEN庫中有該jar包,則會被直接引用;若是沒有該jar包,那麼就會自動到互聯網上的MAVEN中央倉庫下載;MAVEN剛剛安裝完成以後,運行mvn compile命令,會出現不少下載的提示也是由於這個緣由。插件
MAVEN使用傳播性依賴,這樣會致使衝突等問題的發生,因此能夠在dependencies標籤下使用<exclusions>標籤來排除掉須要排除的依賴,可使用通配符所有排除。命令行
<dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>2.0</version> <exclusions> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>
<dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>3.1.0</version> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>
繼承是MAVEN的一大亮點,使用它可以很方便的實現項目的升級等功能。Ant也有繼承的概念,可是MAVEN在這裏將概念進行了昇華,MAVEN中的繼承是基於項目的繼承。
首先在Eclipse中建立一個新的MAVEN項目,名爲HelloParent,它的做用是做爲父工程給Hello工程和HelloFriend工程提供依賴;建立成功以後,只是修改pom.xm配置文件:
1 <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/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>HelloParent</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <packaging>pom</packaging> 7 <description>The parent of Hello project and HelloFriend project</description> 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>compile</scope> 14 </dependency> 15 <dependency> 16 <groupId>com.kdyzm.hello</groupId> 17 <artifactId>Hello</artifactId> 18 <version>0.0.1-SNAPSHOT</version> 19 <scope></scope> 20 </dependency> 21 </dependencies> 22 </project>
這裏須要注意的是第三行和第六行的代碼,第三行將groupId設置爲com.kdyzm.hello,該groupId和Hello項目以及HelloFriend項目中設置的groupId是相同的,這樣安裝以後(mvn install)在Maven倉庫中找到的必定是三個並列的文件夾;第六行的packaging標籤中的值是pom,該值默認是jar類型,可是做爲父工程,必須將該值設置爲pom,這是maven的硬性規定。
而後必定要記得執行mvn install,將該項目安裝到Maven倉庫,不然其它項目是沒有辦法得到該父工程的依賴的。
修改pom.xml配置文件,這時候因爲須要繼承HelloParent,並且version和groupId和父工程中的是相同的,因此能夠將這兩項聲明去掉,不然的話就須要從新定義不能和父工程總的定義重複,不然會警告聲明無效。
另外,使用parent標籤聲明父類,須要具體到哪個版本;注意relativePath標籤,該標籤聲明瞭父工程中pom.xml配置文件的位置,爲何是../HelloParent,緣由在其groupId和artifactId的聲明上,注意使用這兩個標籤的值肯定relativePath的值。
只要保存好pom.xml配置文件,相應的maven依賴就會自動添加到classpath,以下圖所示:
而後右鍵項目run As便可:
若是是用 2中的方式直接所有繼承,實際上會出問題,若是父工程中定義了很是多的依賴,那麼所有繼承首先必定有大量的依賴用不着,並且若是是本工程繼承了父工程,並且同時父工程又引用了本工程的依賴,那麼這樣不只僅是用不着的問題了,而是不合邏輯了。
MAVEN使用依賴管理器對依賴進行管理,好比Hello/pom.xml配置文件,若是直接繼承了父工程,那就變成了本身引用本身,顯得很是的滑稽
添加依賴管理器後,默認子工程不會繼承父工程中的任何依賴;依賴管理器的標籤是<dependencyManagement>
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.kdyzm.hello</groupId> 5 <artifactId>HelloParent</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>pom</packaging> 8 <description>The parent of Hello project and HelloFriend project</description> 9 <properties> 10 <argLine>-Dfile.encoding=UTF-8</argLine> 11 </properties> 12 <dependencyManagement> 13 <dependencies> 14 <dependency> 15 <groupId>junit</groupId> 16 <artifactId>junit</artifactId> 17 <version>4.9</version> 18 <scope>compile</scope> 19 </dependency> 20 <dependency> 21 <groupId>com.kdyzm.hello</groupId> 22 <artifactId>Hello</artifactId> 23 <version>0.0.1-SNAPSHOT</version> 24 <scope>compile</scope> 25 </dependency> 26 </dependencies> 27 </dependencyManagement> 28 <modules> 29 <module>../Hello</module> 30 <module>../HelloFriend</module> 31 </modules> 32 </project>
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>Hello</artifactId> <name>Hello</name> <parent> <artifactId>HelloParent</artifactId> <groupId>com.kdyzm.hello</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../HelloParent</relativePath> </parent> <!-- 依賴管理器 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
注意上面重點強調的部分,在dependency標籤中MAVEN座標三元素本應該一個都不能少,可是這裏只是寫了兩個,並且scope標籤也沒有寫,這些都須要繼承父類的。
疑問:搞了半天,好不容易不用寫依賴的配置代碼了,最後又得手寫配置代碼,這麼作的話要父工程還有什麼意義?
正如上面所說的,使用父工程繼承以後,能夠不用寫scope標籤和version標籤了,scope標籤能夠視狀況而定決定是否覆蓋父工程中的配置,可是Version標籤就不能寫了,必定要繼承父工程中的才行,這麼作的好處就是可以快速實現項目升級,好比項目經理說要將Junit升級到5.0(固然尚未這個版本?),若是每一個成員都配置了version標籤,那麼所有的人都得手動修改配置文件;可是若是使用繼承了的話,根本就不須要修改配置文件,項目經理直接將父工程中的配置文件修改一下就好了,每一個小組成員什麼配置都不須要修改jar包就已經升級了。
一個項目頗有可能會有多個子項目,若是對子項目一個一個的進行測試就有違maven高度自動化的設計原則,最理想的狀況就是可以在一個pom.xm配置文件中進行全部字模塊工程的測試,固然這個pom.xml配置文件必定是父工程的配置文件了。
使用<modules>標籤實現該功能:
<modules> <module>../Hello</module> <module>../HelloFriend</module> </modules>
這裏使用相對路徑找到兩個子項目;這樣直接對着父項目右鍵測試,那麼全部的子項目都會自動進行測試並報告結果:
搭建私服很是麻煩,暫時存檔