Maven基礎(chǔ)
B站黑馬視頻
Maven是Apache公司的開源項(xiàng)目,是項(xiàng)目的構(gòu)建工具,用來依賴管理
maven的好處
- 能夠有效的減少項(xiàng)目體積,一臺電腦上只需要下載一次相同版本的依賴即可。
- 在項(xiàng)目需要jar包的時(shí)候,去倉庫進(jìn)行引用,所以Maven項(xiàng)目比傳統(tǒng)的導(dǎo)入lib再build path所需要的內(nèi)存小很多。
maven的好處如何實(shí)現(xiàn)
- 有個(gè)jar包倉庫(Maven倉庫)
- 坐標(biāo):作為jar包擁有全球唯一的坐標(biāo)
- 舉例: struts2-core-2.3.24.jar
- Apache(公司名稱)+Struts2(項(xiàng)目名)+2.3.24(版本信息)
- 當(dāng)Maven項(xiàng)目中需要一個(gè)jar包的時(shí)候,只需要在maven項(xiàng)目中配置需要的jar包的坐標(biāo)信息,maven程序根據(jù)jar包坐標(biāo)的信息去jar包倉庫中查找jar包。
- maven的兩大核心:
- 依賴管理:對jar包的統(tǒng)一管理。
- 項(xiàng)目構(gòu)建:項(xiàng)目在編碼完成之后,對項(xiàng)目進(jìn)行編譯、測試、打包、部署等一系列操作都可以命令來實(shí)現(xiàn)。
maven安裝、配置本地倉庫
- maven的下載安裝
直接上官網(wǎng)下載zip包即可。
解壓在沒有中文的路徑。
-
目錄結(jié)構(gòu)
- bin:可執(zhí)行的腳本命令(mvn)
- conf:配置文件(settings.xml)
- lib:maven項(xiàng)目運(yùn)行需要的jar包,因?yàn)閙aven是純java開發(fā)的。
- boot:類加載器。
-
配置環(huán)境變量
- 配置%MAVEN_HOME%到環(huán)境變量中,到bin的上一級。
- 配置path環(huán)境變量:%MAVEN_HOME%\bin;
注意:maven需要java環(huán)境,JDK環(huán)境變量:%JAVA_HOME%
使用mvn -v查看maven版本,以及是否安裝成功。
- Maven找jar包流程
- Maven項(xiàng)目會在本地找倉庫,如果有則依賴進(jìn)去,但是隨著jar包越來越多,項(xiàng)目越來越大,每個(gè)人的電腦里都需要很大的空間來做maven倉庫,這時(shí)候就可以通過私服來解決,存在于本地的局域網(wǎng)內(nèi)的一臺服務(wù)器,存jar包,只需要在這個(gè)局域網(wǎng)里就可以依賴到。前提是安裝了私服服務(wù)器。最后如果再找不到,就到中央倉庫,在互聯(lián)網(wǎng)上,存放了所有開源的jar包,由Maven團(tuán)隊(duì)來維護(hù)。
- 步驟:
- 本地倉庫:本機(jī)
- 私服:局域網(wǎng)
- 中央倉庫:互聯(lián)網(wǎng)
- 配置本地倉庫
- 默認(rèn)在.m2文件夾
- 自定義
- 在maven目錄的conf文件夾里有個(gè)settings.xml文件,更改里面的localRepository標(biāo)簽,指向自己的倉庫位置。
maven項(xiàng)目標(biāo)準(zhǔn)目錄結(jié)構(gòu)
- src:項(xiàng)目的源碼
- main:主要的
- java:代碼等。
- resources:配置文件等。
- webapp:頁面的素材等。
- test:測試的
- java:代碼等。
- resources:配置文件等。
- pom.xml:project object module,maven項(xiàng)目的核心配置文件。
- target:src里的源碼編譯完后,存放在此。
maven的常用命令
- clean:清理target,即是class文件。
由于Maven是JAVA來構(gòu)建的一個(gè)項(xiàng)目,
在maven的文件目錄下有個(gè)lib,
lib里是相關(guān)的jar包,
有個(gè)插件是maven-clean-plugin,
當(dāng)用clean命令的時(shí)候其實(shí)是相當(dāng)于調(diào)用哪個(gè)jar包。
- compile:編譯項(xiàng)目,即是生成target文件夾,class文件。背后也是調(diào)用lib里的一個(gè)jar包——maven-compile-plugin。
- test:單元測試,即是把test下的測試都運(yùn)行一遍。
- 先compile編譯,test/java里的java文件,再運(yùn)行。
- 有要求:單元測試的類名:XxxTest.java
- package:以往是通過Export來導(dǎo)出jar file或者war file,現(xiàn)在可以通過package來打包。
- 先compile再test最后package。
- 在target目錄下生成jar/war包。
- install:安裝,本地多個(gè)項(xiàng)目公用一個(gè)jar包。
- compile->test->package->install,最后在本地倉庫可以找到。
- 操作:可以把一些工具類打包,放到本地倉庫,其他項(xiàng)目可以直接去依賴,這樣的好處是如果工具類更改了代碼,其他項(xiàng)目只需要更新一下maven項(xiàng)目就可以了,不需要把jar包重新導(dǎo)入。
maven項(xiàng)目的生命周期(了解)
- 在maven中存在三套生命周期,每一套生命周期相互獨(dú)立,互不影響。
- CleanLifeCycle:清理生命周期:
clean - defaultLifeCycle:默認(rèn)生命周期:
compile->test->package->install->deploy - siteLifeCycle:站點(diǎn)生命周期
site描述這個(gè)項(xiàng)目的相關(guān)信息,如依賴了哪些jar包。
- CleanLifeCycle:清理生命周期:
- 在一套生命周期里,執(zhí)行后面的命令,前面的命令會自動執(zhí)行。
maven整合web項(xiàng)目案例
- 配置eclipse中配置maven環(huán)境
- 配置m2e插件,基本都會自帶maven插件
- 需要配置maven程序
- Perferences->Maven->Installations改為自己的Maven,不使用內(nèi)嵌的Maven配置。
- 配置User Settings:讓eclipse知道m(xù)aven倉庫的位置。
- Perferences->Maven->User Settings改為自己Maven->conf下的settings.xml文件。
- 構(gòu)建索引:show view->maven Repository選擇本地倉庫右鍵Rebuild Index。
maven整合servlet
- 創(chuàng)建一個(gè)Maven Project,普通的Maven項(xiàng)目或者父工程。
- 創(chuàng)建一個(gè)簡單的maven項(xiàng)目,create a simple project。
- Group Id:組,公司名稱。公司域名的倒序。
- Artifact Id:項(xiàng)目名稱。
- Version:版本信息。SNAPSHOT:快照版本、測試版本。RELEASES:正式版本。
- Packaging:jar則為jar包,war則為web工程,pom則為聚合工程父工程。
- 簡單maven工程需要自己去定義一些文件,如war工程需要自己去加WEB-INF下面的web.xml文件,JDK版本也需要自己去定義,否則Update項(xiàng)目會退回默認(rèn)的JDK版本,指定了版本也沒用。
- 添加項(xiàng)目jdk編譯插件:
<build>
<plugins>
<!-- 設(shè)置版本為1.8 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugins</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugins>
</build>
- 創(chuàng)建一個(gè)servlet,編譯報(bào)錯(cuò),因?yàn)槿笔ar包:serlvet-api-xx.jar。
- 查找依賴加在pom.xml文件中。
-
<dependencies>標(biāo)簽下各種<dependencie>標(biāo)簽,各個(gè)<dependencie>標(biāo)簽就代表一個(gè)jar包。
maven依賴范圍(<scope>)
| 依賴范圍 | 對于編譯classpath有效 | 對于測試classpath有效 | 對于運(yùn)行時(shí)classpath有效 | 例子 |
|---|---|---|---|---|
| compile | Y | Y | Y | spring-core |
| test | - | Y | - | Junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | JDBC驅(qū)動 |
| system | Y | Y | - | 本地的,Maven倉庫之外的類庫 |
- 默認(rèn)是compile
- 例如tomcat有servlet,則servlet在運(yùn)行時(shí)不需要,因?yàn)閠omcat里有。
運(yùn)行以及調(diào)試maven項(xiàng)目
- 右鍵項(xiàng)目Run As:Maven build,Goals:tomcat:run
- 右鍵項(xiàng)目Debug As:Maven build,需要關(guān)聯(lián)源碼,否則無法跳到代碼中。
maven的概念模型
[圖片上傳失敗...(image-c4a941-1559904393636)]
- 上半部分是核心之一:依賴管理。
- 下半部分是核心之二:項(xiàng)目構(gòu)建,通過命令來構(gòu)建項(xiàng)目,如打包、清理等操作。
總結(jié)
- 安裝
- Maven標(biāo)準(zhǔn)的目錄結(jié)構(gòu)
- ProjectName
- src
- main
- java
- resources
- [webapp/WEB-INF/web.xml]
- test
- java
- resources
- pom.xml
- Maven的常用命令
- clean
- compile
- test
- package:項(xiàng)目的根目錄target目錄
- install:本地倉庫
- 使用eclipse開發(fā)maven項(xiàng)目
- 區(qū)別:
1. 不拷貝jar包
2. 項(xiàng)目的目錄結(jié)構(gòu)不同
- pom.xml:項(xiàng)目對象模型
- 本項(xiàng)目的坐標(biāo)信息
- 本項(xiàng)目jdk編譯版本的信息
- 本項(xiàng)目需要的依賴的坐標(biāo)的信息