Maven--pom.xml 配置詳解
pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。
<project> <modelVersion>4.0.0</modelVersion> <!--maven2.0必須是這樣寫,現在是maven2唯一支援的版本--> <!-- 基礎設定 --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <name>...</name> <url>...</url> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!--構建設定 --> <build>...</build> <reporting>...</reporting> <!-- 更多專案資訊 --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- 環境設定--> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
基本內容:
POM包括了所有的專案資訊
groupId:專案或者組織的唯一標誌,並且配置時生成路徑也是由此生成,如org.myproject.mojo生成的相對路徑為:/org/myproject/mojo
artifactId:專案的通用名稱
version:專案的版本
packaging:打包機制,如pom,jar,maven-plugin,ejb,war,ear,rar,par
name:使用者描述專案的名稱,無關緊要的東西,可選
url:應該是隻是寫明開發團隊的網站,無關緊要,可選
classifer:分類
其中groupId,artifactId,version,packaging這四項組成了專案的唯一座標。一般情況下,前面三項就可以組成專案的唯一座標了。
POM關係:主要為依賴,繼承,合成
依賴關係:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.alibaba.china.shared</groupId> <artifactId>alibaba.apollo.webx</artifactId> <version>2.5.0</version> <exclusions> <exclusion> <artifactId>org.slf4j.slf4j-api</artifactId> <groupId>com.alibaba.external</groupId> </exclusion> .... </exclusions> ...... </dependencies>
其中groupId, artifactId, version這三個組合標示依賴的具體工程,而且 這個依賴工程必需是maven中心包管理範圍內的,如果碰上非開源包,maven支援不了這個包,那麼則有有三種 方法處理:
1.本地安裝這個外掛install plugin
例如:mvn install:intall-file -Dfile=non-maven-proj.jar -DgroupId=som.group -DartifactId=non-maven-proj -Dversion=1
2.建立自己的repositories並且部署這個包,使用類似上面的deploy:deploy-file命令,
3.設定scope為system,並且指定系統路徑。
dependency裡屬性介紹:
type:預設為jar型別,常用的型別有:jar,ejb-client,test-jar...,可設定plugins中的extensions值為true後在增加 新的型別,
scope:是用來指定當前包的依賴範圍,maven的依賴範圍
optional:設定指依賴是否可選,預設為false,即子專案預設都繼承,為true,則子專案必需顯示的引入,與dependencyManagement裡定義的依賴類似 。
exclusions:如果X需要A,A包含B依賴,那麼X可以宣告不要B依賴,只要在exclusions中宣告exclusion.
exclusion:是將B從依賴樹中刪除,如上配置,alibaba.apollo.webx不想使用com.alibaba.external ,但是alibaba.apollo.webx是集成了com.alibaba.external,r所以就需要排除掉.
如果一個工程是parent或者aggregation(即mutil-module的)的,那麼必須在packing賦值為pom,child工 程從parent繼承的包括:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration
parent的使用方法如下:
<parent> <groupId>org.codehaus.mojo</groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent>
relativePath是可選的,maven會首先搜尋這個地址,在搜尋本地遠端repositories之前.
dependencyManagement:是用於幫助管理chidren的dependencies的。例如如果parent使用 dependencyManagement定義了一個dependencyon junit:junit4.0,那麼 它的children就可以只引用 groupId和artifactId,而version就可以通過parent來設定,這樣的好處就是可以集中管理 依賴的詳情
modules:對於多模組的project,outer-module沒有必需考慮inner-module的dependencies,當列出modules的時候,modules的順序是不重要的,因為maven會自動根據依賴關係來拓撲排序,
modules例子如下 :
<module>my-project</module> <module>other-project</module>
properties:是為pom定義一些常量,在pom中的其它地方可以直接引用。
定義方式如下:
<properties> <file.encoding>UTF-8</file_encoding> <java.source.version>1.5</java_source_version> <java.target.version>1.5</java_target_version> </properties>
使用方式 如下 :
${file.encoding}
還可以使用project.xx引用pom裡定義的其它屬性:如$(project.version}
build設定:
defaultGoal:預設的目標,必須跟命令列上的引數相同,如:jar:jar,或者與時期parse相同,例如install
directory:指定build target目標的目錄,預設為$(basedir}/target,即專案根目錄下的target
finalName:指定去掉字尾的工程名字,例如:預設為${artifactId}-${version}
filters:用於定義指定filter屬性的位置,例如filter元素賦值filters/filter1.properties,那麼這個 檔案裡面就可以定義name=value對,這個name=value對的值就可以在工程pom中通過${name}引用,預設的filter目錄 是${basedir}/src/main/fiters/
resources:描述工程中資源的位置
<resource> <targetPath>META-INF/plexus</targetPath> <filtering>false</filtering> <directory>${basedir}/src/main/plexus</directory> <includes> <include>configuration.xml</include> </includes> <excludes> <exclude>**/*.properties</exclude> </excludes> </resource>
targetPath:指定build資源到哪個目錄,預設是base directory
filtering:指定是否將filter檔案(即上面說的filters裡定義的*.property檔案)的變數值在這個resource檔案有效,例如上面就指定那些變數值在configuration檔案無效。
directory:指定屬性檔案的目錄,build的過程需要找到它,並且將其放到targetPath下,預設的directory是${basedir}/src/main/resources
includes:指定包含檔案的patterns,符合樣式並且在directory目錄下的檔案將會包含進project的資原始檔。
excludes:指定不包含在內的patterns,如果inclues與excludes有衝突,那麼excludes勝利,那些符合衝突的樣式的檔案是不會包含進來的。
testResources:這個模組包含測試資源元素,其內容定義與resources類似,不同的一點是預設的測試資源路徑是${basedir}/src/test/resources,測試資源是不部署的。
plugins配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.0</version> <extensions>false</extensions> <inherited>true</inherited> <configuration> <classifier>test</classifier> </configuration> <dependencies>...</dependencies> <executions>...</executions> </plugin>
extensions:true or false, 決定是否要load這個plugin的extensions,預設為true.
inherited:是否讓子pom繼承,ture or false 預設為true.
configuration:通常用於私有不開源的plugin,不能夠詳細瞭解plugin的內部工作原理,但使plugin滿足的properties
dependencies:與pom基礎的dependencies的結構和功能都相同,只是plugin的dependencies用於 plugin,而pom的denpendencies用於專案本身。在plugin的dependencies主要用於改變plugin原來的 dependencies,例如排除一些用不到的dependency或者修改dependency的版本等,詳細請看pom的 denpendencies.
executions:plugin也有很多個目標,每個目標具有不同的配置,executions就是設定plugin的目標,
<execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>verify</phase> <inherited>false</inherited> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution>
id:識別符號
goals:裡面列出一系列的goals元素,例如上面的run goal
phase:宣告goals執行的時期,例如:verify
inherited:是否傳遞execution到子pom裡。
configuration:設定execution下列表的goals的設定,而不是plugin所有的goals的設定
pluginManagement配置:
pluginManagement的作用類似於denpendencyManagement,只是denpendencyManagement是用 於管理專案jar包依賴,pluginManagement是用於管理plugin。與pom build裡的plugins區別是,這裡的plugin是列出來,然後讓子pom來決定是否引用。
例如:
<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <id>pre-process-classes</id> <phase>compile</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>pre-process</classifier> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement>
子pom引用方法:
在pom的build裡的plugins引用:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> </plugin> </plugins>
build裡的directories:
相關推薦
Maven--pom.xml 配置詳解
pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。<project> <mod
Maven pom.xml 配置詳解
什麼是pom? pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。pom.xml 配置檔案&l
maven的pom.xml配置詳解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.
SSM框架配合Maven時,pom.xml配置詳解。
這篇部落格針對我這樣的小白。 一. pom.xml有什麼用?: 我們知道maven(什麼是maven請移步https://www.cnblogs.com/whgk/p/7112560.html) 可以給我們管理jar包和其他資源(jar包:別人寫好的輪子,我們負責呼叫)
Maven系列2--pom.xml 配置詳解
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocat
maven專案中pom.xml配置詳解大全
<!-- 描述了資源的目標路徑。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。舉個例 子,如果你想資源在特定的包裡(org.apache.maven.messages),你就必須該元素設定為org/apache/maven /
maven pom標籤配置詳解
<modelVersion>4.0.0</modelVersion> <!--專案的全球唯一識別符號,通常使用全限定的包名區分該專案和其他專案。並且構建時生成的路徑也是由此生成, 如com.mycompany
Maven pom.xml檔案詳解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a
maven POM.xml 標籤詳解
pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。 <project xmlns="ht
maven POM.xml 標籤詳解
<span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta
maven中全域性配置檔案settings.xml及專案pom.xml的詳解完整版
maven中全域性配置檔案settings.xml及專案pom.xml的詳解 一、apache maven的簡介 Apache Maven,是一個軟體(特別是Java軟體)專案管理及自動構建工具,由Apache軟體基金會所提供。基於專案物件
maven中全域性配置檔案settings.xml及專案pom.xml的詳解3
(2) properties 作用:對應profile的擴充套件屬性列表。 maven屬性和ant中的屬性一樣,可以用來存放一些值。這些值可以在pom.xml中的任何地方使用標記${X}來使用,這裡X是指屬性的名稱。屬性有五種不同的形式,並且都能在se
maven核心:pom.xml檔案詳解
什麼是pom? pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。 快
史上最全的maven的pom.xml檔案詳解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m
maven中setting.xml配置詳解
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
Maven基礎-預設中央倉庫[settings.xml 配置詳解 ]
maven2 比起maven1 來說,需要配置的檔案少多了,主要集中在pom.xml和settings.xml中。 先來說說settings.xml,settings.xml對於maven來說相當於全域性性的配置,用於所有的專案。在maven2中存在兩個settings.xml,一個位於maven2的
Maven的pom.xml檔案詳解
快速預覽 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
Maven基礎-預設中央倉庫[settings-xml-配置詳解-]
Maven基礎-預設中央倉庫 當我們建立一個簡單的Maven專案後(只需要在pom.xml配置好依賴),執行mvn clean install就可以把專案構建好,不需要我們手工下載任何jar,這全靠中央倉庫的存在,它會自動從倉庫下載。這個倉庫的定義是在
maven之setting.xml 配置詳解
檔案存放位置 全域性配置: ${M2_HOME}/conf/settings.xml 使用者配置: ${user.home}/.m2/settings.xml note:使用者配置優先於全域性配置。${user.home} 和和所有其他系統屬性只能在3.0+版本上
最全的maven的pom.xml檔案詳解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h