Maven學(xué)習(xí):Maven 自動(dòng)化構(gòu)建工具

Maven簡(jiǎn)介

image.png

官網(wǎng):http://maven.apache.org/

軟件是一個(gè)工程

我們?cè)谌粘I畛D苈?tīng)到工程這個(gè)詞有缆,像橋梁工程拼弃、道路工程竟稳、南水北調(diào)工程等等。

工程說(shuō)簡(jiǎn)單點(diǎn)就是各個(gè)行業(yè)的從業(yè)人員通過(guò)總結(jié)規(guī)律或者方法蝗砾,以最短的時(shí)間和人力汇荐、物力來(lái)做出高效可靠的東西。我們也就能理解橋梁工程棍厌,其實(shí)就是人們通過(guò)經(jīng)驗(yàn)的總結(jié)和各種研究得出來(lái)的肾胯、用來(lái)修建橋梁時(shí)所采用的高效的方法,當(dāng)然這種方法是可復(fù)用的耘纱。我們將這種作工程的思想應(yīng)用到軟件上敬肚,于是就產(chǎn)生了—軟件工程。

軟件工程:為了能夠?qū)崿F(xiàn)軟件的流水線式生產(chǎn)束析,在設(shè)計(jì)和構(gòu)建軟件時(shí)能夠有一種規(guī)范和工程化的方法艳馒,人們便提出了軟件工程概念。

上面的內(nèi)容做個(gè)日常生活的類比畸陡,做道菜就是一個(gè)工程鹰溜。今天心情好,想吃紅燒肉丁恭,自動(dòng)動(dòng)手做:
1.想買什么豬的那個(gè)位置的肉曹动,黑豬肉,土豬肉等牲览,使用冰糖還是綿白糖墓陈,用什么牌子的醬油等
2.到菜市場(chǎng)購(gòu)買各種原料。
3.準(zhǔn)備材料第献,洗肉贡必,切塊,花椒庸毫,大料等
4.開(kāi)始做了仔拟,肉下鍋燉煮,不同時(shí)間加入花椒飒赃,大料利花,冰糖,醬油
5.燉煮一段時(shí)間后载佳,看肉是否熟透炒事,嘗試口味,是不是咸了等等
6.做好了蔫慧,開(kāi)始吃了
7.需要刷碗挠乳,倒垃圾

這些工作從頭做到尾步驟非常繁瑣,每個(gè)步驟都是費(fèi)時(shí)費(fèi)力的。所以才出現(xiàn)凈菜睡扬,半成品菜盟蚣,拿回家直接做可以了,只做 6,7 步驟就可以 卖怜。

軟件開(kāi)發(fā)需要編譯代碼—>開(kāi)發(fā)人員自己測(cè)試代碼—>把代碼打包—>部署項(xiàng)目到測(cè)試服務(wù)器—>測(cè)試人員測(cè)試功能—>測(cè)試測(cè)試出 bug

開(kāi)發(fā)人員需要修改bug—>開(kāi)發(fā)人員自己測(cè)試代碼—>把代碼打包—>部署項(xiàng)目到測(cè)試服務(wù)器—>測(cè)試人員測(cè)試功能—>直到符合功能要求刁俭。

上述過(guò)程需要重復(fù)多次,大型項(xiàng)目中構(gòu)建項(xiàng)目比較復(fù)雜韧涨,有很多的配置文件牍戚,jar 文件,多個(gè)子項(xiàng)目等等虑粥。都用人力完成費(fèi)時(shí)費(fèi)力如孝,效率比較低。maven 可以讓我們從上面的工作中解脫出來(lái)娩贷。

maven 是自動(dòng)化構(gòu)建工具第晰。

傳統(tǒng)項(xiàng)目開(kāi)發(fā)存在的問(wèn)題

一個(gè)項(xiàng)目做成一個(gè)工程,造成工程比較龐大彬祖,需要使用多模塊來(lái)劃分項(xiàng)目茁瘦;
項(xiàng)目中需要的數(shù)量眾多的 jar 包,需要手動(dòng)下載并引入储笑,并且多個(gè)項(xiàng)目需要的 jar 包存在重復(fù)的問(wèn)題甜熔;
項(xiàng)目中需要的 jar 包有版本兼容的問(wèn)題,需要手動(dòng)解決突倍;
項(xiàng)目中需要的 jar 包又依賴其它的 jar 包腔稀,需要手動(dòng)解決。

Maven 概述

Maven 是 Apache 軟件基金會(huì)組織維護(hù)的一款自動(dòng)化構(gòu)建工具羽历,專注服務(wù)于 Java 平臺(tái)的項(xiàng)目構(gòu)建和依賴管理焊虏。Maven 這個(gè)單詞的本意是:專家,內(nèi)行秕磷。讀音是['me?v(?)n]或['mevn]诵闭。

Maven 是目前最流行的自動(dòng)化構(gòu)建工具,對(duì)于生產(chǎn)環(huán)境下多框架澎嚣、多模塊整合開(kāi)發(fā)有重要作用疏尿,Maven 是一款在大型項(xiàng)目開(kāi)發(fā)過(guò)程中不可或缺的重要工具。

Maven 可以整合多個(gè)項(xiàng)目之間的引用關(guān)系币叹,我們可以根據(jù)業(yè)務(wù)和分層需要任意拆分一個(gè)項(xiàng)目润歉;
Maven 提供規(guī)范的管理各個(gè)常用 jar 包及其各個(gè)版本模狭,并且可以自動(dòng)下載和引入項(xiàng)目中颈抚;
Maven 可以根據(jù)指定版本自動(dòng)解決 jar 包版本兼容問(wèn)題;
Maven 可以把 jar 包所依賴的其它 jar 包自動(dòng)下載并引入項(xiàng)目。
類似自動(dòng)化構(gòu)建工具還有:Ant, Maven, Gradle贩汉。

構(gòu)建過(guò)程中的各個(gè)環(huán)節(jié):清理驱富、編譯、測(cè)試匹舞、報(bào)告褐鸥、打包、安裝赐稽、部署叫榕。

構(gòu)建(build),是面向過(guò)程的(從開(kāi)始到結(jié)尾的多個(gè)步驟)姊舵,涉及到多個(gè)環(huán)節(jié)的協(xié)同工作晰绎。

構(gòu)建過(guò)程的幾個(gè)主要環(huán)節(jié)
①清理:刪除以前的編譯結(jié)果,為重新編譯做好準(zhǔn)備括丁。
②編譯:將Java源程序編譯為字節(jié)碼文件荞下。
③測(cè)試:針對(duì)項(xiàng)目中的關(guān)鍵點(diǎn)進(jìn)行測(cè)試,確保項(xiàng)目在迭代開(kāi)發(fā)過(guò)程中關(guān)鍵點(diǎn)的正確性史飞。
④報(bào)告:在每一次測(cè)試后以標(biāo)準(zhǔn)的格式記錄和展示測(cè)試結(jié)果尖昏。
⑤打包:將一個(gè)包含諸多文件的工程封裝為一個(gè)壓縮文件用于安裝或部署。Java 工程對(duì)應(yīng) jar 包构资,Web工程對(duì)應(yīng)war包抽诉。
⑥安裝:在Maven環(huán)境下特指將打包的結(jié)果——jar包或war包安裝到本地倉(cāng)庫(kù)中。
⑦部署:將打包的結(jié)果部署到遠(yuǎn)程倉(cāng)庫(kù)或?qū)ar包部署到服務(wù)器上運(yùn)行

Maven 核心概念

Maven能夠?qū)崿F(xiàn)自動(dòng)化構(gòu)建是和它的內(nèi)部原理分不開(kāi)的吐绵,這里我們從 Maven的九個(gè)核心概念入手掸鹅,看看Maven是如何實(shí)現(xiàn)自動(dòng)化構(gòu)建的

①POM
②約定的目錄結(jié)構(gòu)
③坐標(biāo)
④依賴管理
⑤倉(cāng)庫(kù)管理
⑥生命周期
⑦插件和目標(biāo)
⑧繼承
⑨聚合

安裝 Maven 環(huán)境

1、 確保安裝了 java 環(huán)境:maven 本身就是 java 寫(xiě)的拦赠,所以要求必須安裝 JDK巍沙。
查看 java 環(huán)境變量:echo %JAVA_HOME%

2、 下載并解壓 maven 安裝程序:
http://maven.apache.org/download.cgi

3荷鼠、 配置 Maven 的環(huán)境變量:
MAVEN_HOME=d:/apache-maven-3.3.9 或者 M2_HOME=d:/apache-maven-3.3.9
path=%MAVEN_HOME%/bin; 或者%M2_HOME%/bin;

4句携、驗(yàn)證是否安裝成功:
mvn –v

Maven 的核心概念:

Maven 工程約定目錄結(jié)構(gòu)

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

說(shuō)明:
Hello:根目錄,也就是工程名
src:源代碼
main:主程序
java:主程序的 java 源碼
resources:主程序的配置文件
test:測(cè)試程序
java:測(cè)試程序的 java 源碼
resources:測(cè)試程序的配置文件
pom.xml:Maven 工程的核心配置文件允乐。

一般情況下矮嫉,我們習(xí)慣上采取的措施是:約定>配置>編碼

maven 的 pom.xml 記錄的關(guān)于構(gòu)建項(xiàng)目的各個(gè)方面的設(shè)置,maven 從 pom.xml 文件開(kāi)始牍疏,按照助約定的工程目錄編譯蠢笋,測(cè)試,打包鳞陨,部署昨寞,發(fā)布項(xiàng)目。

第一個(gè) maven 工程

按照如下步驟,實(shí)現(xiàn)第一個(gè) maven 項(xiàng)目援岩,以 maven 推薦的約定方式創(chuàng)建目錄歼狼,類文件。
1.某個(gè)目錄中創(chuàng)建文件夾 Hello
2.在 Hello 中創(chuàng)建子目錄 src
3.拷貝 pom.xml 到 Hello 目錄和 src 是同級(jí)放置的享怀。
4.進(jìn)入 src 目錄羽峰,創(chuàng)建 main, test 目錄
5.進(jìn)入 main 目錄添瓷,創(chuàng)建 java梅屉,resources 目錄。
6.進(jìn)入 java 目錄鳞贷,創(chuàng)建目錄 com/bjpowernode/
6.在 com/bjpowernode/目錄下創(chuàng)建 HelloMaven.java 文件履植,定義 int addNumber(int n1,n2){ return n1+n2};
定義 public static void main(String args[]) { System.out.prinltn(“Hello Manven”); //也可以調(diào)用 addNumber()方法 }
7.進(jìn)入到 Hello 目錄在,執(zhí)行 mvn compile
8.進(jìn)入到 target/classes 目錄執(zhí)行 java com.bjpowernode.HelloMaven

POM 文件

即 Project Object Model 項(xiàng)目對(duì)象模型悄晃。Maven 把一個(gè)項(xiàng)目的結(jié)構(gòu)和內(nèi)容抽象成一個(gè)模型玫霎,在 xml 文件中進(jìn)行聲明,以方便進(jìn)行構(gòu)建和描述妈橄,pom.xml 是 Maven 的靈魂庶近。所以,maven 環(huán)境搭建好之后眷蚓,所有的學(xué)習(xí)和操作都是關(guān)于 pom.xml 的鼻种。

pom.xml 初識(shí):

image.png
image.png

倉(cāng)庫(kù)

倉(cāng)庫(kù)的概念

現(xiàn)在我們對(duì)maven工程有一個(gè)大概的認(rèn)識(shí)了,那現(xiàn)在思考一個(gè)問(wèn)題沙热,maven怎么就這么神奇叉钥,我們寫(xiě)完的工程交給他之后,他就能夠自動(dòng)幫我們管理篙贸,我們依賴的jar包它從哪兒獲取呢投队?有同學(xué)說(shuō)已經(jīng)安裝了,在它的安裝包里啊爵川,大家可以看一下maven下載下來(lái)才8M敷鸦,我們需要的jar包有時(shí)候都幾百兆甚至幾個(gè)G,它從哪兒弄去呢寝贡?其實(shí)扒披,maven有倉(cāng)庫(kù)的概念。在Maven中圃泡,任何一個(gè)依賴碟案、插件或者項(xiàng)目構(gòu)建的輸出,都可以稱之為構(gòu)件颇蜡。Maven
核心程序僅僅定義了自動(dòng)化構(gòu)建項(xiàng)目的生命周期价说,但具體的構(gòu)建工作是由特定的構(gòu)件完成的辆亏。而且為了提高構(gòu)建的效率和構(gòu)件復(fù)用,maven把所有的構(gòu)件統(tǒng)一存儲(chǔ)在某一個(gè)位置熔任,這個(gè)位置就叫做倉(cāng)庫(kù)。

倉(cāng)庫(kù)存什么

倉(cāng)庫(kù)是存放東西的唁情,Maven 倉(cāng)庫(kù)的是:

  1. Maven 的插件疑苔,插件也是一些 jar,這些 jar 可以完成一定的功能甸鸟。
    2.我們自己開(kāi)發(fā)項(xiàng)目的模塊
    3.第三方框架或工具的 jar 包

倉(cāng)庫(kù)的類別

根據(jù)倉(cāng)庫(kù)存儲(chǔ)的位置惦费,把倉(cāng)庫(kù)分為本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。

本地倉(cāng)庫(kù)抢韭,存在于當(dāng)前電腦上,默認(rèn)存放在~.m2\repository中,為本機(jī)上所有的Maven工程服務(wù)薪贫。你也可以通過(guò)Maven的配置文件Maven_home/conf/settings.xml中修改本地倉(cāng)庫(kù)所在的目錄。

~ 是用戶的主目錄刻恭,windows系統(tǒng)中是 c:/user/登錄系統(tǒng)的用戶名

遠(yuǎn)程倉(cāng)庫(kù)瞧省,分為為全世界范圍內(nèi)的開(kāi)發(fā)人員提供服務(wù)的中央倉(cāng)庫(kù)、為全世界范圍內(nèi)某些特定的用戶提供服務(wù)的中央倉(cāng)庫(kù)鏡像鳍贾、為本公司提供服務(wù)自己架設(shè)的私服鞍匾。中央倉(cāng)庫(kù)是maven默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù),其地址是:http://repo.maven.apache.org/maven2/

中央倉(cāng)庫(kù)骑科,包含了絕大多數(shù)流行的開(kāi)源Java構(gòu)件橡淑,以及源碼、作者信息咆爽、許可證信息等梁棠。一般來(lái)說(shuō),簡(jiǎn)單的Java項(xiàng)目依賴的構(gòu)件都可以在這里下載得到斗埂。

私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù)符糊,它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù)呛凶,供局域網(wǎng)內(nèi)的Maven用戶使用濒蒋。當(dāng)Maven需要下載構(gòu)件的時(shí)候,它從私服請(qǐng)求把兔,如果私服上不存在該構(gòu)件沪伙,則從外部的遠(yuǎn)程倉(cāng)庫(kù)下載,緩存在私服上之后县好,再為Maven的下載請(qǐng)求提供服務(wù)围橡。我們還可以把一些無(wú)法從外部倉(cāng)庫(kù)下載到的構(gòu)件上傳到私服上。

分類說(shuō)明:
1)本地倉(cāng)庫(kù):本機(jī)當(dāng)前電腦上的資源存儲(chǔ)位置缕贡,為本機(jī)上所有 Maven工程提供服務(wù)
2)遠(yuǎn)程倉(cāng)庫(kù):不在本機(jī)上翁授, 通過(guò)網(wǎng)絡(luò)才能使用拣播。多電腦共享使用的。

①:中央倉(cāng)庫(kù):通過(guò)Internet訪問(wèn)收擦,為全世界所有 Maven工程服務(wù)贮配。 最權(quán)威的。
②:中央倉(cāng)庫(kù)的鏡像:架設(shè)在不同位置塞赂,歐洲泪勒,美洲,亞洲等每個(gè)洲都有若干的服務(wù)器宴猾,為中央倉(cāng)庫(kù)分擔(dān)流量圆存。減輕中央倉(cāng)庫(kù)的訪問(wèn),下載的壓力仇哆。所在洲的用戶首先訪問(wèn)的是本洲的鏡像服務(wù)器沦辙。
③:私服:在局域網(wǎng)環(huán)境中部署的服務(wù)器,為當(dāng)前局域網(wǎng)范圍內(nèi)的所有 Maven工程服務(wù)讹剔。公司中常常使用這種方式油讯。

image.png

Maven 對(duì)倉(cāng)庫(kù)的使用

在 Maven 構(gòu)建項(xiàng)目的過(guò)程中如果需要某些插件,首先會(huì)到 Maven 的本地倉(cāng)庫(kù)中查找延欠,如果找到則可以直接使用撞羽;如果找不到,它會(huì)自動(dòng)連接外網(wǎng)衫冻,到遠(yuǎn)程中央倉(cāng)庫(kù)中查找诀紊;如果遠(yuǎn)程倉(cāng)庫(kù)中能找到,則先把所需要的插件下載到本地倉(cāng)庫(kù)隅俘,然后再使用邻奠,并且下次再用到相同的插件也可以直接使用本地倉(cāng)庫(kù)的;如果沒(méi)有外網(wǎng)或者遠(yuǎn)程倉(cāng)庫(kù)中也找不到为居,則構(gòu)建失敗碌宴。

資源搜索地址:https://mvnrepository.com/

Maven 的生命周期

對(duì)項(xiàng)目的構(gòu)建是建立在生命周期模型上的,它明確定義項(xiàng)目生命周期各個(gè)階段蒙畴,并且對(duì)于每一個(gè)階段提供相對(duì)應(yīng)的命令贰镣,對(duì)開(kāi)發(fā)者而言僅僅需要掌握一小堆的命令就可以完成項(xiàng)目各個(gè)階段的構(gòu)建工作。

構(gòu)建項(xiàng)目時(shí)按照生命周期順序構(gòu)建膳凝,每一個(gè)階段都有特定的插件來(lái)完成碑隆。不論現(xiàn)在要執(zhí)行生命周期中的哪個(gè)階段,都是從這個(gè)生命周期的最初階段開(kāi)始的蹬音。

對(duì)于我們程序員而言上煤,無(wú)論我們要進(jìn)行哪個(gè)階段的構(gòu)建,直接執(zhí)行相應(yīng)的命令即可著淆,無(wú)需擔(dān)心它前邊階段是否構(gòu)建劫狠,Maven 都會(huì)自動(dòng)構(gòu)建拴疤。這也就是 Maven 這種自動(dòng)化構(gòu)建工具給我們帶來(lái)的好處。

Maven 的常用命令

Maven 對(duì)所有的功能都提供相對(duì)應(yīng)的命令独泞,要想知道 maven 都有哪些命令呐矾,那要看 maven 有哪些功能。

一開(kāi)始就跟大家說(shuō)了懦砂,maven 三大功能:管理依賴蜒犯、構(gòu)建項(xiàng)目、管理項(xiàng)目信息孕惜。管理依賴愧薛,只需要聲明就可以自動(dòng)到倉(cāng)庫(kù)下載晨炕;管理項(xiàng)目信息其實(shí)就是生成一個(gè)站點(diǎn)文檔衫画,一個(gè)命令就可以解決,最后再說(shuō)瓮栗;那 maven 功能的主體其實(shí)就是項(xiàng)目構(gòu)建削罩。

Maven 提供一個(gè)項(xiàng)目構(gòu)建的模型,把編譯费奸、測(cè)試弥激、打包、部署等都對(duì)應(yīng)成一個(gè)個(gè)的生命周期階段愿阐,并對(duì)每一個(gè)階段提供相應(yīng)的命令微服,程序員只需要掌握一小堆命令,就可以完成項(xiàng)目的構(gòu)建過(guò)程缨历。

mvn clean 清理(會(huì)刪除原來(lái)編譯和測(cè)試的目錄以蕴,即 target 目錄,但是已經(jīng) install 到倉(cāng)庫(kù)里的包不會(huì)刪除)
mvn compile 編譯主程序(會(huì)在當(dāng)前目錄下生成一個(gè) target,里邊存放編譯主程序之后生成的字節(jié)碼文件)
mvn test-compile
編譯測(cè)試程序(會(huì)在當(dāng)前目錄下生成一個(gè) target,里邊存放編譯測(cè)試程序之后生成的字節(jié)碼文件)
mvn test 測(cè)試(會(huì)生成一個(gè)目錄surefire-reports辛孵,保存測(cè)試結(jié)果)
mvn package
打包主程序(會(huì)編譯丛肮、編譯測(cè)試、測(cè)試魄缚、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
mvn install 安裝主程序(會(huì)把本工程打包宝与,并且按照本工程的坐標(biāo)保存到本地倉(cāng)庫(kù)中)
mvn deploy 部署主程序(會(huì)把本工程打包,按照本工程的坐標(biāo)保存到本地庫(kù)中冶匹,并且還會(huì)保存到私服倉(cāng)庫(kù)中习劫。
還會(huì)自動(dòng)把項(xiàng)目部署到 web 容器中)。

注意:執(zhí)行以上命令必須在命令行進(jìn)入 pom.xml 所在目錄嚼隘!

練習(xí) maven 命令

以第一個(gè) maven 項(xiàng)目為例榜聂,進(jìn)入到 Hello 目錄中執(zhí)行 maven 各種命令
1.準(zhǔn)備工作,pom.xml 添加依賴

<dependencies>
   <!-- 單元測(cè)試 -->
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.11</version>
   </dependency>
</dependencies>

2.在 Hello/src/test/目錄下創(chuàng)建 java 嗓蘑, resources 目錄
3.在 Hello/src/test/java 目錄下须肆,創(chuàng)建 com/bjpowernode/目錄

  1. 在 com/bjpowernode/目錄中創(chuàng)建 MyTest.java 文件

導(dǎo)入類:
import org.junit.Assert;
import org.junit.Test;

定義方法

public class MyTest {
   @Test
   public void testAddNumber(){
     System.out.println("執(zhí)行 HelloMaven 類 addNumber()方法");
     int n1 = 10;
     int n2 = 20;
     int res = 0;
     HelloMaven hello =new HelloMaven();
     res = hello.addNumber(n1,n2);
     // 期望值匿乃,實(shí)際值
     Assert.assertEquals(30,res);
   } 
}

5.執(zhí)行先執(zhí)行 mvn compile ,觀察目錄結(jié)構(gòu)的變化,生成 target 目錄
6.在執(zhí)行 mvn clean豌汇, 觀察 taget 目錄被清除
7.執(zhí)行 mvn compile
8.進(jìn)入 taget/classes 目錄執(zhí)行 java com.bjpowernode.HelloMaven
9.進(jìn)入 Hello 目錄幢炸,執(zhí)行 mvn test-compile 生成 test-target 測(cè)試編譯后的目錄

  1. 進(jìn)入 Hello 目錄,執(zhí)行 mvn test 執(zhí)行 MyTest 類中方法拒贱,生成測(cè)試報(bào)告
    11.進(jìn)入目錄 surefire-reports宛徊,查看測(cè)試報(bào)告
    12.修改 MyTest.java, 增加測(cè)試方法
   @Test
   public void testAddNumber2(){
     System.out.println("執(zhí)行 HelloMaven 類 addNumber()方法");
     int n1 = 20;
     int n2 = 30;
     int res = 0;
     HelloMaven hello =new HelloMaven();
     res = hello.addNumber(n1,n2);
     // 期望值,實(shí)際值
     Assert.assertEquals(60,res);
}
  1. 進(jìn)入 Hello 目錄逻澳,執(zhí)行 mvn test-compile
  2. 進(jìn)入 Hello 目錄闸天,執(zhí)行 mvn test
  3. 修改 testAddNumber2()方法中 60 為 50 16. 進(jìn)入 Hello 目錄,執(zhí)行 mvn package 斜做,生成 xxx.jar 文件苞氮,這就是所說(shuō)的打包
  4. 進(jìn)入 Hello 目錄,執(zhí)行 mvn install 瓤逼, 把 xxx.jar 文件安裝到本地 maven 倉(cāng)庫(kù)笼吟,安裝成功后查看倉(cāng)庫(kù)中的 jar 文 件

插件

maven 過(guò)程構(gòu)建周期,由 maven 的插件 plugin 來(lái)執(zhí)行完成霸旗。

官網(wǎng)插件說(shuō)明:http://maven.apache.org/plugins/
在項(xiàng)目根目錄下執(zhí):mvn clean install

image.png

解釋說(shuō)明

clean 插件 maven-clean-plugin:2.5
clean 階段是獨(dú)立的一個(gè)階段贷帮,功能就是清除工程目前下的 target 目錄

resources 插件 maven-resources-plugin:2.6
resource 插件的功能就是把項(xiàng)目需要的配置文件拷貝到指定的目當(dāng),默認(rèn)是拷貝 src\main\resources 目錄下的件到classes 目錄下

compile 插件 maven-compiler-plugin
compile 插件執(zhí)行時(shí)先調(diào)用 resouces 插件诱告,功能就是把 src\mainjava 源碼編譯成字節(jié)碼生成 class 文件撵枢,并把編譯好的 class 文件輸出到 target\classes 目錄下

test 測(cè)試插件
單元測(cè)試所用的 compile 和 resources 插件和主代碼是相同的,但執(zhí)行的目標(biāo)不行精居,目標(biāo) testCompile 和 testResources是把 src\test\java 下的代碼編譯成字節(jié)碼輸出到 target\test-classes锄禽,同時(shí)把 src\test\resources 下的配置文件拷貝到target\test-classes

package 打包插件 maven-jar-plugin
這個(gè)插件是把 class 文件、配置文件打成一個(gè) jar(war 或其它格式)包

deploy 發(fā)布插件 maven-install-plugin
發(fā)布插件的功能就是把構(gòu)建好的 artifact 部署到本地倉(cāng)庫(kù)箱蟆,還有一個(gè) deploy 插件是將構(gòu)建好的 artifact 部署到遠(yuǎn)程倉(cāng)庫(kù)

常用插件

插件可以在自己的項(xiàng)目中設(shè)置沟绪,最常使用的是 maven 編譯插件。設(shè)置項(xiàng)目使用的 jdk 版本時(shí)通過(guò)編譯插件指定空猜。pom.xml 文件<build>中設(shè)置绽慈。

<build> 
   <plugins> 
     <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.8.1</version> 
       <configuration> 
         <source>1.8</source> 
         <target>1.8</target> 
       </configuration> 
     </plugin> 
   </plugins> 
</build>

坐標(biāo)(gav)

Maven 把任何一個(gè)插件都作為倉(cāng)庫(kù)中的一個(gè)項(xiàng)目進(jìn)行管理,用一組(三個(gè))向量組成的坐標(biāo)來(lái)表示辈毯。坐標(biāo)在倉(cāng)庫(kù)中可以唯一定位一個(gè) Maven 項(xiàng)目坝疼。

groupId:組織名,通常是公司或組織域名倒序+項(xiàng)目名
artifactId:模塊名谆沃,通常是工程名
version:版本號(hào)

需要特別指出的是钝凶,項(xiàng)目在倉(cāng)庫(kù)中的位置是由坐標(biāo)來(lái)決定的:groupId、artifactId 和 version 決定項(xiàng)目在倉(cāng)庫(kù)中的路徑唁影,artifactId 和 version 決定 jar 包的名稱耕陷。

依賴(dependency)

一個(gè) Maven 項(xiàng)目正常運(yùn)行需要其它項(xiàng)目的支持掂名,Maven 會(huì)根據(jù)坐標(biāo)自動(dòng)到本地倉(cāng)庫(kù)中進(jìn)行查找。對(duì)于程序員自己的 Maven 項(xiàng)目需要進(jìn)行安裝哟沫,才能保存到倉(cāng)庫(kù)中饺蔑。

不用 maven 的時(shí)候所有的 jar 都不是你的,需要去各個(gè)地方下載拷貝嗜诀,用了 maven 所有的 jar 包都是你的币砂,想要誰(shuí)绵估,叫誰(shuí)的名字就行脂男。maven 幫你下載亲族。

pom.xml 加入依賴的方式:

log4j 日志依賴

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

junit 單元測(cè)試依賴

<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.11</version>
</dependency>

Maven 在 IDEA 中的應(yīng)用

IDEA 集成 Maven
File---->Settings:設(shè)置 maven 安裝主目錄、maven 的 settings.xml 文件和本地倉(cāng)庫(kù)所在位置拂蝎。

image.png

IDEA 創(chuàng)建 Maven 版 java 工程:

創(chuàng)建 maven 版 java 工程
File-->New-->Module…:


image.png

填寫(xiě) maven 工程的坐標(biāo)


image.png

填寫(xiě)工程名和存儲(chǔ)路徑


image.png

pom.xml 加入依賴

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
 </dependency>

創(chuàng)建后視圖


image.png
image.png

創(chuàng)建測(cè)試類


image.png

輸出一條語(yǔ)句穴墅,測(cè)試項(xiàng)目構(gòu)建成功。

IDEA 創(chuàng)建 Maven 版 web 工程

創(chuàng)建 Maven 版 web 工程
File-->New-->Module…:


image.png

設(shè)置 module 信息


image.png

設(shè)置所使用的 maven:


image.png

這個(gè)窗口基本上不用修改什么匣屡,但是這樣會(huì)比較慢封救,有時(shí)候如果網(wǎng)速不好拇涤,就會(huì)卡的比較久捣作,這是因?yàn)閙aven 這個(gè)骨架會(huì)從遠(yuǎn)程倉(cāng)庫(kù)加載 archetype 元數(shù)據(jù),但是 archetype 又比較多鹅士,所以比較卡券躁,這時(shí)候可以加個(gè)屬性 -DarchetypeCatelog = internal,表示僅使用內(nèi)部元數(shù)據(jù):

image.png

填寫(xiě) maven 工程名稱和存儲(chǔ)路徑


image.png

由于要運(yùn)行 archetype 程序掉盅,所以這個(gè)過(guò)程需要幾分鐘的時(shí)間也拜,當(dāng)控制臺(tái)出現(xiàn)” BUILD SUCCESS”時(shí),表示工程創(chuàng)建完成趾痘。

創(chuàng)建后視圖


image.png

顯然慢哈,按照 maven archetype 原型創(chuàng)建的 maven web 工程缺少 maven 項(xiàng)目的完整結(jié)構(gòu):src-main-java / resources,src-test-java/resources永票,所以需要我們手動(dòng)添加文件目錄卵贱。

創(chuàng)建缺省文件夾
src-main-java / resources,src-test-java/resources

image.png

把文件夾標(biāo)識(shí)為源碼文件夾
File -> Project Structure, 選擇Modules:右邊找到j(luò)ava這層機(jī)構(gòu)侣集,在上面有個(gè)“Mask as”, 點(diǎn)下Sources键俱,表示這里面是源代碼類。

image.png

pom.xml 添加依賴

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.1.0</version>
   <scope>provided</scope>
</dependency> 
<dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>jsp-api</artifactId>
   <version>2.1</version>
   <scope>provided</scope>
</dependency>

編寫(xiě)測(cè)試類 HelloWorld 和測(cè)試頁(yè)面 index.jsp

IDEA 中導(dǎo)入 Maven 工程(module)

新建一個(gè)空的 project 作為工作空間

在項(xiàng)目結(jié)構(gòu)中導(dǎo)入或移除 module
File-->Project Structure…


image.png

選擇要導(dǎo)入的 Module:


image.png

選擇導(dǎo)入方式


image.png

選擇要導(dǎo)入的項(xiàng)目


image.png

選擇要導(dǎo)入的 maven 工程


image.png

設(shè)置導(dǎo)入 module 所使用的 JDK


image.png

導(dǎo)入后項(xiàng)目結(jié)構(gòu)


image.png

導(dǎo)入后視圖


image.png

依賴管理

依賴的范圍

依賴的范圍:compile世分、test编振、provided,默認(rèn)采用 compile

image.png

Maven 常用設(shè)置

全局變量

在 Maven 的 pom.xml 文件中臭埋,<properties>用于定義全局變量踪央,POM 中通過(guò)${property_name}的形式引用變量的值臀玄。

定義全局變量:

<properties>
   <spring.version>4.3.10.RELEASE</spring.version>
</properties>

引用全局變量:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

Maven 系統(tǒng)采用的變量:

<properties>
     <maven.compiler.source>1.8</maven.compiler.source> 源碼編譯 jdk 版本
     <maven.compiler.target>1.8</maven.compiler.target> 運(yùn)行代碼的 jdk 版本
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 項(xiàng)目構(gòu)建使用的編碼,避免中文亂碼
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成報(bào)告的編碼
 </properties>

指定資源位置

src/main/java 和 src/test/java 這兩個(gè)目錄中的所有*.java 文件會(huì)分別在 comile 和 test-comiple 階段被編譯畅蹂,編譯結(jié)果分別放到了 target/classes 和 targe/test-classes 目錄中镐牺,但是這兩個(gè)目錄中的其他文件都會(huì)被忽略掉,如果需要把 src 目錄下的文件包放到 target/classes 目錄魁莉,作為輸出的 jar 一部分睬涧。需要指定資源文件位置。以下內(nèi)容放到<buid>標(biāo)簽中旗唁。

<build>
    <resources>
         <resource>
             <directory>src/main/java</directory><!--所在的目錄-->
             <includes><!--包括目錄下的.properties,.xml 文件都會(huì)掃描到-->
                 <include>**/*.properties</include>
                 <include>**/*.xml</include>
             </includes>
             <!--filtering 選項(xiàng) false 不啟用過(guò)濾器畦浓, *.property 已經(jīng)起到過(guò)濾的作用了 -->
             <filtering>false</filtering>
         </resource>
     </resources>
</build>

總結(jié)maven

第一部分

完成一個(gè)java項(xiàng)目,需要做哪些工作
1.分析項(xiàng)目要做什么检疫,知道項(xiàng)目有哪些組成部分讶请。
2.設(shè)計(jì)項(xiàng)目,通過(guò)哪些步驟屎媳,使用哪些技術(shù)夺溢。需要多少人, 多長(zhǎng)的時(shí)間烛谊。
3.組建團(tuán)隊(duì)风响,招人, 購(gòu)置設(shè)備丹禀,服務(wù)器状勤, 軟件, 筆記本双泪。
4.開(kāi)發(fā)人員寫(xiě)代碼持搜。 開(kāi)發(fā)人員需要測(cè)試自己寫(xiě)代碼。 重復(fù)多次的工作焙矛。
5.測(cè)試人員葫盼,測(cè)試項(xiàng)目功能是否符合要求。
測(cè)試開(kāi)發(fā)人員提交代碼-如果測(cè)試有問(wèn)題--需要開(kāi)發(fā)人員修改--在提交代碼給測(cè)試--測(cè)試人員在測(cè)試代碼-如果還有問(wèn)題-在交給開(kāi)發(fā)人員-開(kāi)發(fā)人員在提交-在測(cè)試
直到-測(cè)試代碼通過(guò)村斟。

2.傳統(tǒng)開(kāi)發(fā)項(xiàng)目的問(wèn)題贫导,沒(méi)有使用maven【meivn】管理的項(xiàng)目
1)很多模塊,模塊之間有關(guān)系邓梅, 手工管理關(guān)系脱盲,比較繁瑣。
2)需要很多第三方功能日缨, 需要很多jar文件钱反,需要手工從網(wǎng)絡(luò)中獲取各個(gè)jar
3)需要管理jar的版本, 你需要的是mysql.5.1.5.jar 拿你不能給給一個(gè)mysql.4.0.jar
4)管理jar文件之間的依賴, 你的項(xiàng)目要使用a.jar 需要使用b.jar里面的類面哥。
必須首先獲取到b.jar才可以哎壳, 然后才能使用a.jar.

a.jar需要b.jar這個(gè)關(guān)系叫做依賴, 或者你的項(xiàng)目中要使用mysql的驅(qū)動(dòng)尚卫, 也可以叫做項(xiàng)目依賴mysql驅(qū)動(dòng)归榕。
a.class使用b.class, a依賴b類

3.需要改進(jìn)項(xiàng)目的開(kāi)發(fā)和管理吱涉,需要maven
1)maven可以管理jar文件
2)自動(dòng)下載jar和他的文檔刹泄,源代碼
3)管理jar直接的依賴, a.jar需要b.jar 怎爵, maven會(huì)自動(dòng)下載b.jar
4)管理你需要的jar版本
5)幫你編譯程序特石,把java編譯為class
6)幫你測(cè)試你的代碼是否正確。
7)幫你打包文件鳖链,形成jar文件姆蘸,或者war文件
8)幫你部署項(xiàng)目

4.構(gòu)建: 項(xiàng)目的構(gòu)建。
構(gòu)建是面向過(guò)程的芙委,就是一些步驟逞敷,完成項(xiàng)目代碼的編譯,測(cè)試灌侣,運(yùn)行推捐,打包,部署等等顶瞳。
maven支持的構(gòu)建包括有:
1).清理玖姑, 把之前項(xiàng)目編譯的東西刪除掉愕秫,我新的編譯代碼做準(zhǔn)備慨菱。
2).編譯, 把程序源代碼編譯為執(zhí)行代碼戴甩, java-class文件
批量的符喝,maven可以同時(shí)把成千上百的文件編譯為class。
與javac 不一樣甜孤,javac一次編譯一個(gè)文件协饲。
3).測(cè)試, maven可以執(zhí)行測(cè)試程序代碼缴川,驗(yàn)證你的功能是否正確茉稠。
批量的,maven同時(shí)執(zhí)行多個(gè)測(cè)試代碼把夸,同時(shí)測(cè)試很多功能而线。
4).報(bào)告, 生成測(cè)試結(jié)果的文件, 測(cè)試通過(guò)沒(méi)有膀篮。
5).打包嘹狞, 把你的項(xiàng)目中所有的class文件,配置文件等所有資源放到一個(gè)壓縮文件中誓竿。
這個(gè)壓縮文件就是項(xiàng)目的結(jié)果文件磅网, 通常java程序,壓縮文件是jar擴(kuò)展名的筷屡。
對(duì)于web應(yīng)用涧偷,壓縮文件擴(kuò)展名是.war
6).安裝, 把5中生成的文件jar毙死,war安裝到本機(jī)倉(cāng)庫(kù)
7).部署嫂丙, 把程序安裝好可以執(zhí)行。

5.maven核心概念: 用好maven规哲,了解這些概念
①POM : 一個(gè)文件 名稱是pom.xml , pom翻譯過(guò)來(lái)叫做項(xiàng)目對(duì)象模型跟啤。
maven把一個(gè)項(xiàng)目當(dāng)做一個(gè)模型使用“π浚控制maven構(gòu)建項(xiàng)目的過(guò)程隅肥,管理jar依賴。

②約定的目錄結(jié)構(gòu) : maven項(xiàng)目的目錄和文件的位置都是規(guī)定的袄简。

③坐標(biāo) : 是一個(gè)唯一的字符串腥放,用來(lái)表示資源的。

④依賴管理 : 管理你的項(xiàng)目可以使用jar文件

⑤倉(cāng)庫(kù)管理(了解) :你的資源存放的位置

⑥生命周期 (了解) : maven工具構(gòu)建項(xiàng)目的過(guò)程绿语,就是生命周期秃症。
⑦插件和目標(biāo)(了解):執(zhí)行maven構(gòu)建的時(shí)候用的工具是插件
⑧繼承
⑨聚合

講maven的使用,先難后易的吕粹。 難是說(shuō)使用maven的命令种柑,完成maven使用 , 在idea中直接使用maven匹耕,代替命令聚请。

6.maven工具的安裝和配置。
1)需要從maven的官網(wǎng)下載maven的安裝包 apache-maven-3.3.9-bin.zip
2)解壓安裝包稳其,解壓到一個(gè)目錄驶赏,非中文目錄。
子目錄 bin :執(zhí)行程序既鞠,主要是mvn.cmd
conf :maven工具本身的配置文件 settings.xml
3)配置環(huán)境變量
在系統(tǒng)的環(huán)境變量中煤傍,指定一個(gè)M2_HOME的名稱, 指定它的值是maven工具安裝目錄嘱蛋,bin之前的目錄

M2_HOME=D:\work\maven_work\apache-maven-3.3.9

再把M2_HOME加入到path之中蚯姆,在所有路徑之前加入%M2_HOME%\bin;

4)驗(yàn)證椅寺,新的命令行中,執(zhí)行mvn -v

注意:需要配置JAVA_HOME 蒋失,指定jdk路徑

C:\Users\Administrator>mvn -v
出現(xiàn)如下內(nèi)容返帕,maven安裝,配置正確篙挽。

    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:4
    Maven home: D:\work\maven_work\apache-maven-3.3.9
    Java version: 1.8.0_40, vendor: Oracle Corporation
    Java home: C:\java\JDK8-64\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

第二部分

1.maven約定的目錄結(jié)構(gòu)荆萤, 約定是大家都遵循的一個(gè)規(guī)則。

每一個(gè)maven項(xiàng)目在磁盤中都是一個(gè)文件夾(項(xiàng)目-Hello)
Hello/
---/src
------/main #放你主程序java代碼和配置文件
----------/java #你的程序包和包中的java文件
----------/resources #你的java程序中要使用的配置文件

------/test #放測(cè)試程序代碼和文件的(可以沒(méi)有)
----------/java #測(cè)試程序包和包中的java文件
----------/resources #測(cè)試java程序中要使用的配置文件

---/pom.xml #maven的核心文件(maven項(xiàng)目必須有)

2.疑問(wèn): mvn compile 編譯src/main目錄下的所有java文件的铣卡。
1)為什么要下載
maven工具執(zhí)行的操作需要很多插件(java類--jar文件)完成的
2)下載什么東西了
jar文件--叫做插件--插件是完成某些功能

3)下載的東西存放到哪里了链韭。
默認(rèn)倉(cāng)庫(kù)(本機(jī)倉(cāng)庫(kù)):
C:\Users\(登錄操作系統(tǒng)的用戶名)Administrator.m2\repository

https://repo.maven.apache.org :中央倉(cāng)庫(kù)的地址

執(zhí)行mvn compile, 結(jié)果是在項(xiàng)目的根目錄下生成target目錄(結(jié)果目錄)煮落,maven編譯的java程序敞峭,最后的class文件都放在target目錄中

設(shè)置本機(jī)存放資源的目錄位置(設(shè)置本機(jī)倉(cāng)庫(kù)):

  1. 修改maven的配置文件, maven安裝目錄/conf/settings.xml
    先備份 settings.xml

  2. 修改 <localRepository> 指定你的目錄(不要使用中文目錄)

D:\work\maven_work\maven_repository

3.倉(cāng)庫(kù)
1)倉(cāng)庫(kù)是什么: 倉(cāng)庫(kù)是存放東西的蝉仇, 存放maven使用的jar 和 我們項(xiàng)目使用的jar

maven使用的插件(各種jar)
我項(xiàng)目使用的jar(第三方的工具)

2)倉(cāng)庫(kù)的分類

本地倉(cāng)庫(kù)旋讹, 就是你的個(gè)人計(jì)算機(jī)上的文件夾,存放各種jar
遠(yuǎn)程倉(cāng)庫(kù)轿衔, 在互聯(lián)網(wǎng)上的沉迹,使用網(wǎng)絡(luò)才能使用的倉(cāng)庫(kù)
①:中央倉(cāng)庫(kù),最權(quán)威的害驹, 所有的開(kāi)發(fā)人員都共享使用的一個(gè)集中的倉(cāng)庫(kù)鞭呕,https://repo.maven.apache.org :中央倉(cāng)庫(kù)的地址
②:中央倉(cāng)庫(kù)的鏡像:就是中央倉(cāng)庫(kù)的備份, 在各大洲宛官,重要的城市都是鏡像葫松。
③:私服,在公司內(nèi)部底洗,在局域網(wǎng)中使用的腋么, 不是對(duì)外使用的。

3)倉(cāng)庫(kù)的使用枷恕,maven倉(cāng)庫(kù)的使用不需要人為參與党晋。

開(kāi)發(fā)人員需要使用mysql驅(qū)動(dòng)--->maven首先查本地倉(cāng)庫(kù)--->私服--->鏡像--->中央倉(cāng)庫(kù)

4.pom:項(xiàng)目對(duì)象模型,是一個(gè)pom.xml文件
1)坐標(biāo):唯一值徐块, 在互聯(lián)網(wǎng)中唯一標(biāo)識(shí)一個(gè)項(xiàng)目的

<groupId>公司域名的倒寫(xiě)</groupId>
<artifactId>自定義項(xiàng)目名稱</artifactId>
<version>自定版本號(hào)</version>

https://mvnrepository.com/ 搜索使用的中央倉(cāng)庫(kù), 使用groupId 或者 artifactId作為搜索條件

2) packaging: 打包后壓縮文件的擴(kuò)展名灾而,默認(rèn)是jar 胡控,web應(yīng)用是war
packaging 可以不寫(xiě), 默認(rèn)是jar

  1. 依賴
    dependencies 和dependency 旁趟,相當(dāng)于是 java代碼中import

你的項(xiàng)目中要使用的各種資源說(shuō)明昼激, 比我的項(xiàng)目要使用mysql驅(qū)動(dòng)

      <dependencies>
            <!--依賴  java代碼中 import -->
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
         </dependency>

     </dependencies>

4)properties:設(shè)置屬性

5)build : maven在進(jìn)行項(xiàng)目的構(gòu)建時(shí), 配置信息,例如指定編譯java代碼使用的jdk的版本等

5.maven生命周期橙困, maven的命令瞧掺,maven的插件
maven的生命周期:就是maven構(gòu)建項(xiàng)目的過(guò)程,清理凡傅,編譯辟狈,測(cè)試,報(bào)告夏跷,打包哼转,安裝,部署
maven的命令:maven獨(dú)立使用槽华,通過(guò)命令壹蔓,完成maven的生命周期的執(zhí)行。
maven可以使用命令猫态,完成項(xiàng)目的清理佣蓉,編譯,測(cè)試等等

maven的插件: maven命令執(zhí)行時(shí)亲雪,真正完成功能的是插件偏螺,插件就是一些jar文件, 一些類匆光。

1)單元測(cè)試(測(cè)試方法):用的是junit套像, junit是一個(gè)專門測(cè)試的框架(工具)。
junit測(cè)試的內(nèi)容: 測(cè)試的是類中的方法终息, 每一個(gè)方法都是獨(dú)立測(cè)試的夺巩。
方法是測(cè)試的基本單位(單元)。

maven借助單元測(cè)試周崭,批量的測(cè)試你類中的大量方法是否符合預(yù)期的柳譬。

2)使用步驟
1.加入依賴,在pom.xml加入單元測(cè)試依賴

         <!-- 單元測(cè)試 -->
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

2.在maven項(xiàng)目中的src/test/java目錄下续镇,創(chuàng)建測(cè)試程序美澳。
推薦的創(chuàng)建類和方法的提示:
1).測(cè)試類的名稱 是Test + 你要測(cè)試的類名
2).測(cè)試的方法名稱 是:Test + 方法名稱

例如你要測(cè)試HelloMaven ,
創(chuàng)建測(cè)試類 TestHelloMaven

       @Test
         public void testAdd(){
          測(cè)試HelloMaven的add方法是否正確
         }

其中testAdd叫做測(cè)試方法,它的定義規(guī)則
1.方法是public的摸航,必須的
2.方法沒(méi)有返回值制跟, 必須的
3.方法名稱是自定義的,推薦是Test + 方法名稱
4.在方法的上面加入 @Test

3)mvn compile
編譯main/java/目錄下的java 為class文件酱虎, 同時(shí)把class拷貝到 target/classes目錄下面
把main/resources目錄下的所有文件 都拷貝到target/classes目錄下

第三部分:
1.在idea中設(shè)置maven 雨膨,讓idea和maven結(jié)合使用。
idea中內(nèi)置了maven 读串,一般不使用內(nèi)置的聊记, 因?yàn)橛脙?nèi)置修改maven的設(shè)置不方便撒妈。
使用自己安裝的maven, 需要覆蓋idea中的默認(rèn)的設(shè)置排监。讓idea指定maven安裝位置等信息

配置的入口
①:配置當(dāng)前工程的設(shè)置狰右, file--settings ---Build, Excution,Deployment--Build Tools--Maven

Maven Home directory: maven的安裝目錄
User Settings File : 就是maven安裝目錄conf/setting.xml配置文件
Local Repository : 本機(jī)倉(cāng)庫(kù)的目錄位置

--Build Tools--Maven--Runner
VM Options : -DarchetypeCatalog=internal
RE: 你項(xiàng)目的jdk

-DarchetypeCatalog=internal , maven項(xiàng)目創(chuàng)建時(shí),會(huì)聯(lián)網(wǎng)下載模版文件舆床,比較大棋蚌, 使用-DarchetypeCatalog=internal,不用下載峭弟, 創(chuàng)建maven項(xiàng)目速度快附鸽。

②:配置以后新建工程的設(shè)置, file--other settings--Settings for New Project

2.使用模版創(chuàng)建項(xiàng)目
1)maven-archetype-quickstart : 普通的java項(xiàng)目
2)maven-archetype-webapp : web工程

第四部分
1依賴范圍瞒瘸, 使用scope表示的坷备。
scope的值有 compile, test, provided ,默認(rèn)是compile
scope:表示依賴使用的范圍,也就是在maven構(gòu)建項(xiàng)目的那些階段中起作用情臭。
maven構(gòu)建項(xiàng)目 編譯省撑, 測(cè)試 ,打包俯在, 安裝 竟秫,部署 過(guò)程(階段)

junit的依賴范圍是 test

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>a</groupId>
      <artifactId>b</artifactId>   
      <version>4.11</version>
    </dependency>
     <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>        
      <scope>provided</scope> 提供者
    </dependency>

你在寫(xiě)項(xiàng)目的中的用到的所有依賴(jar ) ,必須在本地倉(cāng)庫(kù)中有跷乐。
沒(méi)有必須通過(guò)maven下載肥败, 包括provided的都必須下載。

你在servlet需要繼承HttpServlet( provided) , 你使用的HttpServlet是maven倉(cāng)庫(kù)中的愕提。

當(dāng)你的寫(xiě)好的程序馒稍, 放到 tomat服務(wù)器中運(yùn)行時(shí), 此時(shí)你的程序中不包含servlet的jar,因?yàn)閠omcat提供了 servlet的.jar

第五部分:
maven常用操作
1.maven的屬性設(shè)置
<properties> 設(shè)置maven的常用屬性
2.maven的全局變量
自定義的屬性浅侨,
1).在<properties> 通過(guò)自定義標(biāo)簽聲明變量(標(biāo)簽名就是變量名)
2).在pom.xml文件中的其它位置纽谒,使用 ${標(biāo)簽名} 使用變量的值

自定義全局變量一般是定義 依賴的版本號(hào), 當(dāng)你的項(xiàng)目中要使用多個(gè)相同的版本號(hào)如输,先使用全局變量定義鼓黔, 在使用${變量名}

3.資源插件

  <build>
    <resources>
    <resource>
    <directory>src/main/java</directory><!--所在的目錄-->
    <includes><!--包括目錄下的.properties,.xml 文件都會(huì)掃描到-->
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <!—filtering 選項(xiàng) false 不啟用過(guò)濾器, *.property 已經(jīng)起到過(guò)濾的作用了 -->
    <filtering>false</filtering>
    </resource>
    </resources>
  </build>

作用: mybatis中會(huì)用到這個(gè)作用

  1. 默認(rèn)沒(méi)有使用resources的時(shí)候不见, maven執(zhí)行編譯代碼時(shí)澳化, 會(huì)把src/main/resource目錄中的文件拷貝到target/classes目錄中。
思維導(dǎo)圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脖祈,一起剝皮案震驚了整個(gè)濱河市肆捕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盖高,老刑警劉巖慎陵,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異喻奥,居然都是意外死亡席纽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門撞蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)润梯,“玉大人,你說(shuō)我怎么就攤上這事甥厦》拿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵刀疙,是天一觀的道長(zhǎng)舶赔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谦秧,這世上最難降的妖魔是什么竟纳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮疚鲤,結(jié)果婚禮上锥累,老公的妹妹穿的比我還像新娘。我一直安慰自己集歇,他們只是感情好桶略,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著诲宇,像睡著了一般际歼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焕窝,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天蹬挺,我揣著相機(jī)與錄音,去河邊找鬼它掂。 笑死巴帮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虐秋。 我是一名探鬼主播榕茧,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼客给!你這毒婦竟也來(lái)了用押?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤靶剑,失蹤者是張志新(化名)和其女友劉穎蜻拨,沒(méi)想到半個(gè)月后池充,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缎讼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年收夸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片血崭。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卧惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夹纫,到底是詐尸還是另有隱情咽瓷,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布舰讹,位于F島的核電站茅姜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跺涤。R本人自食惡果不足惜匈睁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桶错。 院中可真熱鬧航唆,春花似錦、人聲如沸院刁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)退腥。三九已至任岸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狡刘,已是汗流浹背享潜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗅蔬,地道東北人剑按。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像澜术,于是被迫代替她去往敵國(guó)和親艺蝴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容