Maven入門

Maven入門

mvn的常用指令

  • mvn -v:查看maven版本
  • mvn -compile:編譯
  • mvn -test:測試
  • mvn- package:打包
  • mvn -clean:刪除target目錄
  • mvn -install:安裝jar包到本地倉庫中。

當(dāng)項(xiàng)目缺乏依賴時(shí)攒巍,需要將jar包添加到本地倉庫中嗽仪,或者從網(wǎng)上下載后添加到本地倉庫中。比如我們要開發(fā)SpringBoot應(yīng)用柒莉,就需要添加如下依賴闻坚。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

groupId是項(xiàng)目組織名,artifactId是項(xiàng)目名兢孝。groupId一般的格式是域.公司窿凤,比如com.tencent,如果它有項(xiàng)目名為qq跨蟹,那么包名一般就是com.tencent.qq卷玉。

自動(dòng)化創(chuàng)建項(xiàng)目的目錄骨架

創(chuàng)建目錄可以使用下面的命令

1. mvn archetype:generate 按照提示進(jìn)行選擇
 
2. mvn archetype:generate -DgroupId=組織名
                          -DartifactId=項(xiàng)目名-模塊名
                          -Dversion=版本號
                          -Dpackage=項(xiàng)目所在的包
 

倉庫

Maven的中央倉庫訪問起來可能比較慢,通過設(shè)置鏡像倉庫喷市,可以改善這個(gè)問題,推薦使用阿里云的鏡像威恼。在settings.xml中添加如下<mirror>標(biāo)簽

<mirrors>
    <mirror>
        <id>nexus-ailiyun</id>
        <mirrorOf>*</mirrorOf> 
        <name>Nexus ailiyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
</mirrors>

從網(wǎng)上的倉庫中下載下來的jar包會(huì)保存在本地品姓,下次添加依賴時(shí)如果本地倉庫中已經(jīng)存在了,就不必從網(wǎng)上下載了箫措。本地倉庫默認(rèn)位置在C:Users/your-username/.m2腹备,如果要更換默認(rèn)位置,可以修改settings.xml文件

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

<localRepository>取消注釋斤蔓,選一個(gè)合適的路徑來作為本地倉庫植酥。

pom.xml

pom是maven項(xiàng)目的核心管理文件,用于項(xiàng)目描述、組織管理友驮、依賴管理和構(gòu)建信息的管理漂羊。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- 指定了當(dāng)前pom的版本 -->
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.shy(組織域名的反寫)</groupId>
    <artifactId>springboot(項(xiàng)目名)</artifactId>
    <!-- 0.0.1-SNAPSHOT
    第一個(gè)0表示大版本
     第二個(gè)0表示分支版本號,第三個(gè)1表示小版本號
    SNAPSHOT表示快照版本
    ALPHA表示內(nèi)測版
    BETA表示公測版
    RELEASE表示穩(wěn)定版
    -->
    <version>0.0.1-SNAPSHOT(版本號)</version>
    <!-- maven項(xiàng)目的打包方式卸留,默認(rèn)是jar走越,也可以打包成war、zip耻瑟、pom -->
    <packaging>jar</packaging>
    <!-- 項(xiàng)目名 -->
    <name>springboot</name>
    <!-- 項(xiàng)目的描述 -->
    <description>Demo project for Spring Boot</description>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!-- 依賴范圍旨指,表示Junit只在測試環(huán)境下使用
                 還有以下范圍
                compile:默認(rèn)的范圍,編譯測試運(yùn)行都有效喳整;
                provided:在編譯和測試時(shí)有效谆构,在實(shí)際運(yùn)行時(shí)不會(huì)被加入
                system: 在編譯和測試時(shí)有效,與本機(jī)系統(tǒng)相關(guān)聯(lián),可移植性差
                import: 只使用在 dependencyManagement標(biāo)簽中框都,表示從其他的pom中導(dǎo)入dependency配置
            -->
            <scope>test</scope>
 
            <!-- <optional></optional>設(shè)置依賴是否可選 -->
            <!--
                exclusions設(shè)置排除依賴傳遞的列表搬素。如果A依賴于B,B又依賴于C瞬项,我們說存在依賴關(guān)系蔗蹋,在A中引入B時(shí)候,會(huì)自動(dòng)引入C囱淋。如果不想引入C猪杭,可以在exclusions中將其排除。
                <exclusions></exclusions>
            -->
        </dependency>
    </dependencies>
 
    <build>
        <!-- 插件類妥衣,也要指定“坐標(biāo)” -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
 
</project>
 

依賴范圍

  • compile:默認(rèn)的范圍皂吮,編譯測試運(yùn)行都有效;
  • provided:在編譯和測試時(shí)有效税手,在實(shí)際運(yùn)行時(shí)不會(huì)被加入
  • test:只在測試環(huán)境下使用
  • system: 在編譯和測試時(shí)有效,與本機(jī)系統(tǒng)相關(guān)聯(lián)蜂筹,可移植性差
  • import: 只使用在 dependencyManagement標(biāo)簽中,表示從其他的pom中導(dǎo)入dependency配置

依賴傳遞

exclusions標(biāo)簽:設(shè)置排除依賴傳遞的列表芦倒。如果A依賴于B艺挪,B又依賴于C,我們說存在依賴關(guān)系兵扬,在A中引入B時(shí)候麻裳,會(huì)自動(dòng)引入C。如果不想引入C器钟,可以在exclusions中將其排除津坑。

依賴沖突

1、短路徑優(yōu)先
如果有兩條依賴傳遞關(guān)系

1) A -> B -> C -> X(jar)
 
2) A -> D -> X(jar)

會(huì)選擇短的路徑2傲霸。

2疆瑰、誰先聲明誰優(yōu)先

在pom文件中眉反,哪個(gè)依賴寫在前面就優(yōu)先引用該依賴。

繼承

用于在子模塊中對父模塊的一個(gè)pom的繼承穆役,作用就是對代碼的復(fù)用寸五。比如在SpringBoot項(xiàng)目的pom文件中就有下面的幾行。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

模塊的聚合

如果我們的項(xiàng)目分成了好幾個(gè)模塊孵睬,那么我們構(gòu)建的時(shí)候是不是有幾個(gè)模塊就需要構(gòu)建幾次了(到每個(gè)模塊的目錄下執(zhí)行mvn命令)播歼?當(dāng)然,你逐個(gè)構(gòu)建沒問題掰读,但是非要這么麻煩的一個(gè)一個(gè)的構(gòu)建嗎秘狞,那么簡單的做法就是使用聚合,一次構(gòu)建全部模塊蹈集。

<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.youzhibing.account</groupId>
  <artifactId>account-aggregator</artifactId>
  <version>1.0.0-SNAPSHOT</version>
    <!-- 聚合pom.xml文件的打包方式必須是pom -->
  <packaging>pom</packaging> 
  <modules>    <!-- 模塊都寫在此處 -->
      <module>account-register</module>
      <module>account-persist</module>
  </modules>
</project>
 

如上烁试,只需對account-aggregator進(jìn)行打包,就能一次性構(gòu)建所有模塊了拢肆。聚合POM與繼承中的父POM的packaging標(biāo)簽都必須是pom减响。

dependencies和dependencyManagement的區(qū)別

  • dependencies即使在子項(xiàng)目中不寫該依賴項(xiàng),那么子項(xiàng)目仍然會(huì)從父項(xiàng)目中繼承該依賴項(xiàng)(全部繼承)
  • dependencyManagement里只是聲明依賴郭怪,并不實(shí)現(xiàn)引入支示。如果在子項(xiàng)目不聲明依賴,是不會(huì)從父項(xiàng)目中繼承下來的鄙才;所以要添加依賴還需顯式聲明颂鸿,如果沒有指定具體版本,會(huì)從父項(xiàng)目中繼承該項(xiàng)攒庵,并且version和scope都讀取自父pom;但是如果子項(xiàng)目中指定了版本號嘴纺,那么就使用子項(xiàng)目中指定的jar版本。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浓冒,一起剝皮案震驚了整個(gè)濱河市栽渴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稳懒,老刑警劉巖闲擦,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異场梆,居然都是意外死亡佛致,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門辙谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人感昼,你說我怎么就攤上這事装哆。” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蜕琴,是天一觀的道長萍桌。 經(jīng)常有香客問我,道長凌简,這世上最難降的妖魔是什么上炎? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮雏搂,結(jié)果婚禮上藕施,老公的妹妹穿的比我還像新娘。我一直安慰自己凸郑,他們只是感情好裳食,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芙沥,像睡著了一般诲祸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上而昨,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天救氯,我揣著相機(jī)與錄音,去河邊找鬼歌憨。 笑死着憨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躺孝。 我是一名探鬼主播享扔,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼植袍!你這毒婦竟也來了惧眠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤于个,失蹤者是張志新(化名)和其女友劉穎氛魁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厅篓,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秀存,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羽氮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片或链。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澳盐,靈堂內(nèi)的尸體忽然破棺而出祈纯,到底是詐尸還是另有隱情,我是刑警寧澤腕窥,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站筛婉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爽撒。R本人自食惡果不足惜入蛆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一安寺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧首尼,春花似錦、人聲如沸软能。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凳枝。三九已至,卻和暖如春跋核,著一層夾襖步出監(jiān)牢的瞬間岖瑰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工砂代, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹋订,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓刻伊,卻偏偏與公主長得像露戒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子捶箱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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

  • 簡介 概述 Maven 是一個(gè)項(xiàng)目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,277評論 6 39
  • 導(dǎo)語 最近在學(xué)習(xí)Java了智什,以后分享的文章主要就以Java為主了,偶爾也會(huì)分享一下Objective-C方面的文章...
    國士無雙A閱讀 11,723評論 0 24
  • Maven入門教程 1.1.介紹丁屎、環(huán)境配置 1.1.1.Maven介紹 Maven是一個(gè)采用純Java編寫的開源項(xiàng)...
    安易學(xué)車閱讀 1,452評論 2 10
  • GCD學(xué)習(xí)一 GCD學(xué)習(xí)二 GCD學(xué)習(xí)三 我不會(huì)講太多理論荠锭,這篇是我自己的理解。 舉個(gè)例子: 汽車進(jìn)入維修廠的關(guān)...
    FredYJH閱讀 278評論 0 0
  • 文/攬衣 【一】 浩浩蕩蕩的軍隊(duì)開赴戰(zhàn)場晨川,領(lǐng)軍的那個(gè)少年节沦,器宇軒昂雄姿英發(fā)键思。他是邶國最年輕的大將軍,鳶王邶鳶甫贯。另外...
    攬衣閱讀 250評論 1 1