摘要:軟件項(xiàng)目的管理就會(huì)變得簡(jiǎn)單很多。比如說(shuō)的驅(qū)動(dòng)程序,,在是獲取不到的,就需要手工上傳到里是倉(cāng)庫(kù)組,在里沒有這個(gè)概念,是特有的。
什么是Maven
Maven是一個(gè)采用純Java編寫的開源項(xiàng)目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來(lái)管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個(gè)叫做POM.xml的文件中..
Maven是一款跨平臺(tái)的項(xiàng)目管理工具,是一個(gè)開源的項(xiàng)目...
Maven主要服務(wù)于基于Java平臺(tái)的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理...
POM怎么理解呢???
我們使用Java是面向?qū)ο缶幊?,?duì)象就是我們的類
而Maven是面向項(xiàng)目,把我們的項(xiàng)目看做成是一個(gè)對(duì)象來(lái)進(jìn)行管理
為什么要使用Maven??在沒有使用Maven之前,我們的jar包是不是非常雜亂???看一下我存放jar包的地方
在沒有學(xué)習(xí)Maven之前,我還想過(guò)把這些jar包一一整理出來(lái),萬(wàn)一硬盤壞了,那我的jar包又要去重新找了..而且由于jar包版本的問(wèn)題,已經(jīng)吃過(guò)不少虧...這就需要大量時(shí)間去整理jar包了...
曾經(jīng)想手動(dòng)打jar包,結(jié)果Intellij idea好像不太支持這種功能??【我還沒找到】....于是只能依靠原生的jar 命令去打jar包了,過(guò)了一陣子,想重新打jar包的時(shí)候,又忘記命令了...非??鄲?/strong>...
而我們的Maven就非常好地解決了上面這兩種情況了,當(dāng)然了,Maven的功能并不是只有這么一丟丟,我只是舉了兩個(gè)小例子而已...隨著我們的學(xué)習(xí),你將會(huì)看到Maven的強(qiáng)大之處...
Maven可以管理項(xiàng)目的整個(gè)聲明周期,包括清除、編譯,測(cè)試,報(bào)告、打包、部署等等。
自動(dòng)構(gòu)建項(xiàng)目
軟件開發(fā): 可行性分析、需求分析、軟件設(shè)計(jì)、軟件開發(fā)、發(fā)布、運(yùn)維
軟件構(gòu)建: 軟件已經(jīng)開發(fā)完畢,需要構(gòu)建成一個(gè)產(chǎn)品進(jìn)行發(fā)布
構(gòu)建步驟:
清除--> 編譯-->測(cè)試-->報(bào)告-->打包(jarwar)-->安裝-->部署到遠(yuǎn)程 maven可以通過(guò)一個(gè)命令實(shí)現(xiàn)自動(dòng)構(gòu)建軟件項(xiàng)目
Maven擁有“約定優(yōu)于配置“這么一個(gè)理念,也就是說(shuō),把一些規(guī)范約定下來(lái),人們就這么用!如果我們事先約定好所有項(xiàng)目的目錄結(jié)構(gòu),標(biāo)準(zhǔn)開發(fā)過(guò)程(編譯,測(cè)試) , 所有人都遵循這個(gè)約定。軟件項(xiàng)目的管理就會(huì)變得簡(jiǎn)單很多。比如:如何過(guò)馬路(紅燈停綠燈行),如何開門,關(guān)門等。
安裝Maven去官網(wǎng)下載Maven軟件,解壓過(guò)后就算安裝完畢了...
配置環(huán)境變量因?yàn)镸aven是由Java編寫的,因此想要使用Maven,首先要配置Java的環(huán)境變量...
檢測(cè)安裝Maven是否成功,在控制臺(tái)上打上 mvn -version就行了...
Maven目錄結(jié)構(gòu)?bin:含有mvn運(yùn)行的腳本
?boot:含有plexus-classworlds類加載器框架
?conf:含有settings.xml配置文件
?lib:含有Maven運(yùn)行時(shí)所需要的java類庫(kù)
?Settings.xml 中默認(rèn)的用戶庫(kù): ${user.home}/.m2/repository[通過(guò)maven下載的jar包都會(huì)存儲(chǔ)到指定的個(gè)人倉(cāng)庫(kù)中]
?Maven默認(rèn)倉(cāng)庫(kù)下載地址在: maven的lib目錄下maven-model-builder-3.0.4.jar的pom.xml中
在我們Maven中,有本地倉(cāng)庫(kù)這么一個(gè)概念,我們可以在settings.xml配置文件中修改本地倉(cāng)庫(kù)的位置,比如我把本地倉(cāng)庫(kù)放到桌面上
IDEA下使用Maven詳情可參照詳細(xì)的Maven教程---Idea環(huán)境下
值得追加的是:在修改web.xml路徑的時(shí)候,那篇博文并沒有給出絕對(duì)的路徑...這里可能有些人不知道怎么寫。我給出來(lái)參考
X:UsersozcDesktopzhongfucheng3srcmainwebappWEB-INFweb.xmlmaven術(shù)語(yǔ)
在我們上一篇中已經(jīng)知道了在Intellij idea下是如何使用Maven的了,創(chuàng)建出來(lái)的目錄結(jié)構(gòu)是這樣子的:
上面的目錄結(jié)構(gòu)就是Maven所謂的”約定“,我們使用Maven來(lái)構(gòu)建Java項(xiàng)目,都是這種目錄結(jié)構(gòu)的...
接下來(lái)我們來(lái)了解一下Mavaen一些常用的術(shù)語(yǔ)
倉(cāng)庫(kù)本地倉(cāng)庫(kù)
Maven會(huì)把我們項(xiàng)目所構(gòu)建出來(lái)的jar包等等資源存放在本地倉(cāng)庫(kù)中。當(dāng)我們需要jar包的時(shí)候,Maven第一時(shí)間也是去本地倉(cāng)庫(kù)中尋找jar包
中心倉(cāng)庫(kù):
當(dāng)Maven在本地倉(cāng)庫(kù)和私服找不到我們需要的jar包的時(shí)候,就去中心倉(cāng)庫(kù)中幫我們下載對(duì)應(yīng)的jar包。那Maven怎么知道去哪里下載呢??其實(shí)Maven已經(jīng)配置好的了
apache-maven-3.2.1libmaven-model-builder-3.2.1orgapachemavenmodel下的POM.xml文件中已經(jīng)配置好了
central Central Repository http://repo.maven.apache.org/maven2 default false central Central Repository http://repo.maven.apache.org/maven2 default false never
私有服務(wù)器
存儲(chǔ)一些jar包的服務(wù)器,由于本地倉(cāng)庫(kù)不可能擁有大部分的jar包,一個(gè)團(tuán)隊(duì)要去開發(fā),免不了總是去中心倉(cāng)庫(kù)下載,這就非常耗費(fèi)時(shí)間了。如果私有服務(wù)器擁有這些jar包,那么每臺(tái)電腦就不用去中心倉(cāng)庫(kù)中下載了...
maven軟件構(gòu)建的生命周期軟件的生命周期就是以下
- 清除--> 編譯-->測(cè)試-->報(bào)告-->打包(jarwar)-->安裝-->部署
maven生命周期命令插件當(dāng)我們使用idea環(huán)境下開發(fā),maven生命周期的插件就非常清晰了...
maven坐標(biāo)
坐標(biāo)的組成: groupId + artifactId+ version
groupId:組id ,機(jī)構(gòu)名,公司名:好比公司的id,或者是公司包名
alibaba ——-》高德--》5.01版本
artifactId:構(gòu)建物id ,產(chǎn)品名或者產(chǎn)品的id
version :版本號(hào)
jar包組成:
artifactId-version.jar
pom.xml介紹 :project object model 項(xiàng)目對(duì)象模型 ,它是maven核心配置文件
當(dāng)我們把上面的術(shù)語(yǔ)了解完以后,對(duì)下面pom.xml配置文件就不會(huì)感到陌生了。
4.0.0 zhongfucheng3 zhongfucheng3 1.0-SNAPSHOT
如果我們想要我們的項(xiàng)目能夠有Junit測(cè)試的開發(fā)包,我們只要指定對(duì)應(yīng)的jar包依賴就行了..
scope應(yīng)用范圍有test、compile等等,默認(rèn)是compile,那么test和compile有什么區(qū)別呢?
間接依賴問(wèn)題 :依賴的jar包必須是 compile 范圍,假如是test范圍,則發(fā)布的jar包不會(huì)包含test范圍依賴的jar包,和依賴關(guān)系
Maven【私有倉(cāng)庫(kù)、上傳jar包、引用私服jar包、上傳本地項(xiàng)目到私服】test
前面已經(jīng)說(shuō)過(guò)了,我們使用Maven的使用,如果需要導(dǎo)入相對(duì)應(yīng)的jar包,Maven首先會(huì)在我們的本地倉(cāng)庫(kù)中尋找--->私有倉(cāng)庫(kù)--->中心倉(cāng)庫(kù)...
然而,我們的本地倉(cāng)庫(kù)常常沒有想要的jar包的,而經(jīng)常去中心倉(cāng)庫(kù)下載這就非常浪費(fèi)時(shí)間和資源了...因此我們一般都有一個(gè)私有倉(cāng)庫(kù)...
另外有些公司都不提供外網(wǎng)給項(xiàng)目組人員,因此就不能使用maven訪問(wèn)遠(yuǎn)程的倉(cāng)庫(kù)地址,所以很有必要在局域網(wǎng)里找一臺(tái)有外網(wǎng)權(quán)限的機(jī)器,搭建nexus私服,然后開發(fā)人員連到這臺(tái)私服上,這樣的話就可以通過(guò)這臺(tái)搭建了nexus私服的電腦訪問(wèn)maven的遠(yuǎn)程倉(cāng)庫(kù)
準(zhǔn)備步驟我們使用的是nexus框架來(lái)搭建私服,它屬于sonatype 機(jī)構(gòu)的開源框架,用該框架架設(shè)maven 私有服務(wù)器
Nexus環(huán)境搭建
第一步:下載nexus-webapp-1.9.2.4.war包,然后拷貝到tomcat下的webapps目錄中
第二步:?jiǎn)?dòng)tomcat 默認(rèn)登錄賬戶密碼為: admin admin123
第三步:訪問(wèn)http://localhost:8080/項(xiàng)目名稱/
tomcat會(huì)自動(dòng)解析war包,然后就自動(dòng)下載插件...
訪問(wèn)該項(xiàng)目,進(jìn)到首頁(yè)
登陸...
proxy:是遠(yuǎn)程倉(cāng)庫(kù)的代理。比如說(shuō)在nexus中配置了一個(gè)central repository的proxy,當(dāng)用戶向這個(gè)proxy請(qǐng)求一個(gè)artifact,這個(gè)proxy就會(huì)先在本地查找,如果找不到的話,就會(huì)從遠(yuǎn)程倉(cāng)庫(kù)下載,然后返回給用戶,相當(dāng)于起到一個(gè)中轉(zhuǎn)的作用
Hosted:是宿主倉(cāng)庫(kù),用戶可以把自己的一些構(gòu)件,deploy到hosted中,也可以手工上傳構(gòu)件到hosted里。比如說(shuō)oracle的驅(qū)動(dòng)程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted里
Group:是倉(cāng)庫(kù)組,在maven里沒有這個(gè)概念,是nexus特有的。目的是將上述多個(gè)倉(cāng)庫(kù)聚合,對(duì)用戶暴露統(tǒng)一的地址,這樣用戶就不需要在pom中配置多個(gè)地址,只要統(tǒng)一配置group的地址就可以了右邊那個(gè)Repository Path可以點(diǎn)擊進(jìn)去,看到倉(cāng)庫(kù)中artifact列表。不過(guò)要注意瀏覽器緩存。我今天就發(fā)現(xiàn),明明構(gòu)件已經(jīng)更新了,在瀏覽器里卻看不到,還以為是BUG,其實(shí)是被瀏覽器緩存了
virtual:也是中央倉(cāng)庫(kù)鏡像,支持M1老版本
每個(gè)倉(cāng)庫(kù)的作用:
3rd party: 無(wú)法從公共倉(cāng)庫(kù)獲得的第三方發(fā)布版本的構(gòu)件倉(cāng)庫(kù)
Apache Snapshots: 用了代理ApacheMaven倉(cāng)庫(kù)快照版本的構(gòu)件倉(cāng)庫(kù)
Central: 用來(lái)代理maven中央倉(cāng)庫(kù)中發(fā)布版本構(gòu)件的倉(cāng)庫(kù)
Central M1 shadow: 用于提供中央倉(cāng)庫(kù)中M1格式的發(fā)布版本的構(gòu)件鏡像倉(cāng)庫(kù)
Codehaus Snapshots: 用來(lái)代理CodehausMaven 倉(cāng)庫(kù)的快照版本構(gòu)件的倉(cāng)庫(kù)
Releases: 用來(lái)部署管理內(nèi)部的發(fā)布版本構(gòu)件的宿主類型倉(cāng)庫(kù)
Snapshots:用來(lái)部署管理內(nèi)部的快照版本構(gòu)件的宿主類型倉(cāng)庫(kù)
倉(cāng)庫(kù)組是一個(gè)虛擬的概念,就是通過(guò)對(duì)實(shí)體倉(cāng)庫(kù)(proxy、hosted)進(jìn)行聚合, 對(duì)外暴露一個(gè)統(tǒng)一的地址這里要注意的是,放到左邊的倉(cāng)庫(kù),才是會(huì)被聚合的倉(cāng)庫(kù)
倉(cāng)庫(kù)組的配置順序:
上傳jar包到私服直接通過(guò)網(wǎng)站上傳,把桌面上的pig-0.12.1.jar上傳到私有服務(wù)器中
再次查看的時(shí)候,已經(jīng)上傳上去了
從私服依賴jar包在pom.xml文件配置私服的路徑、組id、版本等等
true public public http://localhost:8080/nexus-2.6.2/content/groups/public/ never true public public http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/
在本地倉(cāng)庫(kù)中也把私服的jar包下載下來(lái)了
把本地項(xiàng)目發(fā)布到私服server的配置可以在Maven的settings.xml中寫上
releases admin admin123 snapshots admin admin123
值得注意的是:你得留意你用的是哪個(gè)Maven,是你自己下載的Maven還是使用Idea集成的Maven,如果沒有配置的話,那么就會(huì)出現(xiàn)401錯(cuò)誤。
snapshots http://127.0.0.1:8080/nexus-2.6.2/content/repositories/snapshots/ releases http://127.0.0.1:8080/nexus-2.6.2/content/repositories/releases/
再次查看倉(cāng)庫(kù)組
總結(jié)Maven能夠很好地管理我們的項(xiàng)目,還能夠管理我們的jar包。在構(gòu)建項(xiàng)目的時(shí)候十分方便。
安裝Maven需要配置JAVA_HOME環(huán)境變量。
Settings.xml 配置了我們的本地倉(cāng)庫(kù)位置。
過(guò)度去中心倉(cāng)庫(kù)去加載jar包的話,會(huì)非常影響性能的。我們搭建一個(gè)私有倉(cāng)庫(kù)的話,如果私有倉(cāng)庫(kù)有對(duì)應(yīng)的jar包,就可以直接在私有倉(cāng)庫(kù)中找了。
學(xué)會(huì)如何在私有倉(cāng)庫(kù)的頁(yè)面上上傳jar包上去
學(xué)會(huì)如何在項(xiàng)目上關(guān)聯(lián)私有倉(cāng)庫(kù)的jar包
學(xué)會(huì)如何把本地項(xiàng)目上傳到私有倉(cāng)庫(kù)中。
如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68706.html
摘要:之前雖然一直用,但比較依賴于的。什么是是使用開發(fā)的項(xiàng)目構(gòu)建工具,至于它的作用網(wǎng)上相關(guān)的文章數(shù)不勝數(shù),在此也不再累述??偨Y(jié)至此介紹了的基本使用方式,以上的功能在中也有很好的支持。 之前雖然一直用Maven,但比較依賴于IDE的Maven-Plugins。最近抽了點(diǎn)時(shí)間決定系統(tǒng)得學(xué)習(xí)一下。 什么是Maven Maven是使用Java開發(fā)的項(xiàng)目構(gòu)建工具,至于它的作用網(wǎng)上相關(guān)的文章數(shù)不勝數(shù),在...
摘要:學(xué)習(xí)筆記先生,您在寫代碼嗎不,我們正在完成一項(xiàng)偉大的工程。于是打算重新學(xué)習(xí)一下。中央倉(cāng)庫(kù)鏡像為了分擔(dān)中央倉(cāng)庫(kù)的流量,提升用戶的訪問(wèn)速度。生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。修改源碼后也需要逐個(gè)手動(dòng)進(jìn)行操作。 maven學(xué)習(xí)筆記 先生,您在寫代碼嗎? 不,我們正在完成一項(xiàng)偉大的工程。 前言 在剛學(xué)maven時(shí),我就把maven當(dāng)作一個(gè)引入jar包的工具而已,以前是自己下載jar包,現(xiàn)在是只用...
摘要:如果子模塊不聲明依賴的使用,即使該依賴在父中的中聲明了,也不會(huì)產(chǎn)生任何效果。 不管eclipse有沒有被被時(shí)代拋棄,反正是被我拋棄了,因?yàn)镮DEA是真的好用 現(xiàn)在公司的項(xiàng)目基本都是基于maven的多module項(xiàng)目,controller,service,model,dao等都被分成了不同的module,這樣做當(dāng)然也是為了解耦。 這些module可根據(jù)需要在pom.xml配置來(lái)打成war...
閱讀 1406·2021-09-30 09:55
閱讀 1930·2021-08-27 13:10
閱讀 2277·2019-08-29 17:22
閱讀 1332·2019-08-29 16:30
閱讀 3497·2019-08-26 18:37
閱讀 2379·2019-08-26 11:47
閱讀 1189·2019-08-23 14:44
閱讀 1765·2019-08-23 13:46