POM文件

  • 解決依賴沖突
  • 引用變量的三種情況(maven命令)
  • 多環(huán)境屬性過濾
  • 各種依賴(POM文件詳解)

解決maven傳遞依賴中的版本沖突

傳遞依賴是maven最有特色的、最為方便的優(yōu)點(diǎn)之一而线,可以省了很多配置锋华。如a 依賴 b,b 依賴c 默認(rèn) a也會依賴 c嗡官。但是 也會帶來隱患,如版本沖突毯焕。當(dāng)然maven也考慮到解決辦法衍腥,可以使用exclusions來排除相應(yīng)的重復(fù)依賴。

但是我們還會遇到一個嚴(yán)重的問題纳猫,那就是婆咸,我怎么知道是哪個包的傳遞依賴產(chǎn)生的沖突 ?那該怎么辦呢芜辕?當(dāng)然尚骄,maven也會有相應(yīng)的解決方案。

首先物遇,你要在pom.xml中加上maven-project-info-reports-plugin插件。

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>
maven-project-info-reports-plugin
</artifactId>
</plugin>
</reporting>

然后再執(zhí)行:mvn project-info-reports:dependencies 憾儒。生成項(xiàng)目依賴的報表询兴,這樣你就能夠在報表中找出你版本沖突的相關(guān)性依賴了。

最后在相應(yīng)的dependency中加上exclusions來排除相關(guān)的傳遞依賴起趾。

例:

          <dependency>
                    <groupId>jaxen</groupId>
                    <artifactId>jaxen</artifactId>
                    <version>1.1.1</version>
                    <exclusions>
                            <exclusion>
                                    <groupId>com.ibm.icu</groupId>
                                    <artifactId>icu4j</artifactId>
                            </exclusion>
                    </exclusions>
                    <scope>runtime</scope>
            </dependency>

----------------------------------------------------------

maven中內(nèi)置隱式變量的使用:

1诗舰、引用pom.xml的project下的標(biāo)簽元素

引用pom.xml的project根標(biāo)簽下的自標(biāo)簽
例如:${project.groupId}
      ${project.artifactId}
使用maven命令查看pom.xml的完整信息
1.${project.build.directory} 構(gòu)建目錄,缺省為target

2.${project.build.outputDirectory} 構(gòu)建過程輸出目錄训裆,缺省為target/classes

3.${project.build.finalName} 產(chǎn)出物名稱眶根,缺省為
   ${project.artifactId}-${project.version}

4.${project.packaging} 打包類型蜀铲,缺省為jar

5.${project.xxx} 當(dāng)前pom文件的任意節(jié)點(diǎn)的內(nèi)容

6.${basedir} 項(xiàng)目根目錄

maven命令

2、引用maven的settings.xml中的元素

(默認(rèn)settings.xml的路徑:~/.m2/settings.xml)

使用方式:
${settings.offline}會引用~/.m2/settings.xml文件中offline元素的值属百。

3记劝、引用系統(tǒng)環(huán)境變量的屬性

使用方式:${env.PATH}——會被操作系統(tǒng)中的環(huán)境變量替換

----------------------------------------------------------

profile和filtering實(shí)現(xiàn)多個環(huán)境下的屬性過濾

1、配置文件:“test.properties”族扰,里面隨便來上一行厌丑,例如Hello ${user.name}
 2、<build>  
        <!--第一種方式渔呵,兩種方式都需要指定需要編譯的目錄 -->  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
                <!--可以在此配置過濾文件  -->  
                <includes>  
                    <include>**/*.xsd</include>  
                    <include>**/*.properties</include>  
                </includes>  
                <!--開啟filtering功能  -->  
                <filtering>true</filtering>  
            </resource>  
        </resources> 
  <build>
3怒竿、編譯我們的maven項(xiàng)目
 $mvn clean compile -Duser.name=tom

查看輸出文件 target/classes/test.properties 的內(nèi)容,可見原先的 
“Hello {user.name}” 已經(jīng)變成 “Hello Tom”扩氢。
   <build>  
        <!--第二種方式耕驰,兩種方式都需要指定需要編譯的目錄 -->  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
                <!--可以在此配置過濾文件 -->  
                <includes>  
                    <include>**/*.xsd</include>  
                    <include>**/*.properties</include>  
                </includes>  
                <!--開啟filtering功能 -->  
                <filtering>true</filtering>  
            </resource>  
        </resources>  
  
        <filters>  
            <!-- 是以該pom文件路徑作為參考 -->  
            <filter>project.properties</filter>  
        </filters> 
  <build>
profile功能:允許在項(xiàng)目文件(pom.xml)里面定義若干個profile段,然后在編譯時選擇
            其中的一個用于覆蓋項(xiàng)目文件原先的定義录豺。
  <build>  
        <!--第一種方式朦肘,兩種方式都需要指定需要編譯的目錄 -->  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
                <!--可以在此配置過濾文件 -->  
                <includes>  
                    <include>**/*.xsd</include>  
                    <include>**/*.properties</include>  
                </includes>  
                <!--開啟filtering功能 -->  
                <filtering>true</filtering>  
            </resource>  
        </resources>  
  
        <profiles>  
            <profile>  
                <id>dev</id>  
                <activation>  
                <!--默認(rèn)的編譯選項(xiàng)  -->  
                    <activeByDefault>true</activeByDefault>  
                </activation>  
                <build>  
                    <filters>  
                        <filter>pre.properties</filter>  
                    </filters>  
                </build>  
            </profile>  
  
            <profile>  
                <id>pre</id>  
                <build>  
                    <filters>  
                        <filter>dev.properties</filter>  
                    </filters>  
                </build>  
            </profile>  
        </profiles>  
  
  
        <plugins>  
            <plugin>  
                <artifactId>maven-war-plugin</artifactId>  
                <configuration>  
                    <version>2.5</version>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>

在編譯項(xiàng)目時,可以使用 -P 參數(shù)指定需要使用的 profile 的 id巩检,比如下面命令將會使用 
dev profile:$mvn clean compile -P dev

如果想使用pre厚骗,只需要改為以下即可
$mvn clean compile -Ppre

假如不指定 -P 參數(shù)的話,則會使用 activeByDefault=true 的一項(xiàng)(即 pre)兢哭。

----------------------------------------------------------

<modelVersion>4.0.0</modelVersion>
<!-- 模型版本领舰。maven2.0必須是這樣寫,現(xiàn)在是maven2唯一支持的版本 -->
<groupId>com.ali.aa</groupId>
<!-- 公司或者組織的唯一標(biāo)志迟螺,并且配置時生成的路徑也是由此生成冲秽, 如com.ali.aa,
     maven會將該項(xiàng)目打成的jar包放本地路徑:/com/ali/aa --> 
<artifactId>core</artifactId>
<!-- 本項(xiàng)目的唯一ID矩父,一個groupId下面可能多個項(xiàng)目锉桑,就是靠artifactId來區(qū)分的 --> 
<version>1.0.0-SNAPSHOT</version>
<!-- 本項(xiàng)目目前所處的版本號 --> 
<packaging>jar</packaging>
<!-- 打包的機(jī)制,如pom,jar, maven-plugin, ejb, war, ear, rar, par窍株,
     默認(rèn)為jar -->

POM文件詳解


<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.3</version>
</dependency>

java_Date與 Joda Time


commons類庫詳解

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>${commons-io.version}</version>
</dependency>

Commons io--IOUtils
Commons之Commons-io


<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>${commons-lang3.version}</version>
</dependency>

commons-lang3方法應(yīng)用
commons-lang3工具類的學(xué)習(xí)


<dependency>  
   <groupId>org.apache.httpcomponents</groupId>  
   <artifactId>httpclient</artifactId>  
   <version>4.5.2</version>  
</dependency> 

httpcomponents介紹和使用
學(xué)習(xí)筆記1
學(xué)習(xí)筆記2
httpcomponents之httpclient發(fā)送http請求


<dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>${httpclient.version}</version>
      <exclusions>
        <exclusion>
            <artifactId>commons-codec</artifactId>
            <groupId>commons-codec</groupId>
        </exclusion>
       </exclusions>
  </dependency>

commons codec基本使用
使用Commons codec 加密
Commons codec使用介紹


<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>${commons-collections.version}</version>
</dependency>

集合工具類的使用
commons-collections之Map

----------------------------------------------------------

build部分

lifecycle:生命周期民轴,這是maven最高級別的的控制單元,它是一系列的phase組成球订,也就
是說后裸,一個生命周期,就是一個大任務(wù)的總稱冒滩,不管它里面分成多少個子任務(wù)微驶,反正就是運(yùn)
行一個lifecycle,就是交待了一個任務(wù),運(yùn)行完后因苹,就得到了一個結(jié)果苟耻,中間的過程,是
phase完成的扶檐,自己可以定義自己的lifecycle凶杖,包含自己想要的phase

phase:可以理解為任務(wù)單元,lifecycle是總?cè)蝿?wù)蘸秘,phase就是總?cè)蝿?wù)分出來的一個個子任
務(wù)官卡,但是這些子任務(wù)是被規(guī)格化的,它可以同時被多個lifecycle所包含醋虏,一個lifecycle可
以包含任意個phase寻咒,phase的執(zhí)行是按順序的,一個phase可以綁定很多個goal颈嚼,至少為一
個毛秘,沒有g(shù)oal的phase是沒有意義的

goal: 這是執(zhí)行任務(wù)的最小單元,它可以綁定到任意個phase中阻课,一個phase有一個或多個
goal叫挟,goal也是按順序執(zhí)行的,一個phase被執(zhí)行時限煞,綁定到phase里的goal會按綁定的時
間被順序執(zhí)行抹恳,不管phase己經(jīng)綁定了多少個goal,你自己定義的goal都可以繼續(xù)綁到
phase中署驻。 

官方文檔:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.
html
http://maven.apache.org/ref/3.3.9/maven-core/lifecycles.html

mojo: lifecycle與phase與goal都是概念上的東西奋献,mojo才是做具體事情的,可以簡單理
解mojo為goal的實(shí)現(xiàn)類旺上,它繼承于AbstractMojo瓶蚂,有一個execute方法,goal等的定義都
是通過在mojo里定義一些注釋的anotation來實(shí)現(xiàn)的宣吱,maven會在打包時窃这,自動根據(jù)這些
anotation生成一些xml文件,放在plugin的jar包里

詳情

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末征候,一起剝皮案震驚了整個濱河市杭攻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疤坝,老刑警劉巖兆解,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卒煞,居然都是意外死亡痪宰,警方通過查閱死者的電腦和手機(jī)叼架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門畔裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衣撬,“玉大人,你說我怎么就攤上這事扮饶【吡罚” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵甜无,是天一觀的道長扛点。 經(jīng)常有香客問我,道長岂丘,這世上最難降的妖魔是什么陵究? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮奥帘,結(jié)果婚禮上铜邮,老公的妹妹穿的比我還像新娘。我一直安慰自己寨蹋,他們只是感情好松蒜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著已旧,像睡著了一般秸苗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上运褪,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天惊楼,我揣著相機(jī)與錄音,去河邊找鬼吐句。 笑死胁后,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗦枢。 我是一名探鬼主播攀芯,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼文虏!你這毒婦竟也來了侣诺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氧秘,失蹤者是張志新(化名)和其女友劉穎年鸳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丸相,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搔确,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膳算。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡座硕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涕蜂,到底是詐尸還是另有隱情华匾,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布机隙,位于F島的核電站蜘拉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏有鹿。R本人自食惡果不足惜旭旭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葱跋。 院中可真熱鬧您机,春花似錦、人聲如沸年局。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矢否。三九已至仲闽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵朗,已是汗流浹背赖欣。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留验庙,地道東北人顶吮。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像粪薛,于是被迫代替她去往敵國和親悴了。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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

  • 簡介 概述 Maven 是一個項(xiàng)目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,307評論 6 39
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理违寿,服務(wù)發(fā)現(xiàn)湃交,斷路器,智...
    卡卡羅2017閱讀 134,704評論 18 139
  • Maven命令: Maven不單止可以在Eclipse上使用藤巢,也可以在cmd中使用命令的方式操作搞莺,雖然這樣十分麻煩...
    凱哥學(xué)堂閱讀 497評論 0 0
  • 0才沧、POM文件進(jìn)階 pom文件可以繼承迈喉,以達(dá)到高效復(fù)用 maven官方制定的superpom 所有的pom都會繼承...
    拾壹北閱讀 711評論 0 2
  • 《 白鹿原》是我大學(xué)就非常喜歡的小說,前一段時間的電視劇被停播了温圆,最近又復(fù)播弊添,著實(shí)讓我又一次回顧了這部經(jīng)典的...
    家多寶TL閱讀 225評論 0 0