1. 程式人生 > >Maven - 3-POM文件

Maven - 3-POM文件

mar 4.0 想要 gin 通過 必須 容器 href run

POM

POM文件是Maven項目中的核心配置和管理文件,也被稱為Maven描述文件。

  • POM(Project Object Model,項目對象模型)是描述項目構建信息的XML格式文件,位於項目的根目錄。
  • 統一管理項目構建的關鍵信息,包括:開發規範、開發工具、項目代碼、測試代碼、資源、依賴的包等。
  • pom之間實際上存在三種關系:繼承、依賴、聚合。

官網參考信息:http://maven.apache.org/ref/3.5.0/maven-model/maven.html

解讀pom.xml

  • project POM文件的根元素,包含約束信息
  • modelVersion 指定當前Maven模型的版本號,對於Maven2和Maven3只能設置為4.0.0
  • groupId 項目的全球唯一標識符(整個系統的名稱),一般是域名的反寫
  • artifactId 構件標識符(子模塊名稱),和groupId一起唯一標識一個構件,可以使用"項目名-子模塊名"的命名方式
  • version 項目當前版本,格式為:主版本.次版本.增量版本-限定版本號;限定版本號可以設置為SNAPSHOT(開發),Laest(最新),Alpha(內部測試),Release(穩定),Beta(公測),GA(正式發布)等

重要:groupId、artifactId、version三個元素構成基本坐標,可以唯一標識一個Maven項目。

  • packaging 項目產生的構件類型(項目打包的類型),可以取值為jar、war、rar、ear、pom,也可以創建新類型;如果不設置,默認為jar
  • name 項目的名稱, Maven產生的文檔用
  • url 項目主頁的URL, Maven產生的文檔用
  • description 項目的詳細描述, Maven 產生的文檔用
  • developers 項目開發人員信息
  • licenses 許可信息
  • organization 組織信息
  • dependencies 項目相關的所有依賴(dependency 包含一個依賴包的坐標信息)
  • properties 定義配置屬性,例如設置project.build.sourceEncoding為UTF-8,防止中文亂碼
  • build 定義構建項目需要的信息
  • resources 描述項目相關或測試相關的所有資源路徑

parent - 繼承

應用在子項目中。

    <!-- 父項目的坐標。如果項目中沒有規定某個元素的值,那麽父項目中的對應值即為項目的默認值。坐標包括group ID,artifact ID和 version。 --> 
    <parent> 
        <!-- 被繼承的父項目的構件標識符 --> 
        <artifactId>xxx</artifactId>
        <!-- 被繼承的父項目的全球唯一標識符 -->
        <groupId>xxx</groupId> 
        <!-- 被繼承的父項目的版本 --> 
        <version>xxx</version>
        <!-- 父項目的pom.xml文件的相對路徑。默認值是../pom.xml。Maven首先在構建當前項目的地方尋找父項目的pom,其次在文件系統的這個位置(relativePath位置),然後在本地倉庫,最後在遠程倉庫尋找父項目的pom。 --> 
        <relativePath>xxx</relativePath> 
    </parent> 

dependencies - 依賴

官網信息:Dependency Scope
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

  • groupId 依賴項的groupId
  • artifactId 依賴項的artifactId
  • version 依賴項的版本
  • exclusions 排除項目中的依賴沖突時使用。
  • scope 依賴項的適用範圍:
    • compile,缺省值,適用於所有階段,會隨著項目一起發布。
    • provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
    • runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
    • test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發布。
    • system,類似provided,與本機系統相關聯,可移植性差,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
    • import,導入的範圍,只使用在dependencyManagement中,表示從其它的pom中導入dependecy的配置
    <!-- 該元素描述了項目相關的所有依賴。 這些依賴組成了項目構建過程中的一個個環節。它們自動從項目定義的倉庫中下載。 -->         
    <dependencies> 
        <dependency> 
            <!-- 依賴的group ID --> 
            <groupId> org.apache.maven </groupId> 
            <!-- 依賴的artifact ID --> 
            <artifactId> maven-artifact </artifactId> 
            <!-- 依賴的版本號。 在Maven 2裏, 也可以配置成版本號的範圍。 --> 
            <version> 3.8.1 </version> 
            <!-- 依賴類型,默認類型是jar。它通常表示依賴的文件的擴展名,但也有例外。一個類型可以被映射成另外一個擴展名或分類器。類型經常和使用的打包方式對應,盡管這也有例外。一些類型的例子:jar,war,ejb-client和test-jar。--> 
            <type> jar </type> 
            <!-- 依賴的分類器。分類器可以區分屬於同一個POM,但不同構建方式的構件。分類器名被附加到文件名的版本號後面。例如,如果你想要構建兩個單獨的構件成JAR,一個使用Java 1.4編譯器,另一個使用Java 6編譯器,你就可以使用分類器來生成兩個單獨的JAR構件。 --> 
            <classifier></classifier> 
            <!-- 依賴範圍。在項目發布過程中,幫助決定哪些構件被包括進來。欲知詳情請參考依賴機制。 
                - compile :默認範圍,用於編譯 
                - provided:類似於編譯,但支持你期待jdk或者容器提供,類似於classpath 
                - runtime: 在執行時需要使用 
                - test: 用於test任務時使用 
                - system: 需要外在提供相應的元素。通過systemPath來取得 
                - systemPath: 僅用於範圍為system。提供相應的路徑 
                - optional: 當項目自身被依賴時,標註依賴是否傳遞。用於連續依賴時使用 --> 
            <scope> test </scope> 
            <!-- 僅供system範圍使用。註意,不鼓勵使用這個元素,並且在新的版本中該元素可能被覆蓋掉。該元素為依賴規定了文件
                 系統上的路徑。需要絕對路徑而不是相對路徑。推薦使用屬性匹配絕對路徑,例如${java.home}。 --> 
            <systemPath></systemPath> 
            <!-- 排除依賴列表,不依賴項目的依賴。此元素主要用於解決版本沖突問題 --> 
            <exclusions> 
                <exclusion> 
                    <artifactId> spring-core </artifactId> 
                    <groupId> org.springframework </groupId> 
                </exclusion> 
            </exclusions> 
            <!-- 可選依賴,如果在項目B中聲明C依賴為可選,那麽需要在依賴於B的項目A中顯式的引用對C的依賴。可選依賴阻斷依賴的傳遞性。 --> 
            <optional> true </optional> 
        </dependency> 
    </dependencies> 

dependencyManagement
依賴管理。其中定義的多個依賴,並不會實際引入。
應用在父模塊中,供子模塊所繼承使用。

<!-- 繼承自該項目的所有子項目的默認依賴信息。這部分的依賴信息不會被立即解析,而是當子項目聲明一個依賴(必須描述group ID和artifact ID信息),
如果group ID和artifact ID以外的一些信息沒有描述,則通過group ID和artifact ID匹配到這裏的依賴,並使用這裏的依賴信息。 --> 
    <dependencyManagement> 
        <dependencies> 
            <!-- 參見dependencies/dependency元素 --> 
            <dependency></dependency> 
        </dependencies> 
    </dependencyManagement> 

modules - 聚合

可以通過一個大的項目來整合各個小的模塊

 <!-- 模塊(有時稱作子項目) 被構建成項目的一部分。列出的每個模塊元素是指向該模塊的目錄的相對路徑 --> 
    <modules>
        <!--子項目相對路徑-->
        <module></module>
    </modules> 

同時需要將packaging設置為pom

  <packaging>pom</packaging>

pluginManagement

Plugin的配置,應用在父項目。

    <!-- 子項目可以引用的默認插件信息。該插件配置項直到被引用時才會被解析或綁定到生命周期。給定插件的任何本地配置都會覆蓋這裏的配置 --> 
    <pluginManagement> 
         <!-- 使用的插件列表 。 --> 
         <plugins> 
             <!-- plugin元素包含描述插件所需要的信息。 --> 
             <plugin> 
                 <!-- 插件在倉庫裏的group ID --> 
                 <groupId></groupId> 
                 <!-- 插件在倉庫裏的artifact ID --> 
                 <artifactId></artifactId> 
                 <!-- 被使用的插件的版本(或版本範圍) --> 
                 <version></version> 
                 <!-- 是否從該插件下載Maven擴展(例如打包和類型處理器),由於性能原因,只有在真需要下載時,該元素才被設置成enabled。 --> 
                 <extensions>true/false</extensions>
                
                 <!-- 在構建生命周期中執行一組目標的配置。每個目標可能有不同的配置。 --> 
                 <executions> 
                     <!-- execution元素包含了插件執行需要的信息 --> 
                     <execution> 
                         <!-- 執行目標的標識符,用於標識構建過程中的目標,或者匹配繼承過程中需要合並的執行目標 --> 
                         <id></id>
                         <!-- 綁定了目標的構建生命周期階段,如果省略,目標會被綁定到源數據裏配置的默認階段 --> 
                         <phase></phase>
                         <!-- 配置的執行目標 --> 
                         <goals></goals> 
                         <!-- 配置是否被傳播到子POM --> 
                         <inherited>true/false</inherited> 
                         <!-- 作為DOM對象的配置 --> 
                         <configuration></configuration>
                     </execution> 
                 </executions> 
                 
                 <!-- 項目引入插件所需要的額外依賴 --> 
                 <dependencies>
                     <!-- 參見dependencies/dependency元素 --> 
                     <dependency></dependency> 
                 </dependencies> 

                 <!-- 任何配置是否被傳播到子項目 --> 
                 <inherited>true/false</inherited>
                 <!-- 作為DOM對象的配置 --> 
                 <configuration></configuration>
             </plugin> 
         </plugins> 
     </pluginManagement> 

resources

Build時需要的資源文件

        <!-- 這個元素描述了項目相關的所有資源路徑列表,例如和項目相關的屬性文件,這些資源被包含在最終的打包文件裏。 --> 
        <resources> 
            <!-- 這個元素描述了項目相關或測試相關的所有資源路徑 --> 
            <resource> 
                <!-- 描述了資源的相對路徑(相對target/classes目錄)。如果只是想把資源放到源碼目錄結構裏,就不需要該配置。 --> 
                <targetPath></targetPath> 
                <!-- 是否使用參數值代替參數名。參數值取自properties元素或者文件裏配置的屬性,文件在filters元素裏列出。 --> 
                <filtering></filtering>
                <!-- 描述存放資源的目錄,該路徑相對POM路徑 --> 
                <directory></directory>
                <!-- 包含的模式列表,例如**/*.xml. --> 
                <includes>
                    <include></include>
                </includes>
                <!-- 排除的模式列表,例如**/*.xml -->
                <excludes>
                    <exclude></exclude>
                </excludes>
            </resource> 
        </resources> 

Maven - 3-POM文件