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 解壓到一個沒有中文沒有空格的路徑下乎婿;
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)的邏輯私痹。
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):
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
默認只有在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插件?
2)添加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)建配置屑那,配置編譯拱镐、運行插件等