Maven基礎(chǔ)

1. 定義

Maven 是一個項目管理工具胸嘴,它包含了一個項目對象模型 (POM:Project Object Model),一組標(biāo)準集合斩祭,一個項目生命周期(Project Lifecycle)筛谚,一個依賴管理系統(tǒng)(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯停忿。

2. 作用

1. 依賴管理

即:maven工程對jar包的管理過程。

傳統(tǒng)web項目蚊伞,我們必須將工程所依賴的jar包復(fù)制到工程中席赂,導(dǎo)致工程變得很大;

maven工程中不直接將jar包導(dǎo)入到工程中时迫,而是通過在pom.xml文件中添加所需jar包的坐標(biāo)颅停,在需要用到j(luò)ar包的時候,只要查找pom.xml文件掠拳,再通過pom.xml文件中的坐標(biāo)癞揉,到一個專門用于“存放jar包的倉庫”中根據(jù)坐標(biāo)從而找到這些jar包,再把這些包拿去運行。

2. 項目的一鍵構(gòu)建

指的是項目從編譯喊熟、測試柏肪、運行、打包芥牌、安裝 烦味,部署整個過程都交給 maven 進行管理,這個過程稱為構(gòu)建壁拉。

一鍵構(gòu)建指的是整個構(gòu)建過程谬俄,使用 maven 一個命令可以輕松完成整個工作。

3. 使用

1. 安裝

通過Maven官網(wǎng)進行下載弃理,具體下載版本如下:

1) bin代表二進制class文件(由java文件編譯而成)溃论,src代表源碼(java源碼),源碼source比binary大一些痘昌,一般正常使用下載bin類型即可钥勋,如果要學(xué)習(xí)源碼下載src類型。

2) .tar.gz是linux的壓縮包控汉,.zip是windows的壓縮包

bin.tar.gz是適用于linux笔诵、MacOsX系統(tǒng)的二進制文件

bin.zip是適用于windows的二進制文件

src.tar.gz是linux下的源碼

src.zip是windows的源碼

只需在windows正常使用maven時,下載第二個:

maven下載


Maven 下載后姑子,將 Maven 解壓到一個沒有中文沒有空格的路徑下乎婿;

bin:存放了maven的命令

boot:存放了一些maven本身的引導(dǎo)程序,如類加載器

conf:存放了maven的一些配置文件街佑,如setting.xml

lib:存放了maven本身運行所需要的jar包

環(huán)境變量配置

1)新增變量 MAVEN_HOME 谢翎,變量值就是你的 maven 安裝的路徑

2)配置變量Path,將%MAVEN_HOME%\bin追加到Path變量中

注意:maven需要電腦上首先安裝java環(huán)境沐旨,JDK1.7+版本

測試森逮;打開命令窗口,輸入:mvn -v磁携,顯示版本信息即安裝完成?

2. Maven倉庫

本地倉庫 :用來存儲從遠程倉庫或中央倉庫下載的插件和 jar 包褒侧,項目使用一些插件或 jar 包,優(yōu)先從本地倉庫查找谊迄;

遠程倉庫(私服):如果本地需要插件或者 jar 包闷供,本地倉庫沒有,默認去遠程倉庫下載统诺;

中央倉庫 :在 maven 軟件中內(nèi)置一個遠程倉庫地址 http://repo1.maven.org/maven2 歪脏,它是中央倉庫,服務(wù)于整個互聯(lián)網(wǎng),它是由 Maven 團隊自己維護,里面存儲了非常全的 jar 包,它包含了世界上大部分流行的開源項目構(gòu)件窍箍;

在 MAVE_HOME/conf/settings.xml 文件中配置本地倉庫位置豪硅,將localRepository標(biāo)簽中的內(nèi)容調(diào)整為本地倉庫地址哩照,即:<localRepository>D:\my_java\maven_repository</localRepository>

國內(nèi)從中央倉庫下載文件速度非常慢,可以使用阿里云鏡像舟误,即在mirrors中配置:

<mirror>

????<id>alimaven</id>

????<name>aliyun maven</name>

????<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

????<mirrorOf>central</mirrorOf>

</mirror>

3. Maven工程

一個 maven 工程葡秒,它的 src 目錄和 pom.xml 是必備的

src/main/java —— 存放項目的.java 文件

src/main/resources —— 存放項目資源文件,如 spring, hibernate 配置文件

src/test/java —— 存放所有單元測試.java 文件嵌溢,如 JUnit 測試類

src/test/resources —— 測試資源文件

src/main/webapp?—— 頁面資源眯牧, js、css赖草、圖片等(web項目)

target —— 項目輸出位置学少,編譯后的 class 文件會輸出到此目錄

pom.xml——maven 項目核心配置文件

4. Maven常用命令

1)mvn compile:編譯命令,作用是將src/main/java文件夾下的文件編譯為class文件輸出到target目錄下

2)mvn clean:清理命令秧骑,執(zhí)行clean會刪除target目錄及內(nèi)容

3)mvn test:測試命令版确,會執(zhí)行src/test/java文件夾下的單元測試類

4)mvn package:打包命令,對于java工程執(zhí)行package打包程jar包乎折,對于web工程打包程war包

5)mvn install:安裝命令绒疗,執(zhí)行install命令將maven打成jar包或者war包發(fā)布到本地倉庫

當(dāng)后面的命令執(zhí)行時,前面的操作過程也都會自動執(zhí)行骂澄。

5. Maven指令的生命周期

maven 對項目構(gòu)建過程分為三套相互獨立的生命周期

清理生命周期:clean吓蘑,在進行真正的構(gòu)建之前進行一些清理工作

默認生命周期:compile\test\package\install\deploy,構(gòu)建的核心部分

站點生命周期:生成項目報告坟冲,站點磨镶,發(fā)布站點

6. Maven概念模型

Maven 包含了一個項目對象模型 (Project Object Model),一組標(biāo)準集合健提,一個項目生命周期(Project Lifecycle)琳猫,一個依賴管理系統(tǒng)(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯私痹。

Maven概念模型

1.?項目對象模型 (Project Object Model)

一個maven工程都有一個pom.xml文件脐嫂,xml文件包含:

項目自身信息

項目運行所依賴的jar包信息

項目運行環(huán)境,如:jdk紊遵、tomcat等

2.?依賴管理系統(tǒng)(Dependency Management System)

項目對象模型中的項目運行所依賴的jar包的管理獨立出來叫依賴管理模型

通過maven的依賴管理對項目所依賴的jar包進行統(tǒng)一管理

<dependency>

????<groupId>javax.servlet.jsp</groupId>

????<artifactId>jsp-api</artifactId>

????<version>2.0</version>

</dependency>

jar包的坐標(biāo)有三部分組成:

1)公司組織的名稱(groupId)雹锣,如:javax.servlet.jsp

2)項目名(artifactId),如:jsp-api

3)版本號(version)癞蚕,如:2.0

3.?一個項目生命周期(Project Lifecycle)

使用 maven 完成項目的構(gòu)建,項目構(gòu)建包括:

清理生命周期:清理(clean)

默認生命周期:編譯(compile)辉哥、測試(test)桦山、打包(package)攒射、安裝(install)、部署(deploy)

每一個構(gòu)建項目的命令都對應(yīng)了maven底層的一個插件

4.?一組標(biāo)準集合

maven 將整個項目管理過程定義一組標(biāo)準恒水,比如:通過 maven 構(gòu)建工程有標(biāo)準的目錄結(jié)構(gòu)会放,有標(biāo)準的生命周期階段、依賴管理有標(biāo)準的坐標(biāo)定義等

5.?插件(plugin)目標(biāo)(goal)

maven 管理項目生命周期過程的那些命令都是基于底層插件完成的

4. idea開發(fā)maven項目

1. idea的maven配置

通過File-Settings配置maven钉凌,直接搜索找到maven對應(yīng)的配置項內(nèi)容

1)Maven home directory:指定本地maven安裝目錄

2)User settings file:指定setting配置文件路徑咧最,即MAVEN_HOME\conf\settings.xml

3)Local resposityory:自動根據(jù)配置文件路徑檢測本地倉庫路徑

配置項:Maven-Runner

VM Options:-DarchetypeCatalog=internal?-Dfile.encoding=GB2312(防止中文亂碼)

使用maven骨架創(chuàng)建maven工程時,需要遠程下載所需的插件御雕,為方便我們在不聯(lián)網(wǎng)狀態(tài)下創(chuàng)建maven工程矢沿,配置VM Options參數(shù),只要之前我們聯(lián)網(wǎng)下載過相關(guān)創(chuàng)建工程的插件酸纲,就會直接從本地找到對應(yīng)插件捣鲸,而不用再去網(wǎng)絡(luò)下載

2. 使用骨架創(chuàng)建maven的java工程

1)通過:New Project-Maven創(chuàng)建

2)勾選:Create from archetype選擇框,從idea提供的骨架中選擇quickstart闽坡,快速創(chuàng)建工程

3)項目名稱:名稱

? ? ?項目目錄:目錄

? ? ?單位名稱(GroupId):

? ? ?項目名稱(ArtifactId):

? ? ?版本號(Version):

4)再次確認Maven home directory(Maven安裝目錄)栽惶、User settings file(配置文件目錄)、Local respository(本地倉庫)

點擊完成疾嗅,即可完成創(chuàng)建外厂,第一次創(chuàng)建會很慢,要下載依賴的插件

目錄結(jié)構(gòu):

目錄結(jié)構(gòu)

3. 不使用骨架創(chuàng)建maven的java工程

類似使用骨架創(chuàng)建代承,只是在第二步的時候汁蝶,不勾選Create from archetype選擇框

建議不適用骨架創(chuàng)建,目錄結(jié)構(gòu)相對完整

4. 使用骨架創(chuàng)建maven的web工程

參照使用骨架創(chuàng)建項目次泽,在第二步的時候穿仪,選擇的骨架為webapp,其他操作沒有區(qū)別

目錄結(jié)構(gòu)不完整意荤,需要自己補充完整

1)創(chuàng)建對應(yīng)目錄:src/main/java 通過右鍵-Mark Directory as 屬性啊片,設(shè)置為:Sources Root

2)創(chuàng)建對應(yīng)目錄:src/main/resources 通過右鍵-Mark Directory as 屬性,設(shè)置為:Resources Root

3)創(chuàng)建對應(yīng)目錄:src/test/java 通過右鍵-Mark Directory as 屬性玖像,設(shè)置為:Test Sources Root

4)創(chuàng)建對應(yīng)目錄:src/test/resources 通過右鍵-Mark Directory as 屬性紫谷,設(shè)置為:Test Resources Root

補充完整的web目錄結(jié)構(gòu)

默認只有在webapp下面才能創(chuàng)建jsp文件,可以通過:File-Project Structure-Project Settings-Modules進行配置修改

選中當(dāng)前項目對應(yīng)的Web捐寥,在Web Resource Directories中笤昨,增加/刪除要創(chuàng)建jsp文件的目錄

5. 導(dǎo)入項目依賴的jar包

1. 格式

在 pom.xml 文件添加坐標(biāo),可以通過idea的提示功能完成坐標(biāo)的添加握恳,如:

<dependencies>

????<dependency>

????????<groupId>junit</groupId>

????????<artifactId>junit</artifactId>

????????<version>4.11</version>

????????<scope>test</scope>

????</dependency>

????<dependency>

????????<groupId>javax.servlet</groupId>

????????<artifactId>servlet-api</artifactId>

????????<version>2.5</version>

????????<scope>provided</scope>

????</dependency>

</dependencies>

2. 坐標(biāo)的來源方式

通過搜索maven中央倉庫瞒窒,找到對應(yīng)的jar包,把坐標(biāo)拷貝到pom.xml文件

3. 依賴范圍

1)compile:編譯范圍乡洼,指 A 在編譯時依賴 B崇裁,此范圍為默認依賴范圍匕坯,編譯范圍的依賴會用在

編譯、測試拔稳、運行葛峻,由于運行時需要所以編譯范圍的依賴會被打包

2)provided:provided 依賴只有在當(dāng) JDK 或者一個容器已提供該依賴之后才使用, provided 依

賴在編譯和測試時需要巴比,在運行時不需要术奖,比如:servlet api、jsp api 被 tomcat 容器提供

3)runtime:runtime 依賴在運行和測試系統(tǒng)的時候需要轻绞,但在編譯的時候不需要采记,比如:jdbc

的驅(qū)動包,由于運行時需要所以 runtime 范圍的依賴會被打包

4)test:test 范圍依賴 在編譯和運行時都不需要铲球,它們只有在測試編譯和測試運行階段可用挺庞,

比如:junit,由于運行時不需要所以 test范圍依賴不會被打包

5)system:system 范圍依賴與 provided 類似稼病,但是你必須顯式的提供一個對于本地系統(tǒng)中 JAR

文件的路徑选侨,需要指定 systemPath 磁盤路徑,system依賴不推薦使用

6.工程運行環(huán)境修改

1)添加tomcat7插件?

tomcat7插件配置

2)添加jdk插件

JDK配置

通過File-Settings-Live Template自定義模板

1)進入Live Template目錄

2)添加自定義Template Group:custom

3)添加Live Template然走,比如本例中的tomcat7插件

4)設(shè)置自定義模板的縮寫(Abbreviation):tomcat7

5)設(shè)置自定義模板內(nèi)容(Template text):上圖配置的插件內(nèi)容

6)定義模板適用范圍:一般用于xml文件

7)使用:直接在xml文件中輸入tomcat7援制,即可將模板內(nèi)容寫入配置文件

7.? pom 基本配置

pom.xml 是 Maven 項目的核心配置文件,位于每個工程的根目錄芍瑞,基本配置如下:

<project>:文件的根節(jié)點

<modelVersion>:pom.xml 使用的對象模型版本

<groupId>:項目名稱晨仑,一般寫項目的域名

<artifactId>:模塊名稱,子項目名或模塊名稱

<version>:產(chǎn)品的版本號拆檬,snapshot 為快照版本即非正式版本洪己,release 為正式發(fā)布版本

<packaging>:打包類型

????jar:執(zhí)行 package 會打成 jar 包

? ? war:執(zhí)行 package 會打成 war 包

????pom:用于 maven 工程的繼承,通常父工程設(shè)置為 pom

<name>:項目的顯示名竟贯,常用于 Maven 生成的文檔

<description>:項目描述答捕,常用于 Maven 生成的文檔

<dependencies>:項目依賴構(gòu)件配置,配置項目依賴構(gòu)件的坐標(biāo)

<build>:項目構(gòu)建配置屑那,配置編譯拱镐、運行插件等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市持际,隨后出現(xiàn)的幾起案子沃琅,更是在濱河造成了極大的恐慌,老刑警劉巖蜘欲,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件益眉,死亡現(xiàn)場離奇詭異,居然都是意外死亡姥份,警方通過查閱死者的電腦和手機呜叫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門空繁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朱庆,你說我怎么就攤上這事∶葡椋” “怎么了娱颊?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凯砍。 經(jīng)常有香客問我箱硕,道長,這世上最難降的妖魔是什么悟衩? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任剧罩,我火速辦了婚禮,結(jié)果婚禮上座泳,老公的妹妹穿的比我還像新娘惠昔。我一直安慰自己,他們只是感情好挑势,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布镇防。 她就那樣靜靜地躺著,像睡著了一般潮饱。 火紅的嫁衣襯著肌膚如雪来氧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天香拉,我揣著相機與錄音啦扬,去河邊找鬼。 笑死凫碌,一個胖子當(dāng)著我的面吹牛扑毡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播证鸥,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼僚楞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枉层?” 一聲冷哼從身側(cè)響起泉褐,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸟蜡,沒想到半個月后膜赃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡揉忘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年跳座,在試婚紗的時候發(fā)現(xiàn)自己被綠了端铛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疲眷,死狀恐怖禾蚕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狂丝,我是刑警寧澤换淆,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站几颜,受9級特大地震影響倍试,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛋哭,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一县习、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谆趾,春花似錦躁愿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怜跑,卻和暖如春样勃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背性芬。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工峡眶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人植锉。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓辫樱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俊庇。 傳聞我的和親對象是個殘疾皇子狮暑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355