Maven理論以及在Idea中的操作

Maven 理論以及操作

現(xiàn)有技術(shù)總結(jié)

image

目前的技術(shù)在項(xiàng)目開(kāi)發(fā)中遇到的問(wèn)題

  1. 一個(gè)項(xiàng)目就是一個(gè)工程

    • 如果項(xiàng)目非常龐大眯勾,就不適合利用 package 來(lái)劃分模塊,期望每一個(gè)模塊對(duì)應(yīng)-一個(gè)工程调鬓, 然后每個(gè)工程之間還要相互調(diào)用. Maven可以滿(mǎn)足我們的要求.
  2. 項(xiàng)目中需要的 jar 包是通過(guò)手動(dòng)導(dǎo)入霹粥,“復(fù)制” “粘貼”到 WEB-INF/lib 目錄下

    • 同樣的 jar 包重復(fù)出現(xiàn)在不同的工程中.浪費(fèi)存儲(chǔ)空間.工程非常臃腫坐桩。
    • 使用 maven ,可以將 jar 包統(tǒng)一保存到<font color=red>倉(cāng)庫(kù)</font>中,在工程中去引用”倉(cāng)庫(kù)”中的 jar 包即可升薯,并不會(huì)把jar包復(fù)制到工程.
  3. 用到的jar包需要?jiǎng)e人替我們準(zhǔn)備好意述,或者可以到官網(wǎng)下載

    • 不同技術(shù)的官網(wǎng)提供 jar 包下載的方式是不同的
    • 有些技術(shù)的官網(wǎng)提供的下載方式就是 maven 的方式
    • 如果在不“正規(guī)”的網(wǎng)站以不“正規(guī)”的方式進(jìn)行下載,可能得到不“正規(guī)的文件”
    • maven 可以以一種規(guī)范的方式下載 jar 包肚吏,目前幾乎所有知名的以及非知名的框架或者第三方工具的jar包都按照統(tǒng)一的規(guī)范存在了 maven 的<font color=red>中央倉(cāng)庫(kù)</font>中
  4. 一個(gè) jar 包依賴(lài)的其他的 jar 包需要一起導(dǎo)入到工程中方妖,必須要求開(kāi)發(fā)人員了解jar包之間的依賴(lài)關(guān)系,否則可能會(huì)發(fā)生<font color =red>沖突</font>

    • FileUpload 組件依賴(lài) IO 組件 Spring-Core 包依賴(lài) IO 組件.
    • maven 可以幫我們解決jar包依賴(lài)的問(wèn)題:自動(dòng)的將所依賴(lài)的jar包引用進(jìn)來(lái)

Maven是什么

  • Maven是一款服務(wù)于Java平臺(tái)的自動(dòng)化構(gòu)建工具

  • 以 “java源文件” “框架的配置文件” “HTML/CSS/JS” "圖片" “音視頻” 等為“原材料”去生產(chǎn)一個(gè)可運(yùn)行的項(xiàng)目的過(guò)程

  • 構(gòu)建過(guò)程的各個(gè)環(huán)節(jié)

    1. 清理:將以前編譯得到的舊的 class 字節(jié)碼文件刪除
    2. 編譯:將 Java 源文件編譯成 .class 文件
    3. 測(cè)試:自動(dòng)測(cè)試罚攀,自動(dòng)調(diào)用 Junit 程序
    4. 報(bào)告:測(cè)試程序執(zhí)行的結(jié)果
    5. 打包: 動(dòng)態(tài)WEB工程打 war 包. Java工程打 jar 包
    6. 安裝: Maven的特定概念:將打包得到的文件復(fù)制到倉(cāng)庫(kù)中的指定位置 (就可以供別人使用)
    7. 部署: 將動(dòng)態(tài)WEB工程生成的war包復(fù)制到服務(wù)器(tomcat)的指定目錄下党觅,使其可以運(yùn)行

安裝 Maven

  1. 檢查 Java 環(huán)境
  • 在命令行中輸入: java -verion
  1. 下載 maven

  2. 將 Maven 解壓到一個(gè)無(wú)中文無(wú)空格的路徑下。(安裝程序時(shí)斋泄,最好都無(wú)中文無(wú)空格)

    • 我的解壓到了 /usr/local/ 目錄下
    • tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
  3. 配置 maven 的環(huán)境變量

    • ~/.bash_profile (僅當(dāng)前用戶(hù)) 或者/etc/profile (全局) 中進(jìn)行配置

    export M2_HOME=/usr/local/apache-maven-3.6.3
    export PATH=

    PATH:
    M2_HOME/bin

    
    * 保存退出以后記得 ```source ~/.bash_profile```   or   ```source  /etc/profile```
    
    
  4. 驗(yàn)證 Maven 是否安裝成功

    • mvn -v

    • 安裝成功后的截圖

      image-20200930204114502

Maven 的核心概念

  1. 約定的目錄結(jié)構(gòu)
  2. POM
  3. 坐標(biāo)
  4. 倉(cāng)庫(kù)
  5. 依賴(lài)
  6. 生命周期 / 插件 / 目標(biāo)
  7. 繼承
  8. 聚合

Maven項(xiàng)目的目錄結(jié)構(gòu)

  1. 約定的目錄結(jié)構(gòu)

    根目錄:工程名 testjava

    src目錄:源碼

    pom.xml : Maven 工程的核心配置文件

    main目錄:存放主程序

    test目錄: 存放測(cè)試程序杯瞻,測(cè)試用例

    java目錄:存放java源文件

    resources目錄:存放框架或者其他工具的配置文件

    如圖:

?
image
  1. 為什么要遵守約定的目錄結(jié)構(gòu):

    • Maven 要負(fù)責(zé)項(xiàng)目的<font color = red>自動(dòng)化構(gòu)建</font>,以編譯為例:Maven 要想自動(dòng)進(jìn)行編譯,必須要知道 java 源文件存放在哪里炫掐。

    • 如果我們想要定義一些配置想讓框架或者其他工具知道

      • 已配置的形式告訴框架

        <para-value>classpath:applicationContext.xml</para-value>

      • 遵守框架或者工具內(nèi)部已經(jīng)存在的約定

        log4j.xml log4j.properties

        約定 > 配置 > 編碼


常用的 Maven 命令

  • 常用命令

    mvn clean: 清理

    mvn compile:編譯主程序

    mvn test-compile : 編譯測(cè)試程序

    mvn test:執(zhí)行測(cè)試

    mvn package:打包

    mvn install :安裝

    mvn site :生成站點(diǎn)

    mvn deploy : 部署

  • 執(zhí)行與構(gòu)建過(guò)程相關(guān)的命令魁莉,必須進(jìn)入pom.xml所在的目錄下


聯(lián)網(wǎng)問(wèn)題

  • maven 的核心程序中僅僅定義了抽象的生命周期,但是具體的工作必須由特定的插件來(lái)完成,而插件本身沒(méi)有包含在maven的核心程序中旗唁。

  • 當(dāng)我們執(zhí)行 maven 命令需要用到相關(guān)的插件時(shí)畦浓,Maven核心程序會(huì)首先到<font color=red>本地倉(cāng)庫(kù)</font>中查找

  • 如果 maven 在本地倉(cāng)庫(kù)中找不到要用的插件,就會(huì)到中央倉(cāng)庫(kù)中去找逆皮,需要連接外網(wǎng)

    ? maven會(huì)把jar包下載到本地倉(cāng)庫(kù)中 /Users/username/.m2/repository

  • 如果無(wú)法連接外網(wǎng)宅粥,則構(gòu)建失敗

  • 可以將所要用到的插件或是其他的 maven 工程提前下載好,存放到本地倉(cāng)庫(kù)中即可电谣。

  • 可以配置本地倉(cāng)庫(kù)的位置

    • 在 maven 解壓目錄中找到 conf/settings/xml
    • <localRepository>/Users/username/RepMaven</localRepository>

POM

  • 含義:Project Object Model 項(xiàng)目對(duì)象模型
  • pom.xml 是maven 工程的核心配置文件秽梅,與構(gòu)建過(guò)程相關(guān)的一切設(shè)置都在這個(gè)文件中配置
  • 重要程度相當(dāng)于 web.xml 對(duì)于動(dòng)態(tài) web 工程,applicationContext.xml 對(duì)于 spring 框架

坐標(biāo)

  • 數(shù)學(xué)中的坐標(biāo)

    • 在平面上:使用 x , y 兩個(gè)向量可以唯一的定位平面中的任何一個(gè)點(diǎn)
    • 在空間上:使用 x , y , z 三個(gè)向量可以唯一的定位空間中任何一個(gè)點(diǎn)
  • maven 中的坐標(biāo)

    • maven也是通過(guò)三個(gè)向量定位倉(cāng)庫(kù)中的一個(gè) maven 工程

      1. groupId:公司或者組織的域名倒敘 + 項(xiàng)目名 (項(xiàng)目名可以隨便取)

        <groupId>com.xxx.maven</groupId>

      2. artifactId:模塊名 (一個(gè)項(xiàng)目可能有多個(gè)模塊剿牺,即多個(gè)工程)

        <artifactId>Hello</artifactId>

      3. version:版本

        <version>0.0.1-SNAPASH0T</version>

      4. 如何進(jìn)行定位:

        <dependency>
        
             <groupId>org.springframework<groupId>
        
             <artifactId>spring-core</artifactId>
        
             <version>4.0.0.RELEASE</version>>
        
             <scope>compile</scope>
        
        </dependency>
        

        eg : org/springframework/spring-core/4.0.0.RELEASE/sprin-core-4.0.0.RELEASE.jar (可以理解為路徑)


倉(cāng)庫(kù)

  • 倉(cāng)庫(kù)的分類(lèi)

    1. 本地倉(cāng)庫(kù):在當(dāng)前電腦上部署的倉(cāng)庫(kù)目錄企垦,為當(dāng)前電腦上所有的 Maven 工程服務(wù)

    2. 遠(yuǎn)程倉(cāng)庫(kù):

      • 私服(局域網(wǎng)倉(cāng)庫(kù)):搭建在局域網(wǎng)中,為局域網(wǎng)范圍內(nèi)的所有Maven工程服務(wù)
      • 中央倉(cāng)庫(kù):假設(shè)在internet上晒来,為全世界所有 Maven 工程服務(wù)
      • 中央倉(cāng)庫(kù)鏡像: 為了分擔(dān)中央倉(cāng)庫(kù)的流量钞诡,提升用戶(hù)訪問(wèn)速度,在各個(gè)州假設(shè)的倉(cāng)庫(kù)
  • 倉(cāng)庫(kù)中保存的內(nèi)容

    1. Maven 自身所需要的插件
    2. 第三方框架或者工具的 jar 包
    3. 我們自己開(kāi)發(fā)的 Maven 工程(安裝)
  • 解決下載倉(cāng)庫(kù)中的資源緩慢的問(wèn)題

    • maven 默認(rèn)的中央倉(cāng)庫(kù)架設(shè)在國(guó)外的服務(wù)器上湃崩,所以會(huì)導(dǎo)致下載緩慢的問(wèn)題

    • 可以修改配置文件中的鏡像荧降,設(shè)置為阿里云的鏡像

    • 修改 conf/settings.xml 文件,在mirros下添加如下配置

      <mirror>
      
      <id>alimaven</id>
      
      <name>aliyun maven</name>
      
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      
      <mirrorOf>central</mirrorOf>
      
      </mirror>
      
      <mirror>
      
      <id>alimaven</id>
      
      <mirrorOf>central</mirrorOf>
      
      <name>aliyun maven</name>
      
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
      
      </mirror>
      

生命周期

  • 各個(gè)構(gòu)建環(huán)節(jié)執(zhí)行的順序攒读,都是 Maven 預(yù)定設(shè)定好的朵诫,不能打亂該順序,必須按照規(guī)定的正確的順序來(lái)執(zhí)行

  • Maven 的核心程序定義了抽象的生命周期薄扁,生命周期中各個(gè)階段的具體任務(wù)由插件來(lái)完成

  • Maven 核心程序?yàn)榱烁玫膶?shí)現(xiàn)自動(dòng)化構(gòu)建剪返,按照這樣的特定執(zhí)行生命周期的各個(gè)階段:不論現(xiàn)在要執(zhí)行生命周期的哪一個(gè)階段,都是從這個(gè)生命周期最初的位置開(kāi)始執(zhí)行

  • 插件和目標(biāo)

    • 生命周期的各個(gè)階段僅僅定義了要執(zhí)行的任務(wù)是什么
    • 各個(gè)階段和插件的目標(biāo)是對(duì)應(yīng)的
    • 相似的目標(biāo)由特定的插件來(lái)完成
    • 可以將目標(biāo)看做是“調(diào)用插件的命令”

Maven在IDEA中的使用

  • 創(chuàng)建普通的項(xiàng)目或者模塊邓梅,然后在創(chuàng)建的項(xiàng)目(模塊)上面添加maven的支持

    1. 創(chuàng)建模塊

[圖片上傳失敗...(image-87ce09-1601609755495)]

image
image
  1. 添加 maven 的依賴(lài)
image
image
image
  • 修改idea中maven的配置

    Preferences -> Build,Execution,Deployment -> Build Tools -> maven

    修改 Maven home direcory , User settings file , Local repository

    image
  • 加入新的依賴(lài)脱盲,如junit

    • 首先在pom.xml文件中添加junit的坐標(biāo),每一個(gè)依賴(lài)都被<dependency></dependency>包含日缨,放在<dependencies></dependencies>下面 1??
    • 點(diǎn)擊右邊maven窗口的刷新按鈕 2??
    • 可以看到已經(jīng)引入了junit的依賴(lài) 3??
    image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钱反,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子殿遂,更是在濱河造成了極大的恐慌诈铛,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墨礁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耳峦,警方通過(guò)查閱死者的電腦和手機(jī)恩静,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驶乾,你說(shuō)我怎么就攤上這事邑飒。” “怎么了级乐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵疙咸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我风科,道長(zhǎng)撒轮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任贼穆,我火速辦了婚禮题山,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘故痊。我一直安慰自己顶瞳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布愕秫。 她就那樣靜靜地躺著慨菱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戴甩。 梳的紋絲不亂的頭發(fā)上符喝,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音等恐,去河邊找鬼洲劣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛课蔬,可吹牛的內(nèi)容都是我干的囱稽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼二跋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼战惊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扎即,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吞获,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谚鄙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體各拷,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年闷营,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烤黍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片知市。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖速蕊,靈堂內(nèi)的尸體忽然破棺而出嫂丙,到底是詐尸還是另有隱情,我是刑警寧澤规哲,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布跟啤,位于F島的核電站,受9級(jí)特大地震影響唉锌,放射性物質(zhì)發(fā)生泄漏隅肥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一糊秆、第九天 我趴在偏房一處隱蔽的房頂上張望武福。 院中可真熱鬧,春花似錦痘番、人聲如沸捉片。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伍纫。三九已至,卻和暖如春昂芜,著一層夾襖步出監(jiān)牢的瞬間莹规,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工泌神, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留良漱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓欢际,卻偏偏與公主長(zhǎng)得像母市,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子损趋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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