setting.xml主要用於配置maven的運行環境等一系列通用的屬性,是全局級別的配置文件;而pom.xml主要描述了項目的maven座標,依賴關係,開發者須要遵循的規則,缺陷管理系統,組織和licenses,以及其餘全部的項目相關因素,是項目級別的配置文件。html
一個典型的pom.xml文件配置以下:java
通常來講,上面的幾個配置項對任何項目都是必不可少的,定義了項目的基本屬性。web
這裏有必要對一個不太經常使用的屬性classifier作一下解釋,由於有時候引用某個jar包,classifier不寫的話會報錯。spring
classifier元素用來幫助定義構件輸出的一些附屬構件。附屬構件與主構件對應,好比主構件是 kimi-app-2.0.0.jar,該項目可能還會經過使用一些插件生成 如kimi-app-2.0.0-javadoc.jar (Java文檔)、 kimi-app-2.0.0-sources.jar(Java源代碼) 這樣兩個附屬構件。這時候,javadoc、sources就是這兩個附屬構件的classifier,這樣附屬構件也就擁有了本身惟一的座標。數據庫
classifier的用途在於:apache
1. maven download javadoc / sources jar包的時候,須要藉助classifier指明要下載那個附屬構件json
2. 引入依賴的時候,有時候僅憑groupId、artifactId、version沒法惟一的肯定某個構件,須要藉助classifier來進一步明確目標。好比JSON-lib,有時候會同一個版本會提供多個jar包,在JDK1.5環境下是一套,在JDK1.3環境下是一套:windows
引用它的時候就要註明JDK版本,不然maven不知道你到底須要哪一套jar包:api
pom裏面的倉庫與setting.xml裏的倉庫功能是同樣的。主要的區別在於,pom裏的倉庫是個性化的。好比一家大公司裏的setting文件是公用的,全部項目都用一個setting文件,但各個子項目卻會引用不一樣的第三方庫,因此就須要在pom裏設置本身須要的倉庫地址。服務器
profile配置項在setting.xml中也有,是pom.xml中profile元素的裁剪版本,包含了id,activation, repositories, pluginRepositories和 properties元素。這裏的profile元素只包含這五個子元素是由於setting.xml只關心構建系統這個總體(這正是settings.xml文件的角色定位),而非單獨的項目對象模型設置。若是一個settings中的profile被激活,它的值會覆蓋任何其它定義在POM中或者profile.xml中的帶有相同id的profile。
pom.xml中的profile能夠看作pom.xml的副本,擁有與pom.xml相同的子元素與配置方法。它包含可選的activation(profile的觸發器)和一系列的changes。例如test過程可能會指向不一樣的數據庫(相對最終的deployment)或者不一樣的dependencies或者不一樣的repositories,而且是根據不一樣的JDK來改變的。只須要其中一個成立就能夠激活profile,若是第一個條件知足了,那麼後面就不會在進行匹配。