1. 程式人生 > >Maven基本知識點總結

Maven基本知識點總結

1 . maven: 管理多模組開發,方便管理多模組之間的依賴

2 .依賴包的查詢:

     1: 所有的依賴都是通過座標來進行儲存的(GVA)
     2: 有一些網上的倉庫提供了座標的查詢(http://mvnrepository.com,sonatype nexus,http://search.maven.org/,http://maven.apache.org/plugins/)
     3: maven首先會在本地倉庫查詢依賴,如果本地倉庫沒有就到中央倉庫中查詢


3.  依賴的傳遞性

     1: 如果A依賴於B,B依賴於c,那麼A久依賴於C,這就是依賴的傳遞性,這種依賴預設是基於compile範圍進行傳遞的
    
     2: compile(編譯範圍)
        compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範
        圍。編譯範圍依賴在所有的classpath中可用,同時它們也會被打包。
        專案物件模型
        
        provided(已提供範圍)
        provided依賴只有在當JDK或者一個容器已提供該依賴之後才使用。例如,如果
        你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編
        譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個
        Servlet API JAR由你的應用伺服器或者servlet容器提供。已提供範圍的依賴在
        編譯classpath(不是執行時)可用。它們不是傳遞性的,也不會被打包。
        
        runtime(執行時範圍)
        runtime依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你
        可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC驅動實
        現。
        
        test(測試範圍)
        test範圍依賴 在一般的 編譯和執行時都不需要,它們只有在測試編譯和測試運
        行階段可用。測試範圍依賴在之前的???中介紹過。

        system(系統範圍)
        system範圍依賴與provided類似,但是你必須顯式的提供一個對於本地系統中
        JAR檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫
        的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。如
        果你將一個依賴範圍設定成系統範圍,你必須同時提供一個systemPath元素。注
        意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的Maven倉庫中引用
        依賴)。

4.  模組的聚合:

        <groupId>com.mavem.user</groupId>
    <artifactId>user-main</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>../user-dao</module>
        <module>../user-log</module>
        <module>../user-core</module>
        <module>../user-service</module>
    </modules>    
    
5.  maven中的繼承

       1: 將一些公共的資訊,所有模組都需要的資訊放在父pom.xml檔案中中
       <modelVersion>4.0.0</modelVersion>
    <groupId>com.maven.user</groupId>
    <artifactId>user-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>


       <url>http://maven.apache.org</url>
       <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       </properties>


       2: 所有的模組中將公共的資訊繼承過來
       <parent>
       <groupId>com.maven.user</groupId>
       <artifactId>user-parent</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <relativePath>../user-parent/pom.xml</relativePath>
       </parent>

       3: 依賴的管理(排除版本衝突問題)

        當你在你的超級複雜的企業中採用Maven之後,你有了兩百多個相互關聯的Maven專案,
    你開始想知道是否有一個更好的方法來處理依賴版本。如果每一個使用如MySQL資料
    庫驅動依賴的專案都需要獨立的列出該依賴的版本,在你需要升級到一個新版本的時
    候你就會遇到問題。由於這些版本號分散在你的專案樹中,你需要手工的編寫每一個
    引用該依賴的pom.xml,確保每個地方的版本號都更改了。即使使用了find,xargs,
    和,awk,你仍然有漏掉一個POM的風險。
    
    幸運的是,Maven在dependencyManagement元素中為你提供了一種方式來統一依賴版
    本號。你經常會在一個組織或者專案的最頂層的父POM中看到dependencyManagement元
    素。使用pom.xml中的dependencyManagement元素能讓你在子專案中引用一個依
    賴而不用顯式的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁
    有dependencyManagement元素的專案,然後它就會使用在這個dependencyManagement元
    素中指定的版本號。 例項如下:

       parent:

                   <modelVersion>4.0.0</modelVersion>
            <groupId>com.maven.user</groupId>
            <artifactId>user-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>pom</packaging>
            <url>http://maven.apache.org</url>
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            </properties>

            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.10</version>
                        <scope>test</scope>
                    </dependency>
                    <dependency>
                        <groupId>com.maven.user</groupId>
                        <artifactId>user-dao</artifactId>
                        <version>0.0.1-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>com.maven.user</groupId>
                        <artifactId>user-log</artifactId>
                        <version>0.0.1-SNAPSHOT</version>
                    </dependency>

                    <dependency>
                        <groupId>com.maven.user</groupId>
                        <artifactId>user-core</artifactId>
                        <version>0.0.1-SNAPSHOT</version>
                    </dependency>

                    <dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.16</version>
                    </dependency>

                    <dependency>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                        <version>1.1.1</version>
                    </dependency>

                            <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.21</version>
                        </dependency>
            
                            <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                    <version>4.0.0.Final</version>
                         </dependency>


                        </dependencies>
               </dependencyManagement>

            
       子模組;

                        <dependencies>
                <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                </dependency>
                <dependency>
                <groupId>com.maven.user</groupId>
                <artifactId>user-dao</artifactId>
                </dependency>
                <dependency>
                <groupId>com.maven.user</groupId>
                <artifactId>user-log</artifactId>
                </dependency>
              </dependencies>  
             

6.   版本的管理

         總版本號.分支版本號.小版本號-里程碑版本
        
        總版本號的變動一般表示框架的變動
        
        分支版本號:一般表示增加了一些功能
        
        小版本號:在分支版本上面進行bug的修復
        
        里程碑:SNAPSHOT(開發版本)-->alpha(內部測試版本)-->beta(外部的公測版本)-->release(釋出版本)-->GA(穩定版本)
        
        user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT  -->user1.0.0-Rlease
                           -->user0.1.0-SNAPSHOT-->user0.1.0-Rlease



7.   nexus私服的介紹,配置,安裝

    1、下載並且解壓縮
    
    2、將bin新增到環境變數
    
    3、nexus install將nexus安裝到windows的服務中
    
    4、修改wrapper.conf檔案:
    # Set the JVM executable
    # (modify this to absolute path if you need a Java that is not on the OS path)
    wrapper.java.command=C:\Program Files\Java\jdk1.6.0_23\bin\java