Maven的pom.xml文件详解------The Basics
轉載自??Maven的pom.xml文件詳解------The Basics
Maven坐標
GroupId、artifactId和version構成了Maven的坐標(groupId和version可以從parent繼承),指定了組件在Maven倉庫中的位置。Maven中的每個組件都有一個坐標,通過這個坐標我們在自己的項目中可以設置對該組件的依賴。
?------groupId:項目屬于哪個組,往往和項目所在的組織或公司存在關聯;
?------artifactId:當前Maven項目在組中唯一的ID;
?------version:定義當前項目的版本,如:1.0(-SNAPSHOT),SNAPSHOT表示快照,說明該項目還處于開發階段,是不穩定版本;
?------packaging:當我們有了groupId:artifactId:version作為地址后,還需要packaging為我們提供組件的類型,例如:<packaging>war</packaging>標識組件為一個war。如果packaging不指定,默認值為jar,當前可選值為:pom, jar, maven-plugin, ejb, war, ear, rar, par;
?------classifier:可選,坐標也可以展示為groupId:artifactId:packaging:classifier:version。
?
POM關聯
Maven的一個有力的地方就在于對項目關聯的處理;包括依賴、繼承和聚合(多模塊項目)。
?
Dependencies
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.0</version><type>jar</type><scope>test</scope><optional>true</optional></dependency>... </dependencies>------groupId、artifactId、version:依賴組件的坐標,如果當Maven通過這些坐標無法從中心倉庫獲取該組件時,可以通過下面的方法處理:
??1、用安裝插件安裝本地依賴,在命令行中輸入:
??mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar
??2、創建你自己的倉庫,并部署它
??3、設置依賴scope到system,并定義一個systemPath,但這個不推薦。
------type:對應所以來的組件的packaging;
------scop:用于控制依賴的范圍,有以下幾種范圍供選擇
??1、compile:編譯依賴范圍,默認,對于所有的classpath都是有效的;
??2、provided:僅對編譯和測試classpath有效;
??3、runtime:編譯時不需要,盡在運行時需要;
??4、test:僅用于測試;
??5、system:和provided類似,只是你需要提供JAR,組件不再在倉庫中查找。
------systemPath:當scop配置為system時就需要它了
------optional:設置為true,標識該依賴只對該項目有效,如果其他項目依賴該項目,該依賴將不會傳遞。
?
Exclusions
該配置告訴Maven你不想包含的該依賴的依賴(即,依賴傳遞的依賴)。
<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>2.0</version><exclusions><exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency>... </dependencies>?
Inheritance
繼承是一個有力的工具,在maven中使用繼承時,需要為parent和aggregation(多模塊)項目設置packaging為pom:<packaging>pom</packaging>,然后就子項目就可以繼承該POM了。
<parent><groupId>org.codehaus.mojo</groupId><artifactId>my-parent</artifactId><version>2.0</version><relativePath>../my-parent</relativePath> </parent>relativePath是可選的,指定parent的搜索路徑,如果配置了,Maven將首先搜索relativePath,然后本地倉庫,最后遠程倉庫查找parentPOM。
POM就像Java對象最終都繼承自java.lang.Object一樣,所有的POM都繼承自一個Super POM,你通過查ungjianyige最小化的pom.xml并在命令行中執行 mvn help:effective-pom來查看Super POM對你的POM的影響,下面是Maven 3.0.4的Super POM,該Super POM的位置在apache-maven-version\lib\maven-model-builder-version.jar\org\apache\maven\model\下面,文件名pom-4.0.0.xml。
?
Dependency Management
dependencyManagement用于在parent項目定義一個依賴,如:
<dependencyManagement><dependencies ><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.0</version><type>jar</type><scope>compile</scope><optional>true</optional></dependency></dependencies > </dependencyManagement>然后從這個parent繼承的POMs就能設置他們的依賴為:
<dependencies ><dependency ><groupId>junit</groupId><artifactId>junit</artifactId></dependency > </dependencies >繼承的POM的dependency的其它信息可以從parent的dependencyManagement中獲得,這樣的好處在于可以將依賴的細節放在一個控制中心,子項目就不用在關心依賴的細節,只需要設置依賴。
?
Aggregation(或者Multi-Module)
在多模塊的項目中,可以將一個模塊的集合配置到modules中。 <modules><module>my-project</module><module>another-project</module> </modules>在這里列出的模塊不需要考慮順序,Maven將自己根據依賴關系排序。
?
Properties
Maven中的Properties就像Ant中的,可以在POM的任何地方通過${X}來返回屬性的值,X就表Poperty。 存在以下5種不同的類型: 1、env.X:將返回環境變量的值,如:${env.PATH}返回PATH環境變量的值; 2、project.X:POM中的對應元素的值,'.'表示在POM中的路徑,如:<project><version>1.0</version></project>可以通過${project.version}獲取值; 3、settings.X:settings.xml中包含的對應元素的值,'.'表示路徑,如: <settings><offline>false</offline></settings>可以通過${settings.offline}獲取; 4、Java System Properties:所有可以通過java.lang.System.getProperties()獲取到的屬性在POM屬性中都是可用的,如:${java.home}; 5、X:在POM的<properties />中設置的元素,如: <properties><someVar>value</someVar></properies>通過${someVar}獲取。
總結
以上是生活随笔為你收集整理的Maven的pom.xml文件详解------The Basics的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 香料面包制作方法大全 香料面包制作方法介
- 下一篇: Lombok的@Data生成的hashC