第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Maven 生命周期

我們今天帶來(lái)的是 Maven 的另一個(gè)重要概念–生命周期。在學(xué)習(xí)了 Maven 的生命周期之后,在使用 Maven 的過(guò)程中,就能夠夠好的理解每一步操作的意義。

1. 什么是生命周期

其實(shí)生命周期這個(gè)概念并不是 Maven 首創(chuàng)的,因?yàn)榧词共挥?Maven,這些事情也是需要我們?nèi)プ龅?。想象一下在沒(méi)有 Maven 的時(shí)候,我們開(kāi)發(fā)完一個(gè)項(xiàng)目之后,一般是直接使用 Java 的相關(guān)命令進(jìn)行編譯,打包等等工作。

但是這些工作無(wú)聊而且繁瑣,基本上充斥在開(kāi)發(fā)者每天日常的工作中,無(wú)論是開(kāi)發(fā)新功能,還是修改一個(gè) Bug,都需要重復(fù)以上操作。當(dāng)然有聰明的開(kāi)發(fā)者,也會(huì)將這些每天重復(fù)的事情做成腳本來(lái)執(zhí)行。

那么問(wèn)題又來(lái)了,不同公司的不同項(xiàng)目之間或多或少會(huì)存在些許差異,這種時(shí)候,可能就需要開(kāi)發(fā)者針對(duì)這些差異來(lái)定制一些步驟,或者腳本。也就是說(shuō),每當(dāng)我們開(kāi)始開(kāi)發(fā)一個(gè)新項(xiàng)目的時(shí)候,或者換到另一個(gè)項(xiàng)目組的時(shí)候,我們構(gòu)建項(xiàng)目的步驟或者方式都可能會(huì)發(fā)生變化。

Maven 的出現(xiàn),可以說(shuō)是很大程度上緩解了這種問(wèn)題的發(fā)生。通過(guò)吸取很多項(xiàng)目的經(jīng)驗(yàn),Maven 定義了一套完整而且統(tǒng)一的生命周期模型。使用這個(gè)模型,我們將構(gòu)建的細(xì)節(jié)交給 Maven,只需要理解對(duì)應(yīng)生命周期的含義即可完成構(gòu)建。就好像,人到了青少年的時(shí)候,就要去上學(xué),到了青年的時(shí)候,就要出來(lái)工作類(lèi)似,我們不需要知道上學(xué)或者工作中具體的事情,只需要知道,到了這個(gè)階段,能夠做這個(gè)事情就可以了。

2. 生命周期詳解

Maven 的生命周期并非只有一套,而是有三套,并且這三套生命周期之間是沒(méi)有關(guān)系的。一套生命周期包含很多個(gè)不同的階段,這些不同的階段是有順序的,有些階段必須要在某個(gè)階段完成之后,才能進(jìn)行。Maven 的三套生命周期分別為:clean(清理),default(默認(rèn))site(站點(diǎn))。接下來(lái)我們就一一介紹一下這三個(gè)生命周期。

2.1 clean 生命周期

clean 生命周期包括:

  1. pre-clean: 清理前的準(zhǔn)備工作;
  2. clean:清理上一次構(gòu)建的結(jié)果;
  3. post-clean: 清理結(jié)束后需要完成的工作。

一般情況下,Maven 的構(gòu)建結(jié)果會(huì)生成在 target 目錄下,我們執(zhí)行 mvn clean 命令后,這個(gè)目錄會(huì)被清空。

從上圖,我們可以看到,對(duì)應(yīng)的 target 目錄被清理干凈了。

2.2 default生命周期

default 生命周期應(yīng)該算是大多數(shù)開(kāi)發(fā)者最為熟悉的生命周期,也是平時(shí)在開(kāi)發(fā)過(guò)程中最常用的生命周期。

(clean,site 并不屬于 default 生命周期)
在 default 生命周期中,最常用的幾個(gè)階段包括:
  1. validate:驗(yàn)證階段。驗(yàn)證項(xiàng)目構(gòu)建過(guò)程中需要的信息的正確性;
  2. compil:編譯階段;
  3. test:測(cè)試階段。使用測(cè)試框架對(duì)項(xiàng)目進(jìn)行測(cè)試,打包過(guò)程中,非必要階段,可以跳過(guò)執(zhí)行。
  4. package:打包階段。將編譯好的文件打包成 jar 包,war 包或者 ear 包;
  5. verify:檢查階段。檢查打包結(jié)果的有效性;
  6. install:本地部署階段。將包部署到本地倉(cāng)庫(kù),可以提供給本地開(kāi)發(fā)過(guò)程中其他項(xiàng)目使用;
  7. deploy:遠(yuǎn)程倉(cāng)庫(kù)部署階段。將最終的包復(fù)制到遠(yuǎn)程倉(cāng)庫(kù),提供給使用該倉(cāng)庫(kù)的其他開(kāi)發(fā)者使用。

這里我們介紹的只是在 default 生命周期中最常用的,其實(shí)在這些階段執(zhí)行的過(guò)程中,還會(huì)有其他的階段需要執(zhí)行,但是并非很常用。另外,不出意外的情況下,在生命周期中,后執(zhí)行的階段要等先執(zhí)行的階段執(zhí)行完再執(zhí)行。

我們?cè)囍鴪?zhí)行 Maven 的打包命令:mvn package -DskipTests。執(zhí)行完成之后,可以看到其所經(jīng)過(guò)的生命周期。因此,當(dāng)我們想要構(gòu)建項(xiàng)目的時(shí)候,并不需要分別執(zhí)行 package 階段之前的階段,而是 Maven 自動(dòng)為我們執(zhí)行。突然發(fā)現(xiàn),原來(lái)構(gòu)建項(xiàng)目是如此的簡(jiǎn)單,方便。

2.3 site 生命周期

很多時(shí)候,我們不僅僅需要構(gòu)建我們的項(xiàng)目,還需要生成項(xiàng)目文檔或者站點(diǎn)。site 生命周期則是來(lái)幫助我們做這件事情的,它能夠根據(jù)我們項(xiàng)目中 pom.xml 的信息,來(lái)生成一個(gè)友好的站點(diǎn)。

跟其他的生命周期一樣,site 生命周期也包含不止一個(gè)階段:

  1. pre-site:準(zhǔn)備階段。在生成站點(diǎn)前所需要做的工作;
  2. site:生成站點(diǎn)階段;
  3. post-site:結(jié)束階段。生成站點(diǎn)結(jié)束后所需要做的工作;
  4. site-deploy:發(fā)布階段。我們可以將上面生成的站點(diǎn)發(fā)布到對(duì)應(yīng)服務(wù)器中。

3.插件

3.1 插件目標(biāo)

其實(shí)在 Maven 的世界中,生命周期只是一個(gè)抽象的模型,其本身并不會(huì)直接去做事情,真正幫我們完成事情的是 Maven 的插件。Maven 的插件也屬于構(gòu)件的一種,也是可以放到 Maven 倉(cāng)庫(kù)當(dāng)中的。

通常情況下,一個(gè)插件可以做 A、B、C 等等不止一件事情,但是我們又沒(méi)有必要為每一個(gè)功能都做一個(gè)單獨(dú)的插件。這種時(shí)候,我們一般會(huì)給這個(gè)插件綁定不同的目標(biāo),而這些目標(biāo)則是對(duì)應(yīng)其不同的功能。

當(dāng)我們使用一個(gè)插件的目標(biāo)的時(shí)候,我們可以執(zhí)行命令:mvn pluginName:goalName。例如當(dāng)我們執(zhí)行dependency插件的 list 目標(biāo)的時(shí)候,我們可以執(zhí)行命令:mvn dependency:list。

使用該插件目標(biāo),我們可以看到目前我們項(xiàng)目中所有依賴(lài)的情況。

3.2 插件綁定

我們說(shuō) Maven 的生命周期只是抽象的概念,真正幫我們完成事情的是插件,其實(shí)更確切的說(shuō),應(yīng)該是生命周期與插件對(duì)應(yīng)的目標(biāo)綁定,來(lái)完成具體的功能。
圖片描述

4. 小結(jié)

在本節(jié)中,我們?cè)敿?xì)介紹了 Maven 的生命周期,常用的生命周期,以及其與插件的對(duì)應(yīng)關(guān)系,簡(jiǎn)單的工作原理。學(xué)完之后,能夠加深 Maven 的理解,減少使用過(guò)程中的誤解。