日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解 maven 的核心概念

發(fā)布時(shí)間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解 maven 的核心概念 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。

本文以類圖的方式,介紹 maven 核心的 12 個(gè)概念及相互之間的關(guān)系。

Table of Contents

  • 1 maven管理的目標(biāo):工程(Project)
    • 1.1 工程依賴關(guān)系
    • 1.2 工程聚合關(guān)系
  • 2 maven的核心:生命周期和階段
  • 3 功能實(shí)現(xiàn):插件和Goal
  • 4 倉庫(Repository)
  • 5 小結(jié)

1?maven管理的目標(biāo):工程(Project)

?

maven是一個(gè)軟件工程(Software Project)管理工具。 對(duì)于maven來說,一個(gè)軟件工程的唯一標(biāo)識(shí)是由開發(fā)者(groupId)、生成物(artifactId)、版本(version) 共同決定的。

每個(gè)工程都有一個(gè)打包類型,可以是jar, war, ear 或 pom。打包類型決定了工程最終產(chǎn)物的類型。 其中pom類型用于構(gòu)件多模塊工程。

工程之間有兩種關(guān)系:依賴和聚合。

1.1?工程依賴關(guān)系

依賴關(guān)系的管理是maven最為人稱道的地方。一個(gè)工程可以依賴多個(gè)其他工程, 通過工程的唯一標(biāo)識(shí)(groupId+artifactId+version)可以明確指明依賴的庫及版本,而且能夠處理 依賴關(guān)系的傳遞。 maven可以指定依賴的作用范圍(scope),包括以下幾種:

scope編譯期測(cè)試期運(yùn)行期說明
*compileVVV默認(rèn)scope
test?V?只在測(cè)試期依賴,如junit包
providedVV?運(yùn)行期由容器提供,如servlet-api包
runtime?VV編譯期間不需要直接引用
systemVV?編譯和測(cè)試時(shí)由本機(jī)環(huán)境提供

由于依賴關(guān)系的傳遞性可能會(huì)導(dǎo)致依賴的版本、scope等發(fā)生沖突,maven提供了仲裁機(jī)制,同時(shí)也 允許自己通過配置進(jìn)行依賴管理。

1.2?工程聚合關(guān)系

前面提到pom類型用于于構(gòu)件多模塊工程,這體現(xiàn)了project之間的一種聚合關(guān)系: 將一系列小的模塊聚合成整個(gè)產(chǎn)品。

通過聚合后的工程可以同時(shí)管理每個(gè)相關(guān)模塊的構(gòu)建、清理、文檔等工作。 聚合關(guān)系通過在子工程中指定一個(gè)pom類型的project作為父project來定義。

2?maven的核心:生命周期和階段

maven將工程(Project)的構(gòu)建過程理解為不同的生命周期(LifeCycle)和階段(Phase)。 在工程的構(gòu)建過程中,存在著不同的生命周期,這些生命周期互相獨(dú)立,之間也沒有一定的順序關(guān)系。 每個(gè)生命周期又劃分為不同的階段(Phase)。階段之間有明確的順序關(guān)系, 同一生命周期內(nèi)的階段必須按順序依次執(zhí)行。

maven內(nèi)置了三個(gè)生命周期,并為每個(gè)生命周期內(nèi)置了一些階段。 下面列舉出maven內(nèi)置的生命周期及主要的階段:?

  • default:構(gòu)建(Build)
  • validate:驗(yàn)證項(xiàng)目是否正確,所有必需的信息是否可用。
  • compile:編譯項(xiàng)目中的代碼。
  • test:用相關(guān)的單元測(cè)試框架測(cè)試編譯后的代碼,這些運(yùn)行的測(cè)試并不會(huì)隨項(xiàng)目打包和布署。
  • package:將編譯后的代碼打包成相應(yīng)的格式文件,如jar包。
  • integration-test: 如果需要在一個(gè)綜合環(huán)境中運(yùn)行我們的測(cè)試,這個(gè)階段將會(huì)運(yùn)行和布署項(xiàng)目到該環(huán)境中。
  • verify: 檢查項(xiàng)目的包是否正確和符合要求。
  • install:將包安裝到本地maven倉庫,可以讓其他項(xiàng)目作為依賴使用該包。
  • deploy:將包發(fā)布到遠(yuǎn)程的maven倉庫,并提供給其他開發(fā)者使用。
  • clean:清理
  • pre-clean 準(zhǔn)備清理
  • clean 執(zhí)行清理工作
  • post-clean 執(zhí)行清理后的后續(xù)工作
  • site:生成項(xiàng)目文檔和站點(diǎn)
  • pre-site 準(zhǔn)備生成
  • site 生成項(xiàng)目站點(diǎn)和文檔
  • post-site 執(zhí)行生成文檔后的后續(xù)工作
  • site-deploy 發(fā)布項(xiàng)目文檔

更詳細(xì)的phase說明參考:?http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

3?功能實(shí)現(xiàn):插件和Goal

Maven中定義的工程周期和階段只是抽象的概念,不涉及具體的功能。 具體的功能由插件(Plugin)實(shí)現(xiàn)。一個(gè)插件可以實(shí)現(xiàn)多個(gè)目標(biāo)(Goal)。

為了解耦插件的功能和工程階段,實(shí)現(xiàn)高度的可配置性,maven規(guī)定插件只是實(shí)現(xiàn)目標(biāo)的功能, 通過配置來決定在哪個(gè)階段執(zhí)行(Execution)哪些目標(biāo)操作。 甚至可以把一個(gè)Goal綁定到多個(gè)Phase,以實(shí)現(xiàn)復(fù)用。

maven內(nèi)置了一些默認(rèn)的插件,并根據(jù)不同的工程packing類型在各個(gè)phase中默認(rèn)綁定了一些goal。 下表中列出default生命周期中各階段默認(rèn)綁定的goal,其中g(shù)oal按照管理使用pluginname:goalname的方式標(biāo)記:

PahsePlugin:Goal
process-resourcesresources:resources
compilecompiler:compile
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test
packageejb:ejb/ejb3:ejb3/jar:jar/par:par/rar:rar/war:war
installinstall:install
deploydeploy:deploy

最后需要說明的是,maven的插件是一種packaging類型為maven-plugin的project, 可以使用maven project的依賴,配置插件等等一切特性。

4?倉庫(Repository)

倉庫主要用于獲取工程依賴的其他工程的生成物,也可用來部署(deploy)maven工程的生成物。 生成物包括各種打包的生成物以及pom文件。

如果有必要,一個(gè)工程可以部署到多個(gè)倉庫。

倉庫可以分為本地庫(local)和遠(yuǎn)程庫(remote)。本地庫通常位于本機(jī)的~/.m2/repository文件夾, 遠(yuǎn)程庫最常見的是maven中央庫(),此外也會(huì)有一些私服庫用于企業(yè)內(nèi)部。

http://repository.jboss.com/maven2/

5?小結(jié)

本文梳理了maven的核心概念,整個(gè)maven核心概念的全貌如下:

?

概念說明
LifeCycle生命周期,maven內(nèi)置default,sie,clean三個(gè)生命周期
Phase階段,每個(gè)生命周期有不同的階段
Plugin插件,實(shí)現(xiàn)實(shí)際的構(gòu)建功能
Goal一個(gè)插件可以實(shí)現(xiàn)多個(gè)goal,goal具備具體的功能
Execution通過配置,決定在某個(gè)Phase執(zhí)行哪些Goal
Projectmaven管理的目標(biāo):軟件工程,小的工程可以聚合成大工程
PackageType為了便于管理工程,按照構(gòu)建目標(biāo)區(qū)分成不同的工程類型,如jar,war,ear等
Dependency依賴,project之間存在依賴關(guān)系
DependencyScopemaven對(duì)依賴定義了不同的作用范圍
Management可以配置一個(gè)工程如何管理依賴關(guān)系
Repository倉庫,存放包,分為本地庫和遠(yuǎn)程庫
Build構(gòu)建的動(dòng)作。使用maven管理工程,主要是指定將project構(gòu)建到某個(gè)phase

Author: Holbrook Wong?<holbrook@holbrook.imac>

Date: 2012-12-24 09:20:24 CST

HTML generated by org-mode 6.33x in emacs 23

?

轉(zhuǎn)自:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html#sec-1.1

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的理解 maven 的核心概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。