慕課網(wǎng) 項(xiàng)目管理利器 maven 學(xué)習(xí)記錄

1. Maven定義

Maven 是基于項(xiàng)目對(duì)象模型(POM)茂洒,可以通過(guò)一小段描述信息來(lái)管理構(gòu)建意敛、報(bào)告和文檔的軟件項(xiàng)目管理工具呐能。

2.Maven下載和環(huán)境變量配置

Maven 官網(wǎng): http://maven.apache.org/
官網(wǎng)下載: apache-maven-3.5.2-bin.zip
解壓這個(gè)文件到某一個(gè)目錄下往堡,配置環(huán)境變變量
D:\dev\install\apache-maven-3.5.2\bin
M2_HOME : D:\dev\install\apache-maven-3.5.2
%M2_HOME%\bin

cmd窗口
mvn -v 命令檢查環(huán)境變量配置

image.png

3.Maven 約定的基本目錄結(jié)構(gòu)

src/mian/java/package
src/test/java/package
src/resources
pom.xml

4. Maven常用的構(gòu)建命令

mvn -v 查看maven版本
mvn compile 編譯
mvn test 測(cè)試
mvn package 打包
mvn clean 刪除target
mvn install 把當(dāng)前項(xiàng)目生成的jar包安裝到本地倉(cāng)庫(kù)坝疼,這樣另外一個(gè)項(xiàng)目就可以依賴(lài)這個(gè)項(xiàng)目生成的jar包乙埃,只要把這個(gè)項(xiàng)目的pom.xml中的坐標(biāo)添加到另外一個(gè)項(xiàng)目的pom.xml中闸英。

PS:maven依賴(lài)坐標(biāo)查找jar的過(guò)程 maven -> 本地倉(cāng)庫(kù) -> 中央倉(cāng)庫(kù)

5. 自動(dòng)創(chuàng)建目錄骨架

archetype插件用于創(chuàng)建符合maven規(guī)定的目錄骨架
方式一:在某一個(gè)目錄下運(yùn)行該命令:mvn archetype:generate 根據(jù)提示輸入項(xiàng)目坐標(biāo)即可創(chuàng)建好項(xiàng)目的目錄結(jié)構(gòu)
方式二:

     mvn archetype:generate
          -DfroupId=組織名,公司網(wǎng)址的反寫(xiě)+項(xiàng)目名稱(chēng)
          -DartifactId=項(xiàng)目名-模塊名
          -Dversion= 版本號(hào)
          -Dpackage=代碼所存在的包名

6. maven中的坐標(biāo)和倉(cāng)庫(kù)

倉(cāng)庫(kù) 本地倉(cāng)庫(kù) 和 遠(yuǎn)程倉(cāng)庫(kù)
mavne默認(rèn)配置的中央倉(cāng)庫(kù)地址
"D:\dev\install\apache-maven-3.5.2\lib\maven-model-builder-3.5.2.jar"

默認(rèn)中央倉(cāng)庫(kù)配置

打開(kāi)pom-4.0.0.xml可以

<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

修改maven中央倉(cāng)庫(kù)地址

maven setting
<mirrors>
   <mirror>
     <id>maven.net.cn</id>
     <mirrorOf>central</mirrorOf>
     <name>central mirror in china</name>
     <url>http://maven.net.cn/content/groups/public</url>
   </mirror>
 </mirrors>

修改maven本地倉(cāng)庫(kù)路徑 (在setting.xml文件中修改)
<localRepository>D:/data/repository</localRepository>
可以把setting.xml文件拷貝到該文件夾下介袜,下次升級(jí)maven就不需要修改setting.xml

7. Maven的生命周期和插件

完整的項(xiàng)目構(gòu)建包括:
清理甫何、編譯、測(cè)試遇伞、打包辙喂、集成測(cè)試、驗(yàn)證、部署

Maven生命周期

  • (1.0)clean 清理項(xiàng)目
    pre-clean 執(zhí)行清理前的工作
    clean 清理上一次構(gòu)建生成的所有文件
    post-clean 執(zhí)行清理后的文件
  • (2.0) default 構(gòu)建項(xiàng)目(最核心)
    compile /test /package /install
  • (3.0) 生成項(xiàng)目站點(diǎn)
    pre-site 在生成項(xiàng)目站點(diǎn)前要完成的工作
    site 生成項(xiàng)目的站點(diǎn)文檔
    post-site 在生成項(xiàng)目站點(diǎn)后要完成的工作
    site-deploy 發(fā)布生成的站點(diǎn)到服務(wù)器上

ps: 生命周期的各個(gè)階段是獨(dú)立的巍耗,但是在每個(gè)階段的子階段中 執(zhí)行后面子階段的命令秋麸,前面的子階段命令也會(huì)執(zhí)行。

Maven插件的使用
maven插件列表: http://maven.apache.org/plugins/index.html

source插件的使用


image.png
 <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
              <execution>
                      <phase>package</phase>
                      <goals>
                          <goal>jar-no-fork</goal>
                      </goals>
              </execution>
       </executions>
        <configuration>
          <outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
          <finalName>filename-of-generated-jar-file</finalName>
          <attach>false</attach>
        </configuration>
      </plugin>
    </plugins>

8. pom.xml解析

<modelVersion> 指定當(dāng)前pom的版本
<groupId> 反寫(xiě)的公司網(wǎng)址 + 項(xiàng)目名
<artifactId>項(xiàng)目名 + 模塊名
<version> 當(dāng)前項(xiàng)目版本號(hào)
<packaging> 默認(rèn)是jar包炬太,可以指定為war等
<name> 項(xiàng)目描述名
<url> 項(xiàng)目地址
<description> 項(xiàng)目描述
<developers> 開(kāi)發(fā)人員
<licenses> 許可證
<organization> 組織

    <dependencies>
        <dependency>
            <groupId>
            <artifactid>
            <version>
            <type>
            <scope> 依賴(lài)的范圍,默認(rèn)值 compile
            <optional> true/false 設(shè)置依賴(lài)是否可選灸蟆, 默認(rèn)是false, 子項(xiàng)目可以繼承該依賴(lài),如果是true,子項(xiàng)目就要顯示聲明該依賴(lài)亲族。 
          <exclusions>
                <exclusion>  排除依賴(lài)傳遞列表

依賴(lài)管理炒考, 主要定義在父模塊中,供子模塊繼承霎迫,在當(dāng)前項(xiàng)目中不會(huì)運(yùn)行

 <dependencyManagement>
      <dependencies>
          <dependency>

插件配置
···xml
<build>
<plugins>
<plugin>
<groupId>
<artifactId>
<version>


····xml
  <parent></parent>
 <

PS:
版本說(shuō)明 snapshot 快照; alpha 內(nèi)部測(cè)試; beta 公測(cè)版本; Release 穩(wěn)定版本斋枢; GA 正式發(fā)布

9. 依賴(lài)范圍

maven 提供了三種的classpath: 編譯、測(cè)試女气、運(yùn)行
<scope> 用來(lái)控制依賴(lài)和三種classpath的關(guān)系
scope的值:
默認(rèn)是compile 編譯杏慰、測(cè)試测柠、運(yùn)行都有效炼鞠;
provided: 在編譯和測(cè)試時(shí)有效;
runtime: 在測(cè)試和運(yùn)行時(shí)有效轰胁;
test: 在測(cè)試時(shí)有效谒主;
system: 在編譯和測(cè)試時(shí)有效,但與本機(jī)系統(tǒng)相關(guān)聯(lián),可移植行差赃阀;
import: 導(dǎo)入的范圍霎肯,它只使用在dependencyManagement中,表示從其他的pom中導(dǎo)入dependency的配置榛斯;

10. 依賴(lài)傳遞

依賴(lài)傳遞和排除依賴(lài)傳遞

11. 修改JDK的版本(在settings.xml中增加如下配置)

<profile>
      <id>jdk-1.8</id>
      
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>

      <repositories>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compolerVersion>
      </repositories>
    </profile>

12. 依賴(lài)沖突(指的是版本沖突)

規(guī)則一: 短路優(yōu)先
A -> B -> C -> X(v1)
A-> D -> X(v2)
規(guī)則二:在路徑長(zhǎng)度相同時(shí)观游,誰(shuí)先聲明,先解析誰(shuí)驮俗。
A -> B -> X(v1)
A-> D -> X(v2)
此時(shí)在A的pom中把B聲明在D之前懂缕,則引用X(v1)

13. 聚合和繼承

聚合
假如 對(duì) 多個(gè)項(xiàng)目執(zhí)行install命令,可以新建一個(gè)項(xiàng)目王凑,按照如下圖配置

maven 聚合

繼承
假如多個(gè)項(xiàng)目中有相同的依賴(lài)搪柑,可以新建一個(gè)項(xiàng)目,按照如下圖配置
image.png

通過(guò)<parent>引用父pom索烹, 同時(shí)Junit不用指定版本和范圍工碾。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市百姓,隨后出現(xiàn)的幾起案子渊额,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旬迹,死亡現(xiàn)場(chǎng)離奇詭異焦读,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)舱权,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)矗晃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宴倍,你說(shuō)我怎么就攤上這事张症。” “怎么了鸵贬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵俗他,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阔逼,道長(zhǎng)兆衅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任嗜浮,我火速辦了婚禮羡亩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘危融。我一直安慰自己畏铆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布吉殃。 她就那樣靜靜地躺著辞居,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛋勺。 梳的紋絲不亂的頭發(fā)上瓦灶,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音抱完,去河邊找鬼贼陶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乾蛤,可吹牛的內(nèi)容都是我干的每界。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼家卖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眨层!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起上荡,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤趴樱,失蹤者是張志新(化名)和其女友劉穎馒闷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叁征,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纳账,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捺疼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疏虫。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啤呼,靈堂內(nèi)的尸體忽然破棺而出卧秘,到底是詐尸還是另有隱情,我是刑警寧澤官扣,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布翅敌,位于F島的核電站,受9級(jí)特大地震影響惕蹄,放射性物質(zhì)發(fā)生泄漏蚯涮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一卖陵、第九天 我趴在偏房一處隱蔽的房頂上張望遭顶。 院中可真熱鬧,春花似錦赶促、人聲如沸液肌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谤祖,卻和暖如春婿滓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粥喜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工凸主, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人额湘。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓卿吐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锋华。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗡官,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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