Maven 理論以及操作
現(xiàn)有技術(shù)總結(jié)
目前的技術(shù)在項(xiàng)目開(kāi)發(fā)中遇到的問(wèn)題
-
一個(gè)項(xiàng)目就是一個(gè)工程
- 如果項(xiàng)目非常龐大眯勾,就不適合利用 package 來(lái)劃分模塊,期望每一個(gè)模塊對(duì)應(yīng)-一個(gè)工程调鬓, 然后每個(gè)工程之間還要相互調(diào)用. Maven可以滿(mǎn)足我們的要求.
-
項(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ù)制到工程.
-
用到的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>中
-
一個(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é)
- 清理:將以前編譯得到的舊的 class 字節(jié)碼文件刪除
- 編譯:將 Java 源文件編譯成 .class 文件
- 測(cè)試:自動(dòng)測(cè)試罚攀,自動(dòng)調(diào)用 Junit 程序
- 報(bào)告:測(cè)試程序執(zhí)行的結(jié)果
- 打包: 動(dòng)態(tài)WEB工程打 war 包. Java工程打 jar 包
- 安裝: Maven的特定概念:將打包得到的文件復(fù)制到倉(cāng)庫(kù)中的指定位置 (就可以供別人使用)
- 部署: 將動(dòng)態(tài)WEB工程生成的war包復(fù)制到服務(wù)器(tomcat)的指定目錄下党觅,使其可以運(yùn)行
安裝 Maven
- 檢查 Java 環(huán)境
- 在命令行中輸入:
java -verion
-
下載 maven
-
將 Maven 解壓到一個(gè)無(wú)中文無(wú)空格的路徑下。(安裝程序時(shí)斋泄,最好都無(wú)中文無(wú)空格)
- 我的解壓到了
/usr/local/
目錄下 tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
- 我的解壓到了
-
配置 maven 的環(huán)境變量
- 在
~/.bash_profile
(僅當(dāng)前用戶(hù)) 或者/etc/profile
(全局) 中進(jìn)行配置
export M2_HOME=/usr/local/apache-maven-3.6.3
export PATH=* 保存退出以后記得 ```source ~/.bash_profile``` or ```source /etc/profile```
- 在
-
驗(yàn)證 Maven 是否安裝成功
mvn -v
-
安裝成功后的截圖
Maven 的核心概念
- 約定的目錄結(jié)構(gòu)
- POM
- 坐標(biāo)
- 倉(cāng)庫(kù)
- 依賴(lài)
- 生命周期 / 插件 / 目標(biāo)
- 繼承
- 聚合
Maven項(xiàng)目的目錄結(jié)構(gòu)
-
約定的目錄結(jié)構(gòu)
根目錄:工程名 testjava
src目錄:源碼
pom.xml : Maven 工程的核心配置文件
main目錄:存放主程序
test目錄: 存放測(cè)試程序杯瞻,測(cè)試用例
java目錄:存放java源文件
resources目錄:存放框架或者其他工具的配置文件
如圖:
-
為什么要遵守約定的目錄結(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 工程
-
groupId:公司或者組織的域名倒敘 + 項(xiàng)目名 (項(xiàng)目名可以隨便取)
<groupId>com.xxx.maven</groupId>
-
artifactId:模塊名 (一個(gè)項(xiàng)目可能有多個(gè)模塊剿牺,即多個(gè)工程)
<artifactId>Hello</artifactId>
-
version:版本
<version>0.0.1-SNAPASH0T</version>
-
如何進(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)
本地倉(cāng)庫(kù):在當(dāng)前電腦上部署的倉(cāng)庫(kù)目錄企垦,為當(dāng)前電腦上所有的 Maven 工程服務(wù)
-
遠(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)容
- Maven 自身所需要的插件
- 第三方框架或者工具的 jar 包
- 我們自己開(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的支持
- 創(chuàng)建模塊
[圖片上傳失敗...(image-87ce09-1601609755495)]
- 添加 maven 的依賴(lài)
-
修改idea中maven的配置
Preferences -> Build,Execution,Deployment -> Build Tools -> maven
修改 Maven home direcory , User settings file , Local repository
-
加入新的依賴(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??