Maven - 3-POM文件
阿新 • • 發佈:2017-12-04
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文件