【Java EE 學習 82 下】【MAVEN整合Eclipse】【MAVEN的一些高級概念】

1、MAVEN整合Eclipse

  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中:測試

  

2、依賴管理

  依賴管理是MAVEN最核心的功能,也是MAVEN最出彩的地方。POM中關係包括下面幾部分:依賴(包括傳播性依賴)、繼承和聚合。MAVEN中有一個傳統,那就是即便是最簡單的項目可能也會有很是複雜的依賴關係管理。MAVEN經過MAVEN庫解決了jar包的錯誤依賴問題和jar包衝突的問題。spa

  在MAVEN中,咱們只須要在pom.xml配置文件中聲明須要依賴的jar包便可,若是本地MAVEN庫中有該jar包,則會被直接引用;若是沒有該jar包,那麼就會自動到互聯網上的MAVEN中央倉庫下載;MAVEN剛剛安裝完成以後,運行mvn compile命令,會出現不少下載的提示也是由於這個緣由。插件

  1.排除依賴

  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>

  2.繼承

  繼承是MAVEN的一大亮點,使用它可以很方便的實現項目的升級等功能。Ant也有繼承的概念,可是MAVEN在這裏將概念進行了昇華,MAVEN中的繼承是基於項目的繼承。

  (1)建立父工程

  首先在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倉庫,不然其它項目是沒有辦法得到該父工程的依賴的。

  (2)修改HelloFriend工程

  修改pom.xml配置文件,這時候因爲須要繼承HelloParent,並且version和groupId和父工程中的是相同的,因此能夠將這兩項聲明去掉,不然的話就須要從新定義不能和父工程總的定義重複,不然會警告聲明無效。

  

  另外,使用parent標籤聲明父類,須要具體到哪個版本;注意relativePath標籤,該標籤聲明瞭父工程中pom.xml配置文件的位置,爲何是../HelloParent,緣由在其groupId和artifactId的聲明上,注意使用這兩個標籤的值肯定relativePath的值。

  只要保存好pom.xml配置文件,相應的maven依賴就會自動添加到classpath,以下圖所示:

  

  而後右鍵項目run As便可:

  

  3.部分依賴

  若是是用 2中的方式直接所有繼承,實際上會出問題,若是父工程中定義了很是多的依賴,那麼所有繼承首先必定有大量的依賴用不着,並且若是是本工程繼承了父工程,並且同時父工程又引用了本工程的依賴,那麼這樣不只僅是用不着的問題了,而是不合邏輯了。

  MAVEN使用依賴管理器對依賴進行管理,好比Hello/pom.xml配置文件,若是直接繼承了父工程,那就變成了本身引用本身,顯得很是的滑稽

  (1)首先須要配置父工程

    添加依賴管理器後,默認子工程不會繼承父工程中的任何依賴;依賴管理器的標籤是<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>

  (2)配置子項目聲明對父工程中依賴的引用

<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包就已經升級了。

  4.聚合

  一個項目頗有可能會有多個子項目,若是對子項目一個一個的進行測試就有違maven高度自動化的設計原則,最理想的狀況就是可以在一個pom.xm配置文件中進行全部字模塊工程的測試,固然這個pom.xml配置文件必定是父工程的配置文件了。

  使用<modules>標籤實現該功能:

<modules>
  <module>../Hello</module>
  <module>../HelloFriend</module>
</modules>

  這裏使用相對路徑找到兩個子項目;這樣直接對着父項目右鍵測試,那麼全部的子項目都會自動進行測試並報告結果:

  

  

3、私服

  搭建私服很是麻煩,暫時存檔

4、項目練習地址

https://github.com/kdyzm/MavenDemo

相關文章
相關標籤/搜索