maven配置詳解

1 setting.xml

maven的配置文件setting.xml存在于兩個(gè)地方:

  • 安裝的地方:${M2_HOME}/conf/settings.xml
  • 用戶(hù)的目錄:${user.home}/.m2/settings.xml泵琳,該目錄可以自己定義

前者稱(chēng)為全部變量练般,對(duì)操作系統(tǒng)的所有使用者有效;后者為用戶(hù)配置,只對(duì)當(dāng)前操作系統(tǒng)的使用者有效舟误。如果兩者共存,內(nèi)容將會(huì)合并,并且用戶(hù)配置會(huì)覆蓋全局配置。

Maven安裝后顶瞒,用戶(hù)目錄下不會(huì)自動(dòng)生成settings.xml,只有全局配置文件元旬。如果需要?jiǎng)?chuàng)建用戶(hù)范圍的settings.xml榴徐,可以將安裝路徑下的settings復(fù)制到目錄${user.home}/.m2/。Maven默認(rèn)的settings.xml是一個(gè)包含了注釋和例子的模板匀归,可以快速的修改它來(lái)達(dá)到你的要求箕速。

全局配置一旦更改,所有的用戶(hù)都會(huì)受到影響朋譬,而且如果maven進(jìn)行升級(jí),所有的配置都會(huì)被清除兴垦,所以要提前復(fù)制和備份${M2_HOME}/conf/settings.xml文件徙赢,一般情況下不推薦配置全局的settings.xml。

下面的配置文件對(duì)各個(gè)節(jié)點(diǎn)的含義及作用都有注解探越。實(shí)際應(yīng)用中狡赐,經(jīng)常使用的是<localRepository>、<servers>钦幔、<mirrors>枕屉、<profiles>有限幾個(gè)節(jié)點(diǎn),其他節(jié)點(diǎn)使用默認(rèn)值足夠應(yīng)對(duì)大部分的應(yīng)用場(chǎng)景鲤氢。

關(guān)于xmlns屬性的解析可以查看文章:https://zhuanlan.zhihu.com/p/148110873

<?xml version="1.0" encoding="UTF-8"?>
<settings
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <!--本地倉(cāng)庫(kù)搀擂。該值表示構(gòu)建系統(tǒng)本地倉(cāng)庫(kù)的路徑。其默認(rèn)值為${user.home}/.m2/repository卷玉。  -->
    <localRepository>usr/local/maven</localRepository>

    <!--Maven是否需要和用戶(hù)交互以獲得輸入哨颂。如果Maven需要和用戶(hù)交互以獲得輸入,則設(shè)置成true相种,反之則應(yīng)為false威恼。默認(rèn)為true。 -->
    <interactiveMode>true</interactiveMode>

    <!--Maven是否需要使用plugin-registry.xml文件來(lái)管理插件版本。
        如果設(shè)置為true箫措,則在{user.home}/.m2下需要有一個(gè)plugin-registry.xml來(lái)對(duì)plugin的版本進(jìn)行管理
        默認(rèn)為false腹备。 -->
    <usePluginRegistry>false</usePluginRegistry>

    <!--表示Maven是否需要在離線模式下運(yùn)行。如果構(gòu)建系統(tǒng)需要在離線模式下運(yùn)行斤蔓,則為true植酥,默認(rèn)為false。
        當(dāng)由于網(wǎng)絡(luò)設(shè)置原因或者安全因素附迷,構(gòu)建服務(wù)器不能連接遠(yuǎn)程倉(cāng)庫(kù)的時(shí)候惧互,該配置就十分有用。  -->
    <offline>false</offline>

    <!--當(dāng)插件的組織Id(groupId)沒(méi)有顯式提供時(shí)喇伯,供搜尋插件組織Id(groupId)的列表喊儡。
        該元素包含一個(gè)pluginGroup元素列表,每個(gè)子元素包含了一個(gè)組織Id(groupId)稻据。
        當(dāng)我們使用某個(gè)插件艾猜,并且沒(méi)有在命令行為其提供組織Id(groupId)的時(shí)候,Maven就會(huì)使用該列表捻悯。
        默認(rèn)情況下該列表包含了org.apache.maven.plugins匆赃。 -->

    <pluginGroups>
        <!--plugin的組織Id(groupId)-->
        <pluginGroup>org.codehaus.mojo</pluginGroup>
    </pluginGroups>

    <!--用來(lái)配置不同的代理,多代理profiles可以應(yīng)對(duì)筆記本或移動(dòng)設(shè)備的工作環(huán)境:通過(guò)簡(jiǎn)單的設(shè)置profile id就可以很容易的更換整個(gè)代理配置 -->
    <proxies>
        <!--代理元素包含配置代理時(shí)需要的信息 -->
        <proxy>
            <!--代理的唯一定義符今缚,用來(lái)區(qū)分不同的代理元素算柳。 -->
            <id>myproxy</id>
            <!--該代理是否是激活的那個(gè)。true則激活代理姓言。當(dāng)我們聲明了一組代理瞬项,而某個(gè)時(shí)候只需要激活一個(gè)代理的時(shí)候,該元素就可以派上用處 -->
            <active>true</active>
            <!--代理的協(xié)議何荚。 協(xié)議://主機(jī)名:端口囱淋,分隔成離散的元素以方便配置。 -->
            <protocol>http://…</protocol>
            <!--代理的主機(jī)名餐塘。協(xié)議://主機(jī)名:端口妥衣,分隔成離散的元素以方便配置。   -->
            <host>proxy.somewhere.com</host>
            <!--代理的端口戒傻。協(xié)議://主機(jī)名:端口税手,分隔成離散的元素以方便配置。  -->
            <port>8080</port>
            <!--代理的用戶(hù)名需纳,用戶(hù)名和密碼表示代理服務(wù)器認(rèn)證的登錄名和密碼冈止。  -->
            <username>proxyuser</username>
            <!--代理的密碼,用戶(hù)名和密碼表示代理服務(wù)器認(rèn)證的登錄名和密碼候齿。  -->
            <password>somepassword</password>
            <!--不該被代理的主機(jī)名列表熙暴。該列表的分隔符由代理服務(wù)器指定闺属;例子中使用了豎線分隔符,使用逗號(hào)分隔也很常見(jiàn)周霉。 -->
            <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
        </proxy>
    </proxies>

    <!--配置服務(wù)端的一些設(shè)置掂器。一些設(shè)置如安全證書(shū)不應(yīng)該和pom.xml一起分發(fā)。這種類(lèi)型的信息應(yīng)該存在于構(gòu)建服務(wù)器上的settings.xml文件中俱箱。 -->
    <servers>
        <!--服務(wù)器元素包含配置服務(wù)器時(shí)需要的信息  -->
        <server>
            <!--這是server的id(注意不是用戶(hù)登陸的id)国瓮,該id與distributionManagement中repository元素的id相匹配。 -->
            <id>server001</id>
            <!--鑒權(quán)用戶(hù)名狞谱。鑒權(quán)用戶(hù)名和鑒權(quán)密碼表示服務(wù)器認(rèn)證所需要的登錄名和密碼乃摹。  -->
            <username>my_login</username>
            <!--鑒權(quán)密碼 。鑒權(quán)用戶(hù)名和鑒權(quán)密碼表示服務(wù)器認(rèn)證所需要的登錄名和密碼跟衅。  -->
            <password>my_password</password>
            <!--鑒權(quán)時(shí)使用的私鑰位置孵睬。和前兩個(gè)元素類(lèi)似,私鑰位置和私鑰密碼指定了一個(gè)私鑰的路徑
                (默認(rèn)是/home/hudson/.ssh/id_dsa)以及如果需要的話(huà)伶跷,一個(gè)密語(yǔ)掰读。
                將來(lái)passphrase和password元素可能會(huì)被提取到外部,但目前它們必須在settings.xml文件以純文本的形式聲明 -->
            <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
            <!--鑒權(quán)時(shí)使用的私鑰密碼叭莫。 -->
            <passphrase>some_passphrase</passphrase>
            <!--文件被創(chuàng)建時(shí)的權(quán)限蹈集。如果在部署的時(shí)候會(huì)創(chuàng)建一個(gè)倉(cāng)庫(kù)文件或者目錄,這時(shí)候就可以使用權(quán)限(permission)雇初。
                這兩個(gè)元素合法的值是一個(gè)三位數(shù)字拢肆,其對(duì)應(yīng)了unix文件系統(tǒng)的權(quán)限,如664靖诗,或者775郭怪。  -->
            <filePermissions>664</filePermissions>
            <!--目錄被創(chuàng)建時(shí)的權(quán)限。  -->
            <directoryPermissions>775</directoryPermissions>
            <!--傳輸層額外的配置項(xiàng)  -->
            <configuration></configuration>
        </server>
    </servers>

    <!--為倉(cāng)庫(kù)列表配置的下載鏡像列表呻畸。  -->
    <mirrors>
        <!--給定倉(cāng)庫(kù)的下載鏡像。  -->
        <mirror>
            <!--該鏡像的唯一標(biāo)識(shí)符悼院。id用來(lái)區(qū)分不同的mirror元素伤为。  -->
            <id>planetmirror.com</id>
            <!--鏡像名稱(chēng)  -->
            <name>PlanetMirror Australia</name>
            <!--該鏡像的URL。構(gòu)建系統(tǒng)會(huì)優(yōu)先考慮使用該URL据途,而非使用默認(rèn)的服務(wù)器URL绞愚。  -->
            <url>http://downloads.planetmirror.com/pub/maven2</url>
            <!--被鏡像的服務(wù)器的id。例如颖医,如果我們要設(shè)置了一個(gè)Maven中央倉(cāng)庫(kù)(http://repo1.maven.org/maven2)的鏡像位衩,就需要將該元素設(shè)置成central。這必須和中央倉(cāng)庫(kù)的id central完全一致熔萧。 -->
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>

    <!--根據(jù)環(huán)境參數(shù)來(lái)調(diào)整構(gòu)建配置的列表糖驴。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本僚祷。
        它包含了id,activation, repositories, pluginRepositories和 properties元素贮缕。
        這里的profile元素只包含這五個(gè)子元素是因?yàn)檫@里只關(guān)心構(gòu)建系統(tǒng)這個(gè)整體(這正是settings.xml文件的角色定位)辙谜,而非單獨(dú)的項(xiàng)目對(duì)象模型設(shè)置。
        如果一個(gè)settings中的profile被激活感昼,它的值會(huì)覆蓋任何其它定義在POM中或者profile.xml中的帶有相同id的profile装哆。  -->
    <profiles>

        <!--根據(jù)環(huán)境參數(shù)來(lái)調(diào)整的構(gòu)件的配置 -->
        <profile>
            <!--該配置的唯一標(biāo)識(shí)符。  -->
            <id>test</id>

            <!--自動(dòng)觸發(fā)profile的條件邏輯定嗓。Activation是profile的開(kāi)啟鑰匙蜕琴。
                如POM中的profile一樣,profile的力量來(lái)自于它能夠在某些特定的環(huán)境中自動(dòng)使用某些特定的值宵溅;這些環(huán)境通過(guò)activation元素指定凌简。
                activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id层玲。
                profile也可以通過(guò)在命令行号醉,使用-P標(biāo)記和逗號(hào)分隔的列表來(lái)顯式的激活(如,-P test)辛块。 -->
            <activation>
                <!--profile默認(rèn)是否激活的標(biāo)識(shí) -->
                <activeByDefault>false</activeByDefault>
                <!--activation有一個(gè)內(nèi)建的java版本檢測(cè)畔派,如果檢測(cè)到j(luò)dk版本與期待的一樣,profile被激活润绵。 -->
                <jdk>1.7</jdk>

                <!--當(dāng)匹配的操作系統(tǒng)屬性被檢測(cè)到线椰,profile被激活。os元素可以定義一些操作系統(tǒng)相關(guān)的屬性尘盼。 -->
                <os>
                    <!--激活profile的操作系統(tǒng)的名字  -->
                    <name>Windows XP</name>
                    <!--激活profile的操作系統(tǒng)所屬家族(如 'windows')   -->
                    <family>Windows</family>
                    <!--激活profile的操作系統(tǒng)體系結(jié)構(gòu)   -->
                    <arch>x86</arch>
                    <!--激活profile的操作系統(tǒng)版本 -->
                    <version>5.1.2600</version>
                </os>

                <!--如果Maven檢測(cè)到某一個(gè)屬性(其值可以在POM中通過(guò)${名稱(chēng)}引用)憨愉,其擁有對(duì)應(yīng)的名稱(chēng)和值,Profile就會(huì)被激活卿捎。
                    如果值字段是空的配紫,那么存在屬性名稱(chēng)字段就會(huì)激活profile,否則按區(qū)分大小寫(xiě)方式匹配屬性值字段 -->
                <property>
                    <!--激活profile的屬性的名稱(chēng) -->
                    <name>mavenVersion</name>
                    <!--激活profile的屬性的值  -->
                    <value>2.0.3</value>
                </property>

                <!--提供一個(gè)文件名午阵,通過(guò)檢測(cè)該文件的存在或不存在來(lái)激活profile躺孝。missing檢查文件是否存在,如果不存在則激活profile底桂。
                    另一方面植袍,exists則會(huì)檢查文件是否存在,如果存在則激活profile籽懦。 -->
                <file>
                    <!--如果指定的文件存在于个,則激活profile。  -->
                    <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists>
                    <!--如果指定的文件不存在暮顺,則激活profile厅篓。 -->
                    <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing>
                </file>
            </activation>

            <!--對(duì)應(yīng)profile的擴(kuò)展屬性列表秀存。Maven屬性和Ant中的屬性一樣,可以用來(lái)存放一些值贷笛。這些值可以在POM中的任何地方使用標(biāo)記${X}來(lái)使用米同,這里X是指屬性的名稱(chēng)蜕煌。
                屬性有五種不同的形式爆存,并且都能在settings.xml文件中訪問(wèn)养距。   
                   1\. env.X: 在一個(gè)變量前加上"env."的前綴,會(huì)返回一個(gè)shell環(huán)境變量汇荐。例如,"env.PATH"指代了$path環(huán)境變量(在Windows上是%PATH%)洞就。   
                   2\. project.x:指代了POM中對(duì)應(yīng)的元素值。      
                   3\. settings.x: 指代了settings.xml中對(duì)應(yīng)元素的值掀淘。   
                   4\. Java System Properties: 所有可通過(guò)java.lang.System.getProperties()訪問(wèn)的屬性都能在POM中使用該形式訪問(wèn)旬蟋,   
                    如/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre。      
                   5\. x: 在<properties/>元素中革娄,或者外部文件中設(shè)置倾贰,以${someVar}的形式使用。  -->
            <properties>
                <!-- 如果這個(gè)profile被激活拦惋,那么屬性${user.install}就可以被訪問(wèn)了 -->
                <user.install>usr/local/winner/jobs/maven-guide</user.install>
            </properties>

            <!--遠(yuǎn)程倉(cāng)庫(kù)列表匆浙,它是Maven用來(lái)填充構(gòu)建系統(tǒng)本地倉(cāng)庫(kù)所使用的一組遠(yuǎn)程項(xiàng)目。  -->
            <repositories>
                <!--包含需要連接到遠(yuǎn)程倉(cāng)庫(kù)的信息  -->
                <repository>
                    <!--遠(yuǎn)程倉(cāng)庫(kù)唯一標(biāo)識(shí) -->
                    <id>codehausSnapshots</id>
                    <!--遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)  -->
                    <name>Codehaus Snapshots</name>

                    <!--如何處理遠(yuǎn)程倉(cāng)庫(kù)里發(fā)布版本的下載 -->
                    <releases>
                        <!--true或者false表示該倉(cāng)庫(kù)是否為下載某種類(lèi)型構(gòu)件(發(fā)布版厕妖,快照版)開(kāi)啟首尼。   -->
                        <enabled>false</enabled>
                        <!--該元素指定更新發(fā)生的頻率。Maven會(huì)比較本地POM和遠(yuǎn)程POM的時(shí)間戳言秸。這里的選項(xiàng)是:
                            always(一直)软能,daily(默認(rèn),每日)举畸,interval:X(這里X是以分鐘為單位的時(shí)間間隔)查排,或者never(從不)。  -->
                        <updatePolicy>always</updatePolicy>
                        <!--當(dāng)Maven驗(yàn)證構(gòu)件校驗(yàn)文件失敗時(shí)該怎么做:
                            ignore(忽略)抄沮,fail(失敯虾恕),或者warn(警告)合是。 -->
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>

                    <!--如何處理遠(yuǎn)程倉(cāng)庫(kù)里快照版本的下載了罪。有了releases和snapshots這兩組配置锭环,POM就可以在每個(gè)單獨(dú)的倉(cāng)庫(kù)中聪全,為每種類(lèi)型的構(gòu)件采取不同的策略。
                        例如辅辩,可能有人會(huì)決定只為開(kāi)發(fā)目的開(kāi)啟對(duì)快照版本下載的支持难礼。參見(jiàn)repositories/repository/releases元素 -->
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>

                    <!--遠(yuǎn)程倉(cāng)庫(kù)URL娃圆,按protocol://hostname/path形式  -->
                    <url>http://snapshots.maven.codehaus.org/maven2</url>

                    <!--用于定位和排序構(gòu)件的倉(cāng)庫(kù)布局類(lèi)型-可以是default(默認(rèn))或者legacy(遺留)。
                        Maven 2為其倉(cāng)庫(kù)提供了一個(gè)默認(rèn)的布局蛾茉;然而讼呢,Maven 1.x有一種不同的布局。我們可以使用該元素指定布局是default(默認(rèn))還是legacy(遺留)谦炬。  -->
                    <layout>default</layout>
                </repository>
            </repositories>

            <!--發(fā)現(xiàn)插件的遠(yuǎn)程倉(cāng)庫(kù)列表悦屏。倉(cāng)庫(kù)是兩種主要構(gòu)件的家。第一種構(gòu)件被用作其它構(gòu)件的依賴(lài)键思。這是中央倉(cāng)庫(kù)中存儲(chǔ)的大部分構(gòu)件類(lèi)型础爬。另外一種構(gòu)件類(lèi)型是插件。
                Maven插件是一種特殊類(lèi)型的構(gòu)件吼鳞。由于這個(gè)原因看蚜,插件倉(cāng)庫(kù)獨(dú)立于其它倉(cāng)庫(kù)。pluginRepositories元素的結(jié)構(gòu)和repositories元素的結(jié)構(gòu)類(lèi)似赔桌。
                每個(gè)pluginRepository元素指定一個(gè)Maven可以用來(lái)尋找新插件的遠(yuǎn)程地址供炎。 -->
            <pluginRepositories>
                <!--包含需要連接到遠(yuǎn)程插件倉(cāng)庫(kù)的信息.參見(jiàn)profiles/profile/repositories/repository元素的說(shuō)明 -->
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>

            <!--手動(dòng)激活profiles的列表,按照profile被應(yīng)用的順序定義activeProfile疾党。 該元素包含了一組activeProfile元素音诫,每個(gè)activeProfile都含有一個(gè)profile id。
                任何在activeProfile中定義的profile id仿贬,不論環(huán)境設(shè)置如何纽竣,其對(duì)應(yīng)的 profile都會(huì)被激活。
                如果沒(méi)有匹配的profile茧泪,則什么都不會(huì)發(fā)生蜓氨。例如,env-test是一個(gè)activeProfile队伟,則在pom.xml(或者profile.xml)中對(duì)應(yīng)id的profile會(huì)被激活穴吹。
                如果運(yùn)行過(guò)程中找不到這樣一個(gè)profile,Maven則會(huì)像往常一樣運(yùn)行嗜侮。  -->
            <activeProfiles>
                <activeProfile>env-test</activeProfile>
            </activeProfiles>
        </profile>
    </profiles>
</settings>

2.pom.xml

settings.xml文件主要用于配置maven運(yùn)行環(huán)境等一系列通用屬性港令,是全局級(jí)別的配置文件,pom.xml文件描述了項(xiàng)目的maven坐標(biāo)锈颗、依賴(lài)關(guān)系等顷霹,開(kāi)發(fā)者需要遵循的規(guī)則,缺陷管理系統(tǒng)击吱,組織和licenses淋淀,以及其他所有的項(xiàng)目相關(guān)因素,是項(xiàng)目級(jí)別的配置文件覆醇。

2.1 基礎(chǔ)配置

一個(gè)典型的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.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!-- 模型版本朵纷。maven2.0必須是這樣寫(xiě)炭臭,現(xiàn)在是maven2唯一支持的版本 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成袍辞,
        如com.winner.trade鞋仍,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/winner/trade -->
    <groupId>com.winner.trade</groupId>

    <!-- 本項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目搅吁,就是靠artifactId來(lái)區(qū)分的 -->
    <artifactId>trade-core</artifactId>

    <!-- 本項(xiàng)目目前所處的版本號(hào) -->
    <version>1.0.0-SNAPSHOT</version>

    <!-- 打包的機(jī)制威创,如pom, jar, maven-plugin, ejb, war, ear, rar, par,默認(rèn)為jar -->
    <packaging>jar</packaging>

    <!-- 幫助定義構(gòu)件輸出的一些附屬構(gòu)件,附屬構(gòu)件與主構(gòu)件對(duì)應(yīng)谎懦,有時(shí)候需要加上classifier才能唯一的確定該構(gòu)件
            不能直接定義項(xiàng)目的classifer,因?yàn)楦綄贅?gòu)件不是項(xiàng)目直接默認(rèn)生成的那婉,而是由附加的插件幫助生成的  -->
    <classifier>...</classifier>

    <!-- 定義本項(xiàng)目的依賴(lài)關(guān)系 -->
    <dependencies>

        <!-- 每個(gè)dependency都對(duì)應(yīng)這一個(gè)jar包 -->
        <dependency>

            <!-- 一般情況下,maven是通過(guò)groupId党瓮、artifactId详炬、version這三個(gè)元素值(俗稱(chēng)坐標(biāo))來(lái)檢索該構(gòu)件,
                然后引入你的工程寞奸。如果別人想引用你現(xiàn)在開(kāi)發(fā)的這個(gè)項(xiàng)目(前提是已開(kāi)發(fā)完畢并發(fā)布到了遠(yuǎn)程倉(cāng)庫(kù))呛谜,
                就需要在他的pom文件中新建一個(gè)dependency節(jié)點(diǎn),將本項(xiàng)目的groupId枪萄、artifactId隐岛、version寫(xiě)入,
                maven就會(huì)把你上傳的jar包下載到他的本地 -->
            <groupId>com.winner.trade</groupId>
            <artifactId>trade-test</artifactId>
            <version>1.0.0-SNAPSHOT</version>

            <!-- maven認(rèn)為瓷翻,程序?qū)ν獠康囊蕾?lài)會(huì)隨著程序的所處階段和應(yīng)用場(chǎng)景而變化聚凹,所以maven中的依賴(lài)關(guān)系有作用域(scope)的限制。
                scope包含如下的取值:compile(編譯范圍)齐帚、provided(已提供范圍)妒牙、runtime(運(yùn)行時(shí)范圍)、test(測(cè)試范圍)对妄、system(系統(tǒng)范圍) -->
            <scope>test</scope>

            <!-- 設(shè)置指依賴(lài)是否可選湘今,默認(rèn)為false,即子項(xiàng)目默認(rèn)都繼承:為true,則子項(xiàng)目必需顯示的引入,與dependencyManagement里定義的依賴(lài)類(lèi)似 剪菱。 -->
            <optional>false</optional>

            <!-- 屏蔽依賴(lài)關(guān)系摩瞎。
                比如項(xiàng)目中使用的libA依賴(lài)某個(gè)庫(kù)的1.0版,libB依賴(lài)某個(gè)庫(kù)的2.0版孝常,現(xiàn)在想統(tǒng)一使用2.0版旗们,就應(yīng)該屏蔽掉對(duì)1.0版的依賴(lài) -->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <!-- 為pom定義一些常量,在pom中的其它地方可以直接引用
        使用方式 如下 :${file.encoding} -->
    <properties>
        <file.encoding>UTF-8</file.encoding>
        <java.source.version>1.5</java.source.version>
        <java.target.version>1.5</java.target.version>
    </properties>

    ...

</project>

上面的配置定義了項(xiàng)目的基本屬性构灸。

2.1.1 dependencies

dependencies屬性是項(xiàng)目相關(guān)依賴(lài)的配置上渴,如果在父項(xiàng)目寫(xiě)的依賴(lài),會(huì)被子項(xiàng)目引用。一般會(huì)在父項(xiàng)目中定義子項(xiàng)目中所有的共用的依賴(lài)驰贷。

2.1.2 parent

parent屬性用于確認(rèn)父項(xiàng)目的坐標(biāo)位置。

<parent>
    <groupId>com.learnPro</groupId>
    <artifactId>SIP-parent</artifactId>
    <relativePath></relativePath>
    <version>0.0.1-SNAPSHOT</version>
</parent>

groupId: 父項(xiàng)目的組Id標(biāo)識(shí)符 artifactId:父項(xiàng)目的唯一標(biāo)識(shí)符 relativePath:Maven首先在當(dāng)前項(xiàng)目中找父項(xiàng)目的pom洛巢,然后在文件系統(tǒng)的這個(gè)位置(relativePath)括袒,然后在本地倉(cāng)庫(kù),再在遠(yuǎn)程倉(cāng)庫(kù)找稿茉。 version: 父項(xiàng)目的版本

2.1.3 modules

有些maven項(xiàng)目會(huì)作為多模塊锹锰,如SpringMVC項(xiàng)目就分為dal/service/controller三個(gè)模塊,這個(gè)標(biāo)簽就是用于指定當(dāng)前項(xiàng)目所包含的所有模塊漓库。之后對(duì)這個(gè)項(xiàng)目進(jìn)行的maven操作就是對(duì)所有子模塊進(jìn)行相同操作恃慧。

<modules>
   <module>com-dal</>
   <module>com-service</>
   <module>com-controller</>
<modules/>

2.1.4 properties

properties屬性用于定于pom常亮,如一些依賴(lài)的版本號(hào)等渺蒿。

<properties>
    <java.version>1.7</java.version>
</properties>

此時(shí)可以在pom文件任意地方使用${Java.version}進(jìn)行引用指定版本號(hào)痢士。

2.1.5 dependencyManagement

在父模塊中定義后,子模塊不會(huì)直接使用對(duì)應(yīng)依賴(lài)茂装,但是在使用相同依賴(lài)的時(shí)候可以不加版本號(hào),這樣的好處是怠蹂,父項(xiàng)目統(tǒng)一了版本,而且子項(xiàng)目可以在需要的時(shí)候才引用對(duì)應(yīng)的依賴(lài)少态。

父項(xiàng)目:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子項(xiàng)目:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

2.1.6 classifier

classifier元素用來(lái)幫助定義構(gòu)建輸出的一些附屬構(gòu)件城侧。附屬構(gòu)件與主構(gòu)件對(duì)應(yīng),比如主構(gòu)件是 kimi-app-2.0.0.jar彼妻,該項(xiàng)目可能還會(huì)通過(guò)使用一些插件生成 如 kimi-app-2.0.0-javadoc.jar (Java文檔)嫌佑、 kimi-app-2.0.0-sources.jar(Java源代碼) 這樣兩個(gè)附屬構(gòu)件。這時(shí)候侨歉,javadoc屋摇、sources就是這兩個(gè)附屬構(gòu)件的classifier,這樣附屬構(gòu)件也就擁有了自己唯一的坐標(biāo)幽邓。

classifier的用途在于:

  • maven download javadoc / sources jar包的時(shí)候摊册,需要借助classifier指明要下載那個(gè)附屬構(gòu)件
  • 引入依賴(lài)的時(shí)候,有時(shí)候僅憑groupId颊艳、artifactId茅特、version無(wú)法唯一的確定某個(gè)構(gòu)件,需要借助classifier來(lái)進(jìn)一步明確目標(biāo)棋枕。比如JSON-lib白修,有時(shí)候會(huì)同一個(gè)版本會(huì)提供多個(gè)jar包,此時(shí)可以用于指定java版本重斑。
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier> 
</dependency>

2.2 構(gòu)建配置

<build>

    <!-- 產(chǎn)生的構(gòu)件的文件名兵睛,默認(rèn)值是${artifactId}-${version}。 --> 
    <finalName>myPorjectName</finalName> 

    <!-- 構(gòu)建產(chǎn)生的所有文件存放的目錄,默認(rèn)為${basedir}/target,即項(xiàng)目根目錄下的target --> 
    <directory>${basedir}/target</directory> 

    <!-- 當(dāng)項(xiàng)目沒(méi)有規(guī)定目標(biāo)(Maven2 叫做階段(phase))時(shí)的默認(rèn)值祖很,
        必須跟命令行上的參數(shù)相同例如jar:jar笛丙,或者與某個(gè)階段(phase)相同例如install、compile等 --> 
    <defaultGoal>install</defaultGoal>

    <!-- 當(dāng)filtering開(kāi)關(guān)打開(kāi)時(shí)假颇,使用到的過(guò)濾器屬性文件列表胚鸯。
        項(xiàng)目配置信息中諸如${spring.version}之類(lèi)的占位符會(huì)被屬性文件中的實(shí)際值替換掉 --> 
    <filters>
            <filter>../filter.properties</filter>
    </filters> 

    <!-- 項(xiàng)目相關(guān)的所有資源路徑列表,例如和項(xiàng)目相關(guān)的配置文件笨鸡、屬性文件姜钳,這些資源被包含在最終的打包文件里。 --> 
    <resources> 
        <resource> 

            <!-- 描述了資源的目標(biāo)路徑形耗。該路徑相對(duì)target/classes目錄(例如${project.build.outputDirectory})哥桥。
            舉個(gè)例子,如果你想資源在特定的包里(org.apache.maven.messages)激涤,你就必須該元素設(shè)置為org/apache/maven/messages拟糕。
            然而,如果你只是想把資源放到源碼目錄結(jié)構(gòu)里倦踢,就不需要該配置已卸。 --> 
            <targetPath>resources</targetPath> 

            <!-- 是否使用參數(shù)值代替參數(shù)名。參數(shù)值取自properties元素或者文件里配置的屬性硼一,文件在filters元素里列出累澡。 --> 
            <filtering>true</filtering> 

            <!-- 描述存放資源的目錄,該路徑相對(duì)POM路徑 --> 
            <directory>src/main/resources</directory> 

            <!-- 包含的模式列表 --> 
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
            </includes>  

            <!-- 排除的模式列表
                如果<include>與<exclude>劃定的范圍存在沖突般贼,以<exclude>為準(zhǔn) --> 
            <excludes>  
                <exclude>jdbc.properties</exclude>  
                </excludes> 

        </resource> 
    </resources> 

    <!-- 單元測(cè)試相關(guān)的所有資源路徑愧哟,配制方法與resources類(lèi)似--> 
    <testResources> 
        <testResource> 
            <targetPath /><filtering /><directory /><includes /><excludes /> 
        </testResource> 
    </testResources> 

    <!-- 項(xiàng)目源碼目錄,當(dāng)構(gòu)建項(xiàng)目的時(shí)候哼蛆,構(gòu)建系統(tǒng)會(huì)編譯目錄里的源碼蕊梧。該路徑是相對(duì)于pom.xml的相對(duì)路徑。 --> 
    <sourceDirectory>${basedir}\src\main\java</sourceDirectory> 

    <!-- 項(xiàng)目腳本源碼目錄腮介,該目錄和源碼目錄不同肥矢,
        絕大多數(shù)情況下,該目錄下的內(nèi)容會(huì)被拷貝到輸出目錄(因?yàn)槟_本是被解釋的叠洗,而不是被編譯的)甘改。 --> 
    <scriptSourceDirectory>${basedir}\src\main\scripts</scriptSourceDirectory>

    <!-- 項(xiàng)目單元測(cè)試使用的源碼目錄,當(dāng)測(cè)試項(xiàng)目的時(shí)候灭抑,構(gòu)建系統(tǒng)會(huì)編譯目錄里的源碼十艾。該路徑是相對(duì)于pom.xml的相對(duì)路徑。 --> 
    <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>

    <!-- 被編譯過(guò)的應(yīng)用程序class文件存放的目錄腾节。 --> 
    <outputDirectory>${basedir}\target\classes</outputDirectory>

    <!-- 被編譯過(guò)的測(cè)試class文件存放的目錄忘嫉。 --> 
    <testOutputDirectory>${basedir}\target\test-classes</testOutputDirectory> 

    <!-- 項(xiàng)目的一系列構(gòu)建擴(kuò)展,它們是一系列build過(guò)程中要使用的產(chǎn)品荤牍,會(huì)包含在running bulid‘s classpath里面。
        他們可以開(kāi)啟extensions庆冕,也可以通過(guò)提供條件來(lái)激活plugins康吵。
        簡(jiǎn)單來(lái)講,extensions是在build過(guò)程被激活的產(chǎn)品--> 
    <extensions> 

        <!-- 例如访递,通常情況下晦嵌,程序開(kāi)發(fā)完成后部署到線上Linux服務(wù)器,可能需要經(jīng)歷打包力九、
            將包文件傳到服務(wù)器、SSH連上服務(wù)器邑闺、敲命令啟動(dòng)程序等一系列繁瑣的步驟跌前。
            實(shí)際上這些步驟都可以通過(guò)Maven的一個(gè)插件 wagon-maven-plugin 來(lái)自動(dòng)完成
            下面的擴(kuò)展插件wagon-ssh用于通過(guò)SSH的方式連接遠(yuǎn)程服務(wù)器,
            類(lèi)似的還有支持ftp方式的wagon-ftp插件 --> 
        <extension> 
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.8</version>
        </extension> 

    </extensions> 

    <!-- 使用的插件列表 陡舅。 --> 
    <plugins> 
        <plugin> 
            <groupId></groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.5</version>

            <!-- 在構(gòu)建生命周期中執(zhí)行一組目標(biāo)的配置抵乓。每個(gè)目標(biāo)可能有不同的配置。 --> 
            <executions>
                <execution>

                        <!-- 執(zhí)行目標(biāo)的標(biāo)識(shí)符靶衍,用于標(biāo)識(shí)構(gòu)建過(guò)程中的目標(biāo)灾炭,或者匹配繼承過(guò)程中需要合并的執(zhí)行目標(biāo) --> 
                    <id>assembly</id>

                    <!-- 綁定了目標(biāo)的構(gòu)建生命周期階段,如果省略颅眶,目標(biāo)會(huì)被綁定到源數(shù)據(jù)里配置的默認(rèn)階段 --> 
                    <phase>package</phase>

                    <!-- 配置的執(zhí)行目標(biāo) --> 
                    <goals>
                        <goal>single</goal>
                    </goals>

                    <!-- 配置是否被傳播到子POM --> 
                    <inherited>false</inherited> 

                </execution>
            </executions>

            <!-- 作為DOM對(duì)象的配置,配置項(xiàng)因插件而異 -->
            <configuration>
                <finalName>${finalName}</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptor>assembly.xml</descriptor>
            </configuration>

            <!-- 是否從該插件下載Maven擴(kuò)展(例如打包和類(lèi)型處理器)蜈出,
                由于性能原因,只有在真需要下載時(shí)涛酗,該元素才被設(shè)置成true铡原。 --> 
            <extensions>false</extensions> 

            <!-- 項(xiàng)目引入插件所需要的額外依賴(lài) --> 
            <dependencies> 
                <dependency>...</dependency> 
            </dependencies> 

            <!-- 任何配置是否被傳播到子項(xiàng)目 --> 
            <inherited>true</inherited>

        </plugin> 
    </plugins> 

    <!-- 主要定義插件的共同元素、擴(kuò)展元素集合商叹,類(lèi)似于dependencyManagement燕刻,
        所有繼承于此項(xiàng)目的子項(xiàng)目都能使用。該插件配置項(xiàng)直到被引用時(shí)才會(huì)被解析或綁定到生命周期剖笙。
        給定插件的任何本地配置都會(huì)覆蓋這里的配置 --> 
    <pluginManagement> 
        <plugins>...</plugins>
    </pluginManagement>

</build>

pom里面的倉(cāng)庫(kù)與settings.xml倉(cāng)庫(kù)功能一致卵洗,主要區(qū)別在于:pom倉(cāng)庫(kù)是個(gè)性化,比如說(shuō)大公司的setting文件是公用的弥咪,所有項(xiàng)目全部使用同一個(gè)settings文件过蹂,但是各自項(xiàng)目卻會(huì)引用不同的第三方庫(kù),所以就需要在pom設(shè)置自己需要的倉(cāng)庫(kù)地址聚至。

2.3 分發(fā)配置

<!-- 項(xiàng)目分發(fā)信息榴啸,在執(zhí)行mvn deploy后表示要發(fā)布的位置。
    有了這些信息就可以把網(wǎng)站部署到遠(yuǎn)程服務(wù)器或者把構(gòu)件部署到遠(yuǎn)程倉(cāng)庫(kù)晚岭。 --> 
<distributionManagement> 

    <!-- 部署項(xiàng)目產(chǎn)生的構(gòu)件到遠(yuǎn)程倉(cāng)庫(kù)需要的信息 --> 
    <repository> 

        <!-- 是分配給快照一個(gè)唯一的版本號(hào)(由時(shí)間戳和構(gòu)建流水號(hào))鸥印,還是每次都使用相同的版本號(hào)
            參見(jiàn)repositories/repository元素 --> 
        <uniqueVersion>true</uniqueVersion> 

        <id> repo-id </id> 
        <name> repo-name </name> 
        <url> file://${basedir}/target/deploy </url> 
        <layout /> 

    </repository> 

    <!-- 構(gòu)件的快照部署到哪里,如果沒(méi)有配置該元素勋功,默認(rèn)部署到repository元素配置的倉(cāng)庫(kù) --> 
    <snapshotRepository> 
        <uniqueVersion /> 
        <id />
        <name /> 
        <url /> 
        <layout /> 
    </snapshotRepository> 

    <!-- 部署項(xiàng)目的網(wǎng)站需要的信息 --> 
    <site> 

        <!-- 部署位置的唯一標(biāo)識(shí)符,用來(lái)匹配站點(diǎn)和settings.xml文件里的配置 --> 
        <id> site-id </id> 

        <!-- 部署位置的名稱(chēng) --> 
        <name> site-name </name> 

        <!-- 部署位置的URL库说,按protocol://hostname/path形式 --> 
        <url> scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web </url> 

    </site> 

    <!-- 項(xiàng)目下載頁(yè)面的URL狂鞋。如果沒(méi)有該元素,用戶(hù)應(yīng)該參考主頁(yè)潜的。
        使用該元素的原因是:幫助定位那些不在倉(cāng)庫(kù)里的構(gòu)件(由于license限制)骚揍。 --> 
    <downloadUrl /> 

    <!-- 如果構(gòu)件有了新的group ID和artifact ID(構(gòu)件移到了新的位置),這里列出構(gòu)件的重定位信息啰挪。 --> 
    <relocation> 

        <!-- 構(gòu)件新的group ID --> 
        <groupId /> 

        <!-- 構(gòu)件新的artifact ID --> 
        <artifactId /> 

        <!-- 構(gòu)件新的版本號(hào) --> 
        <version /> 

        <!-- 顯示給用戶(hù)的信不,關(guān)于移動(dòng)的額外信息,例如原因亡呵。 --> 
        <message /> 

    </relocation> 

    <!-- 給出該構(gòu)件在遠(yuǎn)程倉(cāng)庫(kù)的狀態(tài)抽活。不得在本地項(xiàng)目中設(shè)置該元素,因?yàn)檫@是工具自動(dòng)更新的锰什。有效的值有:none(默認(rèn))下硕,converted(倉(cāng)庫(kù)管理員從Maven 1 POM轉(zhuǎn)換過(guò)來(lái)),partner(直接從伙伴Maven 2倉(cāng)庫(kù)同步過(guò)來(lái))汁胆,deployed(從Maven 2實(shí)例部署)梭姓,verified(被核實(shí)時(shí)正確的和最終的)。 --> 
    <status /> 

</distributionManagement>

2.4 倉(cāng)庫(kù)配置

<!-- 發(fā)現(xiàn)依賴(lài)和擴(kuò)展的遠(yuǎn)程倉(cāng)庫(kù)列表嫩码。 --> 
<repositories> 

    <!-- 包含需要連接到遠(yuǎn)程倉(cāng)庫(kù)的信息 --> 
    <repository> 

        <!-- 如何處理遠(yuǎn)程倉(cāng)庫(kù)里發(fā)布版本的下載 --> 
        <releases> 

            <!-- true或者false表示該倉(cāng)庫(kù)是否為下載某種類(lèi)型構(gòu)件(發(fā)布版羔味,快照版)開(kāi)啟鱼蝉。 --> 
            <enabled /> 

            <!-- 該元素指定更新發(fā)生的頻率。Maven會(huì)比較本地POM和遠(yuǎn)程POM的時(shí)間戳。
                這里的選項(xiàng)是:always(一直)褥芒,daily(默認(rèn)侦锯,每日)镀娶,
                interval:X(這里X是以分鐘為單位的時(shí)間間隔)缨历,或者never(從不)。 --> 
            <updatePolicy /> 

            <!-- 當(dāng)Maven驗(yàn)證構(gòu)件校驗(yàn)文件失敗時(shí)該怎么做:
                ignore(忽略)千劈,fail(失敿栏铡),或者warn(警告)墙牌。 --> 
            <checksumPolicy /> 

        </releases> 

        <!-- 如何處理遠(yuǎn)程倉(cāng)庫(kù)里快照版本的下載涡驮。有了releases和snapshots這兩組配置,
            POM就可以在每個(gè)單獨(dú)的倉(cāng)庫(kù)中喜滨,為每種類(lèi)型的構(gòu)件采取不同的策略捉捅。
            例如,可能有人會(huì)決定只為開(kāi)發(fā)目的開(kāi)啟對(duì)快照版本下載的支持 --> 
        <snapshots> 
            <enabled /><updatePolicy /><checksumPolicy /> 
        </snapshots> 

        <!-- 遠(yuǎn)程倉(cāng)庫(kù)唯一標(biāo)識(shí)符虽风“艨冢可以用來(lái)匹配在settings.xml文件里配置的遠(yuǎn)程倉(cāng)庫(kù) --> 
        <id> repo-id </id> 

        <!-- 遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng) --> 
        <name> repo-name </name> 

        <!-- 遠(yuǎn)程倉(cāng)庫(kù)URL寄月,按protocol://hostname/path形式 --> 
        <url> http://192.168.1.169:9999/repository/ </url> 

        <!-- 用于定位和排序構(gòu)件的倉(cāng)庫(kù)布局類(lèi)型-可以是default(默認(rèn))或者legacy(遺留)。
            Maven 2為其倉(cāng)庫(kù)提供了一個(gè)默認(rèn)的布局无牵;
            然而漾肮,Maven 1.x有一種不同的布局。
            我們可以使用該元素指定布局是default(默認(rèn))還是legacy(遺留)茎毁。 --> 
        <layout> default </layout> 

    </repository> 

</repositories> 

<!-- 發(fā)現(xiàn)插件的遠(yuǎn)程倉(cāng)庫(kù)列表克懊,這些插件用于構(gòu)建和報(bào)表 --> 
<pluginRepositories> 

    <!-- 包含需要連接到遠(yuǎn)程插件倉(cāng)庫(kù)的信息.參見(jiàn)repositories/repository元素 --> 
    <pluginRepository /> 

</pluginRepositories>

2.5 報(bào)表配置

reporting元素描述使用報(bào)表插件產(chǎn)生報(bào)表的規(guī)范。當(dāng)用戶(hù)執(zhí)行“mvn site”七蜘,這些報(bào)表就會(huì)運(yùn)行谭溉。 在頁(yè)面導(dǎo)航欄能看到所有報(bào)表的鏈接。

<!-- 描述使用報(bào)表插件產(chǎn)生報(bào)表的規(guī)范,特定的maven 插件能輸出相應(yīng)的定制和配置報(bào)表.
當(dāng)用戶(hù)執(zhí)行“mvn site”橡卤,這些報(bào)表就會(huì)運(yùn)行,在頁(yè)面導(dǎo)航欄能看到所有報(bào)表的鏈接扮念。 --> 
<reporting> 

    <!-- true,則網(wǎng)站不包括默認(rèn)的報(bào)表蒜魄。這包括“項(xiàng)目信息”菜單中的報(bào)表扔亥。 --> 
    <excludeDefaults /> 

    <!-- 所有產(chǎn)生的報(bào)表存放到哪里场躯。默認(rèn)值是${project.build.directory}/site谈为。 --> 
    <outputDirectory /> 

    <!-- 使用的報(bào)表插件和他們的配置。 --> 
    <plugins> 

        <plugin> 
            <groupId /> 
            <artifactId />
            <version />
            <inherited />
            <configuration> 
                <links> 
                    <link>http://java.sun.com/j2se/1.5.0/docs/api/</link> 
                </links> 
            </configuration>
            <!-- 一組報(bào)表的多重規(guī)范踢关,每個(gè)規(guī)范可能有不同的配置伞鲫。
            一個(gè)規(guī)范(報(bào)表集)對(duì)應(yīng)一個(gè)執(zhí)行目標(biāo) 。例如签舞,有1秕脓,2,3儒搭,4吠架,5,6搂鲫,7傍药,8,9個(gè)報(bào)表魂仍。
            1拐辽,2,5構(gòu)成A報(bào)表集擦酌,對(duì)應(yīng)一個(gè)執(zhí)行目標(biāo)俱诸。2,5赊舶,8構(gòu)成B報(bào)表集睁搭,對(duì)應(yīng)另一個(gè)執(zhí)行目標(biāo) --> 
            <reportSets> 

                <!-- 表示報(bào)表的一個(gè)集合赶诊,以及產(chǎn)生該集合的配置 --> 
                <reportSet> 

                    <!-- 報(bào)表集合的唯一標(biāo)識(shí)符,POM繼承時(shí)用到 --> 
                    <id>sunlink</id> 

                    <!-- 產(chǎn)生報(bào)表集合時(shí)介袜,被使用的報(bào)表的配置 --> 
                    <configuration /> 

                    <!-- 配置是否被繼承到子POMs --> 
                    <inherited /> 

                    <!-- 這個(gè)集合里使用到哪些報(bào)表 --> 
                    <reports>
                        <report>javadoc</report>  
                    </reports>

                </reportSet> 

            </reportSets> 

        </plugin> 

    </plugins> 

</reporting>    

2.6 項(xiàng)目配置

<!-- 項(xiàng)目的問(wèn)題管理系統(tǒng)(Bugzilla, Jira, Scarab,或任何你喜歡的問(wèn)題管理系統(tǒng))的名稱(chēng)和URL甫何,本例為 jira --> 
<issueManagement> 

    <!-- 問(wèn)題管理系統(tǒng)(例如jira)的名字, --> 
    <system> jira </system> 

    <!-- 該項(xiàng)目使用的問(wèn)題管理系統(tǒng)的URL --> 
    <url> http://jira.clf.com/ </url> 

</issueManagement> 

<!-- 項(xiàng)目持續(xù)集成信息 --> 
<ciManagement> 

    <!-- 持續(xù)集成系統(tǒng)的名字遇伞,例如continuum --> 
    <system>continumm</system> 

    <!-- 該項(xiàng)目使用的持續(xù)集成系統(tǒng)的URL(如果持續(xù)集成系統(tǒng)有web接口的話(huà))辙喂。 --> 
    <url>http://127.0.0.1:8080/continuum</url>

    <!-- 構(gòu)建完成時(shí),需要通知的開(kāi)發(fā)者/用戶(hù)的配置項(xiàng)鸠珠。包括被通知者信息和通知條件(錯(cuò)誤巍耗,失敗,成功渐排,警告) --> 
    <notifiers> 

        <!-- 配置一種方式炬太,當(dāng)構(gòu)建中斷時(shí),以該方式通知用戶(hù)/開(kāi)發(fā)者 --> 
        <notifier> 

            <!-- 傳送通知的途徑 --> 
            <type /> 

            <!-- 發(fā)生錯(cuò)誤時(shí)是否通知 --> 
            <sendOnError /> 

            <!-- 構(gòu)建失敗時(shí)是否通知 --> 
            <sendOnFailure /> 

            <!-- 構(gòu)建成功時(shí)是否通知 --> 
            <sendOnSuccess /> 

            <!-- 發(fā)生警告時(shí)是否通知 --> 
            <sendOnWarning /> 

            <!-- 不贊成使用驯耻。通知發(fā)送到哪里 --> 
            <address /> 

            <!-- 擴(kuò)展配置項(xiàng) --> 
            <configuration /> 

        </notifier> 

    </notifiers> 

</ciManagement>

<!-- 項(xiàng)目的名稱(chēng), Maven產(chǎn)生的文檔用 --> 
<name> banseon-maven </name> 

<!-- 項(xiàng)目主頁(yè)的URL, Maven產(chǎn)生的文檔用 --> 
<url> http://www.clf.com/ </url> 

<!-- 項(xiàng)目的詳細(xì)描述, Maven 產(chǎn)生的文檔用亲族。 當(dāng)這個(gè)元素能夠用HTML格式描述時(shí)
    (例如,CDATA中的文本會(huì)被解析器忽略可缚,就可以包含HTML標(biāo)簽)霎迫,不鼓勵(lì)使用純文本描述。
    如果你需要修改產(chǎn)生的web站點(diǎn)的索引頁(yè)面帘靡,你應(yīng)該修改你自己的索引頁(yè)文件知给,而不是調(diào)整這里的文檔。 --> 
<description> A maven project to study maven. </description> 

<!-- 描述了這個(gè)項(xiàng)目構(gòu)建環(huán)境中的前提條件描姚。 --> 
<prerequisites> 

    <!-- 構(gòu)建該項(xiàng)目或使用該插件所需要的Maven的最低版本 --> 
    <maven /> 

</prerequisites> 

<!-- 項(xiàng)目創(chuàng)建年份涩赢,4位數(shù)字。當(dāng)產(chǎn)生版權(quán)信息時(shí)需要使用這個(gè)值轩勘。 --> 
<inceptionYear /> 

<!-- 項(xiàng)目相關(guān)郵件列表信息 --> 
<mailingLists> 

    <!-- 該元素描述了項(xiàng)目相關(guān)的所有郵件列表筒扒。自動(dòng)產(chǎn)生的網(wǎng)站引用這些信息。 --> 
    <mailingList> 

        <!-- 郵件的名稱(chēng) --> 
        <name> Demo </name> 

        <!-- 發(fā)送郵件的地址或鏈接绊寻,如果是郵件地址花墩,創(chuàng)建文檔時(shí),mailto: 鏈接會(huì)被自動(dòng)創(chuàng)建 --> 
        <post> clf@126.com </post> 

        <!-- 訂閱郵件的地址或鏈接榛斯,如果是郵件地址观游,創(chuàng)建文檔時(shí),mailto: 鏈接會(huì)被自動(dòng)創(chuàng)建 --> 
        <subscribe> clf@126.com </subscribe> 

        <!-- 取消訂閱郵件的地址或鏈接驮俗,如果是郵件地址懂缕,創(chuàng)建文檔時(shí),mailto: 鏈接會(huì)被自動(dòng)創(chuàng)建 --> 
        <unsubscribe> clf@126.com </unsubscribe> 

        <!-- 你可以瀏覽郵件信息的URL --> 
        <archive> http:/hi.clf.com/ </archive> 

    </mailingList> 

</mailingLists> 

<!-- 項(xiàng)目開(kāi)發(fā)者列表 --> 
<developers> 

    <!-- 某個(gè)項(xiàng)目開(kāi)發(fā)者的信息 --> 
    <developer> 

        <!-- SCM里項(xiàng)目開(kāi)發(fā)者的唯一標(biāo)識(shí)符 --> 
        <id> HELLO WORLD </id> 

        <!-- 項(xiàng)目開(kāi)發(fā)者的全名 --> 
        <name> banseon </name> 

        <!-- 項(xiàng)目開(kāi)發(fā)者的email --> 
        <email> banseon@126.com </email> 

        <!-- 項(xiàng)目開(kāi)發(fā)者的主頁(yè)的URL --> 
        <url /> 

        <!-- 項(xiàng)目開(kāi)發(fā)者在項(xiàng)目中扮演的角色王凑,角色元素描述了各種角色 --> 
        <roles> 
            <role> Project Manager </role> 
            <role> Architect </role> 
        </roles> 

        <!-- 項(xiàng)目開(kāi)發(fā)者所屬組織 --> 
        <organization> demo </organization> 

        <!-- 項(xiàng)目開(kāi)發(fā)者所屬組織的URL --> 
        <organizationUrl> http://hi.clf.com/ </organizationUrl> 

        <!-- 項(xiàng)目開(kāi)發(fā)者屬性搪柑,如即時(shí)消息如何處理等 --> 
        <properties> 
            <dept> No </dept> 
        </properties> 

        <!-- 項(xiàng)目開(kāi)發(fā)者所在時(shí)區(qū)聋丝, -11到12范圍內(nèi)的整數(shù)。 --> 
        <timezone> -5 </timezone> 

    </developer> 

</developers> 

<!-- 項(xiàng)目的其他貢獻(xiàn)者列表 --> 
<contributors> 

    <!-- 項(xiàng)目的其他貢獻(xiàn)者工碾。參見(jiàn)developers/developer元素 --> 
    <contributor> 
        <name /><email /><url /><organization /><organizationUrl />
        <roles /><timezone /><properties /> 
    </contributor> 

</contributors> 

<!-- 該元素描述了項(xiàng)目所有License列表弱睦。應(yīng)該只列出該項(xiàng)目的license列表,不要列出依賴(lài)項(xiàng)目的license列表渊额。
    如果列出多個(gè)license况木,用戶(hù)可以選擇它們中的一個(gè)而不是接受所有l(wèi)icense。 --> 
<licenses> 

    <!-- 描述了項(xiàng)目的license旬迹,用于生成項(xiàng)目的web站點(diǎn)的license頁(yè)面火惊,其他一些報(bào)表和validation也會(huì)用到該元素。 --> 
    <license> 

        <!-- license用于法律上的名稱(chēng) --> 
        <name> Apache 2 </name> 

        <!-- 官方的license正文頁(yè)面的URL --> 
        <url> http://www.clf.com/LICENSE-2.0.txt </url> 

        <!-- 項(xiàng)目分發(fā)的主要方式: 
        repo奔垦,可以從Maven庫(kù)下載 
        manual屹耐, 用戶(hù)必須手動(dòng)下載和安裝依賴(lài) --> 
        <distribution> repo </distribution> 

        <!-- 關(guān)于license的補(bǔ)充信息 --> 
        <comments> A business-friendly OSS license </comments> 

    </license> 

</licenses> 

<!-- SCM(Source Control Management)標(biāo)簽允許你配置你的代碼庫(kù),供Maven web站點(diǎn)和其它插件使用椿猎。 --> 
<scm> 

    <!-- SCM的URL,該URL描述了版本庫(kù)和如何連接到版本庫(kù)惶岭。欲知詳情,請(qǐng)看SCMs提供的URL格式和列表犯眠。該連接只讀按灶。 --> 
    <connection>scm:svn:http://svn.baidu.com/banseon/maven/</connection> 

    <!-- 給開(kāi)發(fā)者使用的,類(lèi)似connection元素阔逼。即該連接不僅僅只讀 --> 
    <developerConnection>scm:svn:http://svn.baidu.com/banseon/maven/</developerConnection> 

    <!-- 當(dāng)前代碼的標(biāo)簽兆衅,在開(kāi)發(fā)階段默認(rèn)為HEAD --> 
    <tag /> 

    <!-- 指向項(xiàng)目的可瀏覽SCM庫(kù)(例如ViewVC或者Fisheye)的URL地沮。 --> 
    <url> http://svn.baidu.com/banseon </url> 

</scm> 

<!-- 描述項(xiàng)目所屬組織的各種屬性嗜浮。Maven產(chǎn)生的文檔用 --> 
<organization> 

    <!-- 組織的全名 --> 
    <name> demo </name> 

    <!-- 組織主頁(yè)的URL --> 
    <url> http://www.clf.com/ </url> 

</organization>

2.7 profile

pom.xml中的profile可以看做pom.xml的副本,擁有與pom.xml相同的子元素與配置方法摩疑。它包含可選的activation(profile的觸發(fā)器)和一系列的changes危融。例如test過(guò)程可能會(huì)指向不同的數(shù)據(jù)庫(kù)(相對(duì)最終的deployment)或者不同的dependencies或者不同的repositories,并且是根據(jù)不同的JDK來(lái)改變的雷袋。只需要其中一個(gè)成立就可以激活profile吉殃,如果第一個(gè)條件滿(mǎn)足了,那么后面就不會(huì)在進(jìn)行匹配楷怒。

<!-- 在列的項(xiàng)目構(gòu)建profile蛋勺,如果被激活,會(huì)修改構(gòu)建處理 --> 
<profiles> 

    <!-- 根據(jù)環(huán)境參數(shù)或命令行參數(shù)激活某個(gè)構(gòu)建處理 --> 
    <profile> 
        <!--自動(dòng)觸發(fā)profile的條件邏輯鸠删。Activation是profile的開(kāi)啟鑰匙抱完。-->
        <activation>

             <!--profile默認(rèn)是否激活的標(biāo)識(shí) -->
            <activeByDefault>false</activeByDefault>

             <!--activation有一個(gè)內(nèi)建的java版本檢測(cè),如果檢測(cè)到j(luò)dk版本與期待的一樣刃泡,profile被激活巧娱。 -->
            <jdk>1.7</jdk>

             <!--當(dāng)匹配的操作系統(tǒng)屬性被檢測(cè)到碉怔,profile被激活。os元素可以定義一些操作系統(tǒng)相關(guān)的屬性禁添。 -->
            <os>

                 <!--激活profile的操作系統(tǒng)的名字  -->
                <name>Windows XP</name>

                 <!--激活profile的操作系統(tǒng)所屬家族(如 'windows')   -->
                <family>Windows</family>

                 <!--激活profile的操作系統(tǒng)體系結(jié)構(gòu)   -->
                <arch>x86</arch>

                 <!--激活profile的操作系統(tǒng)版本 -->
                <version>5.1.2600</version>

            </os>

             <!--如果Maven檢測(cè)到某一個(gè)屬性(其值可以在POM中通過(guò)${名稱(chēng)}引用)撮胧,其擁有對(duì)應(yīng)的名稱(chēng)和值,Profile就會(huì)被激活老翘。
                如果值字段是空的芹啥,那么存在屬性名稱(chēng)字段就會(huì)激活profile,否則按區(qū)分大小寫(xiě)方式匹配屬性值字段 -->
            <property>

                 <!--激活profile的屬性的名稱(chēng) -->
                <name>mavenVersion</name>

                 <!--激活profile的屬性的值  -->
                <value>2.0.3</value>

            </property>

             <!--提供一個(gè)文件名铺峭,通過(guò)檢測(cè)該文件的存在或不存在來(lái)激活profile叁征。missing檢查文件是否存在,如果不存在則激活profile逛薇。
                另一方面捺疼,exists則會(huì)檢查文件是否存在,如果存在則激活profile永罚。 -->
            <file>

                 <!--如果指定的文件存在啤呼,則激活profile。  -->
                <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists>

                 <!--如果指定的文件不存在呢袱,則激活profile官扣。 -->
                <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing>

            </file>

        </activation>
        <id /> 
        <build />
        <modules /> 
        <repositories /> 
        <pluginRepositories /> 
        <dependencies /> 
        <reporting /> 
        <dependencyManagement /> 
        <distributionManagement /> 
        <properties /> 
    </profile>
</profiles>

profile可以讓maven能夠自動(dòng)適應(yīng)外部的環(huán)境變化,比如同一個(gè)項(xiàng)目羞福,在linux下編譯linux的版本惕蹄,在win下編譯win的版本等。一個(gè)項(xiàng)目可以設(shè)置多個(gè)profile治专,也可以在同一時(shí)間設(shè)置多個(gè)profile被激活(active)的卖陵。自動(dòng)激活的 profile的條件可以是各種各樣的設(shè)定條件,組合放置在activation節(jié)點(diǎn)中张峰,也可以通過(guò)命令行直接指定泪蔫。如果認(rèn)為profile設(shè)置比較復(fù)雜,可以將所有的profiles內(nèi)容移動(dòng)到專(zhuān)門(mén)的 profiles.xml 文件中喘批,不過(guò)記得和pom.xml放在一起撩荣。

activation節(jié)點(diǎn)是設(shè)置該profile在什么條件下會(huì)被激活,常見(jiàn)的條件有如下幾個(gè).

2.7.1 os

判斷操作系統(tǒng)相關(guān)的參數(shù)饶深,它包含如下可以自由組合的子節(jié)點(diǎn)元素

message - 規(guī)則失敗之后顯示的消息
arch - 匹配cpu結(jié)構(gòu)餐曹,常見(jiàn)為x86
family - 匹配操作系統(tǒng)家族,常見(jiàn)的取值為:dos敌厘,mac台猴,netware,os/2,unix卿吐,windows旁舰,win9x,os/400等
name - 匹配操作系統(tǒng)的名字
version - 匹配的操作系統(tǒng)版本號(hào)
display - 檢測(cè)到操作系統(tǒng)之后顯示的信息

2.7.2 jdk

檢查jdk版本嗡官,可以用區(qū)間表示箭窜。

2.7.3 property

檢查屬性值,本節(jié)點(diǎn)可以包含name和value兩個(gè)子節(jié)點(diǎn)衍腥。

2.7.4 file

檢查文件相關(guān)內(nèi)容磺樱,包含兩個(gè)子節(jié)點(diǎn):exists和missing,用于分別檢查文件存在和不存在兩種情況婆咸。

如果想要某個(gè)profile默認(rèn)處于激活狀態(tài)竹捉,可以在<activeProfiles>中將該profile的id放進(jìn)去。這樣尚骄,不論環(huán)境設(shè)置如何块差,其對(duì)應(yīng)的 profile都會(huì)被激活。

profile配置項(xiàng)在setting.xml中頁(yè)有倔丈,是pom.xml中profile元素的裁剪版本憨闰,包含了id,activation, repositories, pluginRepositories和 properties元素需五。這里的profile元素只包含這五個(gè)子元素是因?yàn)閟etting.xml只關(guān)心構(gòu)建系統(tǒng)這個(gè)整體(這正是settings.xml文件的角色定位)鹉动,而非單獨(dú)的項(xiàng)目對(duì)象模型設(shè)置。如果一個(gè)settings中的profile被激活宏邮,它的值會(huì)覆蓋任何其它定義在POM中或者profile.xml中的帶有相同id的profile泽示。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜜氨,隨后出現(xiàn)的幾起案子械筛,更是在濱河造成了極大的恐慌,老刑警劉巖记劝,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件变姨,死亡現(xiàn)場(chǎng)離奇詭異族扰,居然都是意外死亡厌丑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)渔呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怒竿,“玉大人,你說(shuō)我怎么就攤上這事扩氢「郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵录豺,是天一觀的道長(zhǎng)朦肘。 經(jīng)常有香客問(wèn)我饭弓,道長(zhǎng),這世上最難降的妖魔是什么媒抠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任弟断,我火速辦了婚禮,結(jié)果婚禮上趴生,老公的妹妹穿的比我還像新娘阀趴。我一直安慰自己,他們只是感情好苍匆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布刘急。 她就那樣靜靜地躺著,像睡著了一般浸踩。 火紅的嫁衣襯著肌膚如雪叔汁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天检碗,我揣著相機(jī)與錄音攻柠,去河邊找鬼。 笑死后裸,一個(gè)胖子當(dāng)著我的面吹牛瑰钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播微驶,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浪谴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了因苹?” 一聲冷哼從身側(cè)響起苟耻,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扶檐,沒(méi)想到半個(gè)月后凶杖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡款筑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年智蝠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奈梳。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杈湾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攘须,到底是詐尸還是另有隱情漆撞,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站浮驳,受9級(jí)特大地震影響悍汛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜至会,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一员凝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奋献,春花似錦健霹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窃这,卻和暖如春瞳别,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杭攻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工祟敛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兆解。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓馆铁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锅睛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子埠巨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容