Maven
初識(shí)Maven
??Maven:是Apache旗下的一個(gè)開源項(xiàng)目,是一款用于管理和構(gòu)建java項(xiàng)目的工具。
Maven的作用
1.依賴管理
2.統(tǒng)一項(xiàng)目結(jié)構(gòu)
3.項(xiàng)目構(gòu)建
依賴管理:方便快捷的管理項(xiàng)目依賴的資源(jar包),避免版本沖突問題
??當(dāng)使用maven進(jìn)行項(xiàng)目依賴(jar包)管理,則很方便的可以解決這個(gè)問題。 只需要在maven項(xiàng)目的pom.xml文件中,添加相應(yīng)的配置即可實(shí)現(xiàn)。
統(tǒng)一項(xiàng)目結(jié)構(gòu) :提供標(biāo)準(zhǔn)、統(tǒng)一的項(xiàng)目結(jié)構(gòu)
??在項(xiàng)目開發(fā)中,當(dāng)使用不同的開發(fā)工具 (如:Eclipse、Idea),創(chuàng)建項(xiàng)目工程時(shí),項(xiàng)目目錄結(jié)構(gòu)不統(tǒng)一。若創(chuàng)建的是一個(gè)maven工程,是可以幫我們自動(dòng)生成統(tǒng)一、標(biāo)準(zhǔn)的項(xiàng)目目錄結(jié)構(gòu)。具體的統(tǒng)一結(jié)構(gòu)如下:
.
項(xiàng)目構(gòu)建 :maven提供了標(biāo)準(zhǔn)的、跨平臺(tái)(Linux、Windows、MacOS) 的自動(dòng)化項(xiàng)目構(gòu)建方式
??如上圖,開發(fā)一套系統(tǒng),代碼需要進(jìn)行編譯、測(cè)試、打包、發(fā)布,這些操作如果需要反復(fù)進(jìn)行就顯得特別麻煩,而Maven提供了一套簡(jiǎn)單的命令來完成項(xiàng)目構(gòu)建。
Maven概述
??Maven是一個(gè)項(xiàng)目管理和構(gòu)建工具,它基于項(xiàng)目對(duì)象模型(Project Object Model , 簡(jiǎn)稱: POM)的概念,通過一小段描述信息來管理項(xiàng)目的構(gòu)建、報(bào)告和文檔。
Maven模型
項(xiàng)目對(duì)象模型 (Project Object Model)
??上圖中紫色框起來的部分屬于項(xiàng)目對(duì)象模型,就是將項(xiàng)目抽象成一個(gè)對(duì)象模型,有自己專屬的坐標(biāo),坐標(biāo),就是資源(jar包)的唯一標(biāo)識(shí),通過坐標(biāo)可以定位到所需資源(jar包)位置。如下圖所示是一個(gè)Maven項(xiàng)目:
.
依賴管理模型(Dependency)
??以上圖中紫色框起來的部分屬于依賴管理模型,是使用坐標(biāo)來描述當(dāng)前項(xiàng)目依賴哪些第三方j(luò)ar包。Maven依賴
??之前項(xiàng)目中需要jar包時(shí),直接就把jar包復(fù)制到項(xiàng)目下的lib目錄,而現(xiàn)在書寫在pom.xml文件中的坐標(biāo)是在Maven倉(cāng)庫(kù)中找到所要的jar包文件的。
.
構(gòu)建生命周期/階段(Build lifecycle & phases)
??以上圖中紫色框起來的部分,就是用來完成標(biāo)準(zhǔn)化構(gòu)建流程 。當(dāng)需要編譯,Maven提供了一個(gè)編譯插件供開發(fā)者使用;當(dāng)需要打包,Maven就提供了一個(gè)打包插件。
Maven倉(cāng)庫(kù)
Maven倉(cāng)庫(kù)分為:
本地倉(cāng)庫(kù):自己計(jì)算機(jī)上的一個(gè)目錄(用來存儲(chǔ)jar包)
中央倉(cāng)庫(kù):由Maven團(tuán)隊(duì)維護(hù)的全球唯一的。倉(cāng)庫(kù)地址:https://repo1.maven.org/maven2/
遠(yuǎn)程倉(cāng)庫(kù)(私服):一般由公司團(tuán)隊(duì)搭建的私有倉(cāng)庫(kù)
??當(dāng)項(xiàng)目中使用坐標(biāo)引入對(duì)應(yīng)依賴jar包后,首先會(huì)查找本地倉(cāng)庫(kù)中是否有對(duì)應(yīng)的jar包,如果有,則在項(xiàng)目直接引用;如果沒有,則去中央倉(cāng)庫(kù)中下載對(duì)應(yīng)的jar包到本地倉(cāng)庫(kù)。如果還可以搭建遠(yuǎn)程倉(cāng)庫(kù)(私服),將來jar包的查找順序則變?yōu)椋?本地倉(cāng)庫(kù) --> 遠(yuǎn)程倉(cāng)庫(kù)–> 中央倉(cāng)庫(kù)
Maven安裝與配置
??Maven下載地址:https://maven.apache.org/download.cgi
??解壓 下載好的壓縮包(解壓即安裝),解壓縮后的目錄結(jié)構(gòu)如下:
bin目錄 : 存放的是可執(zhí)行命令。(mvn 命令重點(diǎn)關(guān)注)
conf目錄 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)
lib目錄 :存放Maven依賴的jar包。(Maven也是使用java開發(fā)的,所以它也依賴其他的 jar 包)
配置本地倉(cāng)庫(kù)
??1、在自己計(jì)算機(jī)上新一個(gè)目錄(本地倉(cāng)庫(kù),用來存儲(chǔ)jar包)
??2、進(jìn)入到conf目錄下修改settings.xml配置文件。修改conf/settings.xml中的< localRepository >:為一個(gè)指定目錄。
<localRepository> E:\develop\apache-mayen-3.6.1\mvn_repo </localRepository>
.
配置阿里云私服
??由于中央倉(cāng)庫(kù)在國(guó)外,所以下載jar包速度可能比較慢,而阿里公司提供了一個(gè)遠(yuǎn)程倉(cāng)庫(kù),里面基本都有開源項(xiàng)目的jar包。
??進(jìn)入到conf目錄下修改settings.xml配置文件, 修改conf/settings.xml中的< mirrors>標(biāo)簽,為其添加如下子標(biāo)簽:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置環(huán)境變量
??1. 在系統(tǒng)變量處新建一個(gè)變量MAVEN_HOME,MAVEN_HOME環(huán)境變量的值,設(shè)置為maven的解壓安裝目錄
.
??2. 在Path中進(jìn)行配置,PATH環(huán)境變量的值,設(shè)置為:%MAVEN_HOME%\bin
.
??3. 打開DOS命令提示符進(jìn)行驗(yàn)證,出現(xiàn)如圖所示表示安裝成功
IDEA集成Maven
配置Maven環(huán)境
當(dāng)前工程設(shè)置
??1、選擇 IDEA中 File => Settings => Build,Execution,Deployment => Build Tools => Maven
??2、設(shè)置IDEA使用本地安裝的Maven,并修改配置文件及本地倉(cāng)庫(kù)路徑
Maven home path :指定當(dāng)前Maven的安裝目錄
User settings file :指定當(dāng)前Maven的settings.xml配置文件的存放路徑
Local repository :指定Maven的本地倉(cāng)庫(kù)的路徑 (如果指定了settings.xml, 這個(gè)目錄會(huì)自動(dòng)讀取出來, 可以不用手動(dòng)指定)
??3、配置工程的編譯版本為11
全局設(shè)置
??上述當(dāng)前工程配置的maven環(huán)境,只是針對(duì)于當(dāng)前工程的,如果再創(chuàng)建一個(gè)project,又恢復(fù)成默認(rèn)的配置,為解決這個(gè)問題, 就需要配置全局的maven環(huán)境。
?? 1、選擇 IDEA中 File => close project 進(jìn)入到IDEA歡迎頁(yè)面
.
??2、打開 All settings , 選擇 Build,Execution,Deployment => Build Tools =>Maven
.
??3、配置工程的編譯版本為11
??這里所設(shè)置的maven的環(huán)境信息,并未指定任何一個(gè)project,此時(shí)設(shè)置的信息就屬于全局配置信息。以后,再創(chuàng)建project,默認(rèn)就是使用我們?nèi)峙渲玫男畔ⅰ?/p>
創(chuàng)建Maven項(xiàng)目
創(chuàng)建Maven項(xiàng)目
??1、創(chuàng)建一個(gè)空項(xiàng)目
.
??2、創(chuàng)建模塊,選擇Maven,點(diǎn)擊Next
.
??3、填寫模塊名稱,坐標(biāo)信息,點(diǎn)擊finish,創(chuàng)建完成
.
??4、在Maven工程下,創(chuàng)建HelloWorld類
Maven項(xiàng)目的目錄結(jié)構(gòu):, 其中 target (是編譯、打包生成文件存放目錄)
.
??5、編寫 HelloWorld,并運(yùn)行
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello Maven ...");
}
}
POM配置詳解
pom.xml文件:
<?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">
<!-- POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 當(dāng)前項(xiàng)目坐標(biāo) -->
<groupId>com.itheima</groupId>
<artifactId>maven_project1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
</project>
pom文件詳解:
<modelVersion>:聲明項(xiàng)目描述遵循哪一個(gè)POM模型版本
雖然模型本身的版本很少改變,但它仍然是必不可少的。目前POM模型版本是4.0.0
坐標(biāo) :<groupId>、<artifactId>、<version>
定位項(xiàng)目在本地倉(cāng)庫(kù)中的位置,由以上三個(gè)標(biāo)簽組成一個(gè)坐標(biāo)
groupId:定義當(dāng)前Maven項(xiàng)目隸屬組織名稱(通常是域名反寫,例如:com.itheima)
artifactId:定義當(dāng)前Maven項(xiàng)目名稱(通常是模塊名稱,例如 order-service、goods-service)
version:定義當(dāng)前項(xiàng)目版本號(hào)
<packaging>:maven項(xiàng)目的打包方式,通常設(shè)置為jar或war(默認(rèn)值:jar)
導(dǎo)入Maven.項(xiàng)目
??方式1:使用Maven面板,快速導(dǎo)入項(xiàng)目。打開IDEA,選擇右側(cè)Maven面板,點(diǎn)擊 + 號(hào),選中對(duì)應(yīng)項(xiàng)目的pom.xml文件,雙擊即可
說明:如果沒有Maven面板,選擇 View => Appearance => Tool Window Bars
??方式2:使用idea導(dǎo)入模塊項(xiàng)目.File => Project Structure => Modules => + => Import Module
找到要導(dǎo)入工程的pom.xml
依賴管理
??依賴:指當(dāng)前項(xiàng)目運(yùn)行所需要的jar包。一個(gè)項(xiàng)目中可以引入多個(gè)依賴。
依賴配置
??例如:在當(dāng)前工程中,我們需要用到logback來記錄日志,此時(shí)就可以在maven工程的pom.xml文件中,引入logback的依賴。具體步驟如下:
1. 在pom.xml中編寫標(biāo)簽
2. 在標(biāo)簽中使用引入坐標(biāo)
3. 定義坐標(biāo)的 groupId、artifactId、version
4. 點(diǎn)擊刷新按鈕,引入最新加入的坐標(biāo)
如果不知道依賴的坐標(biāo)信息,可以到mvn的中央倉(cāng)庫(kù)( https://mvnrepository.com/ )中搜索
<dependencies>
<!-- 第1個(gè)依賴 : logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 第2個(gè)依賴 : junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
添加依賴的幾種方式:在中央倉(cāng)庫(kù)搜索的依賴坐標(biāo)
依賴傳遞
??在沒有使用maven時(shí),向項(xiàng)目中添加依賴的jar包,需要把所有的jar包都復(fù)制到項(xiàng)目工程下。如導(dǎo)入logback-classic時(shí),由于logback-classic又依賴了logback-core和slf4j,所以必須把這3個(gè)jar包全部復(fù)制到項(xiàng)目工程下。
??現(xiàn)在使用了maven,當(dāng)項(xiàng)目中需要使用logback-classic時(shí),只需要在pom.xml配置文件中,添加logback-classic的依賴坐標(biāo)即可。
??這是因?yàn)樵贛aven中,依賴具有傳遞性
依賴傳遞可以分為:
1. 直接依賴:在當(dāng)前項(xiàng)目中通過依賴配置建立的依賴關(guān)系
2. 間接依賴:被依賴的資源如果依賴其他資源,當(dāng)前項(xiàng)目間接依賴其他資源
比如以上圖中:
對(duì)于projectA 來說,projectB 就是直接依賴。
對(duì)于projectA 來說,projectC就是間接依賴。
??依賴具有傳遞性,A依賴B,B依賴C,如果A不想將C依賴進(jìn)來,是否可以做到?在maven項(xiàng)目中,可以通過排除依賴來實(shí)現(xiàn)。
??排除依賴:指主動(dòng)斷開依賴的資源。(被排除的資源無需指定版本),使用< exclusions>標(biāo)簽
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依賴, 主動(dòng)斷開依賴的資源-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
依賴范圍
??在項(xiàng)目中導(dǎo)入依賴的jar包后,默認(rèn)情況下,可以在任何地方使用,作用范圍:
1. 主程序范圍有效(main文件夾范圍內(nèi))
2. 測(cè)試程序范圍有效(test文件夾范圍內(nèi))
3. 是否參與打包運(yùn)行(package指令范圍內(nèi))
如果希望限制依賴的使用范圍,可以通過< scope>標(biāo)簽設(shè)置其作用范圍。scope標(biāo)簽的取值范圍:
scope值 | 主程序 | 測(cè)試程序 | 打包(運(yùn)行) | 范例 |
---|---|---|---|---|
compile(默認(rèn)) | Y | Y | Y | log4j |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驅(qū)動(dòng) |
??如上圖所示,給junit依賴通過scope標(biāo)簽指定依賴的作用范圍。 那么這個(gè)依賴就只能作用在測(cè)試環(huán)境,其他環(huán)境下不能使用。
生命周期
??Maven的生命周期就是為了對(duì)所有的構(gòu)建過程進(jìn)行抽象和統(tǒng)一。 描述了一次項(xiàng)目構(gòu)建,經(jīng)歷哪些階段。
Maven對(duì)項(xiàng)目構(gòu)建的生命周期劃分為3套(相互獨(dú)立):
??clean:清理工作。
??default:核心工作。如:編譯、測(cè)試、打包、安裝、部署等。
??site:生成報(bào)告、發(fā)布站點(diǎn)等。
這三套生命周期里面有很多很多的階段,這么多生命周期階段,其實(shí)常用的并不多,主要關(guān)注以下幾個(gè):
??clean:移除上一次構(gòu)建生成的文件
??compile:編譯項(xiàng)目源代碼
??test:使用合適的單元測(cè)試框架運(yùn)行測(cè)試(junit)
??package:將編譯后的文件打包,如:jar、war等
??install:安裝項(xiàng)目到本地倉(cāng)庫(kù)
當(dāng)要執(zhí)行指定的生命周期時(shí),有兩種執(zhí)行方式:
1. 在idea工具右側(cè)的maven工具欄中,選擇對(duì)應(yīng)的生命周期,雙擊執(zhí)行
2. 在DOS命令行中,通過maven命令執(zhí)行
執(zhí)行方式一
執(zhí)行方式二
Maven附錄
更新依賴索引
??有時(shí)候給idea配置完maven倉(cāng)庫(kù)信息后,在idea中依然搜索不到倉(cāng)庫(kù)中的jar包。這是因?yàn)閭}(cāng)庫(kù)中的jar包索引尚未更新到idea中。這個(gè)時(shí)候就需要更新idea中maven的索引,具體做法如下:
打開設(shè)置----搜索maven----Repositories----選中本地倉(cāng)庫(kù)-----點(diǎn)擊Update
清理maven倉(cāng)庫(kù)
??初始情況下,本地倉(cāng)庫(kù)是沒有任何jar包的,此時(shí)會(huì)從私服去下載(如果沒有配置,就直接從中央倉(cāng)庫(kù)去下載),可能由于網(wǎng)絡(luò)的原因,jar包下載不完全,這些不完整的jar包都是以lastUpdated結(jié)尾。此時(shí),maven不會(huì)再重新幫你下載,需要?jiǎng)h除這些以lastUpdated結(jié)尾的文件,然后maven才會(huì)再次自動(dòng)下載這些jar包。
??如果本地倉(cāng)庫(kù)中有很多這樣的以lastUpadted結(jié)尾的文件,可以定義一個(gè)批處理文件,在其中編寫如下腳本來刪除:
set REPOSITORY_PATH=E:\develop\apache-maven-3.6.1\mvn_reporem 正在搜索...
del /s /q %REPOSITORY_PATH%\*.lastUpdated
rem 搜索完畢
pause
操作步驟如下:
??1). 定義批處理文件del_lastUpdated.bat (直接創(chuàng)建一個(gè)文本文件,命名為del_lastUpdated,后綴名直接改為bat即可 )
??2). 在上面的bat文件上右鍵—》編輯 。修改文件:
修改完畢后,雙擊運(yùn)行即可刪除maven倉(cāng)庫(kù)中的殘留文件。
SpringBoot
??Spring Boot 可以幫助我們非??焖俚臉?gòu)建應(yīng)用程序、簡(jiǎn)化開發(fā)、提高效率 。
SpringBootWeb快速入門
案例需求
??需求:基于SpringBoot的方式開發(fā)一個(gè)web應(yīng)用,瀏覽器發(fā)起請(qǐng)求/hello后,給瀏覽器返回字符串 “Hello World ~”。
SpringBoot開發(fā)步驟
1、創(chuàng)建springboot工程,并勾選web開發(fā)相關(guān)依賴。
2、定義HelloController類,添加方法hello,并添加注解。
3、運(yùn)行測(cè)試
基于Spring官方骨架,創(chuàng)建SpringBoot工程。
基本信息描述完畢之后,勾選web開發(fā)相關(guān)依賴。
創(chuàng)建好之后,結(jié)構(gòu)如下:
定義請(qǐng)求處理類
??在com.example這個(gè)包下創(chuàng)建一個(gè)子包c(diǎn)ontroller,然后在controller包下新建一個(gè)類:HelloController
運(yùn)行測(cè)試
??運(yùn)行SpringBoot自動(dòng)生成的引導(dǎo)類
打開瀏覽器,輸入 http://localhost:8080/hello文章來源:http://www.zghlxwxcb.cn/news/detail-833414.html
Web分析
文章來源地址http://www.zghlxwxcb.cn/news/detail-833414.html
瀏覽器
輸入網(wǎng)址: http://192.168.100.11:8080/hello
通過IP地址192.168.100.11定位到網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī),
瀏覽器中輸入的localhost,就是127.0.0.1(本機(jī))
通過端口號(hào)8080找到計(jì)算機(jī)上運(yùn)行的程序
localhost:8080, 意思是在本地計(jì)算機(jī)中找到正在運(yùn)行的8080端口的程序
/hello是請(qǐng)求資源位置
資源:對(duì)計(jì)算機(jī)而言資源就是數(shù)據(jù)
web資源:通過網(wǎng)絡(luò)可以訪問到的資源(通常是指存放在服務(wù)器上的數(shù)據(jù))
localhost:8080/hello ,意思是向本地計(jì)算機(jī)中的8080端口程序,獲取資源位置 是/hello的數(shù)據(jù)
8080端口程序,在服務(wù)器找/hello位置的資源數(shù)據(jù),發(fā)給瀏覽器
服務(wù)器:(可以理解為ServerSocket)
接收到瀏覽器發(fā)送的信息(如:/hello)
在服務(wù)器上找到/hello的資源
把資源發(fā)送給瀏覽器
網(wǎng)絡(luò)三要素:
IP :網(wǎng)絡(luò)中計(jì)算機(jī)的唯一標(biāo)識(shí)
端口 :計(jì)算機(jī)中運(yùn)行程序的唯一標(biāo)識(shí)
協(xié)議 :網(wǎng)絡(luò)中計(jì)算機(jī)之間交互的規(guī)則
瀏覽器和服務(wù)器兩端進(jìn)行數(shù)據(jù)交互,使用http協(xié)議。
到了這里,關(guān)于后端學(xué)習(xí):Maven模型與Springboot框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!