Maven簡單介紹
Maven是一個(gè)項(xiàng)目管理工具酪耕。強(qiáng)大,但是很容易使用。
它包含了:
- 一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model);
- 一組標(biāo)準(zhǔn)集合;
- 一個(gè)項(xiàng)目生命周期(Project Lifecycle);
- 一個(gè)依賴管理系統(tǒng)(Dependency Management System)识樱;
- 用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。
當(dāng)你使用Maven的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來描述你的項(xiàng)目怜庸,然后 Maven 可以應(yīng)用橫切的邏輯当犯, 這些邏輯來自一組共享的(或者自定義的)插件。
如果看完簡介割疾,你還迷糊的灶壶,那么我想說:這很正常!請(qǐng)心無旁騖地往下看杈曲,學(xué)習(xí)完這個(gè)入門教程驰凛,該懂的你就都懂了。
溫馨提示:本文的最后一個(gè)主題是個(gè)動(dòng)手示例担扑,如果大段的文字定義讓你非常沒有效率恰响,那么,你可以在任何時(shí)候先來動(dòng)手完成這個(gè)示例涌献。找找感覺胚宦,然后再來看這些枯燥的定義。
安裝Maven
在Mac OSX上安裝Maven
你可以從http://maven.apache.org/download.html下載Maven的二進(jìn)制版本燕垃。下載最新 的枢劝,下載格式最方便你使用的版本。找個(gè)地方存放它卜壕,并把存檔文件解開您旁。如果你把存 檔文件解壓到 /usr/local/maven-2.0.9 ;你可能會(huì)需要?jiǎng)?chuàng)建一個(gè)符號(hào)鏈接轴捎,那樣就能更容易使用鹤盒,當(dāng)你升級(jí)Maven的時(shí)候也不再需要改變環(huán)境變量。
/usr/local % ln -s maven-2.0.9 maven /usr/local % export M2_HOME=/usr/local/maven /usr/local % export PATH=/usr/local/maven/bin:/usr/local/bin:/usr/local/maven/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/java/latest/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/bin:/usr/local/bin
將Maven安裝好后侦副,你還需要做一些事情以確保它正確工作侦锯。你需要將它的 bin 目錄 (該例中為 /usr/local/maven/bin)添加到你的命令行路徑下。你還需要設(shè)置 M2_HOME 環(huán)境變量秦驯,其對(duì)應(yīng)值為Maven的根目錄(該例中為 /usr/local/maven)尺碰。
注意
在OSX Tiger和OSX Leopard上安裝指令是相同的。有報(bào)告稱Maven 2.0.6正 和XCode的預(yù)覽版本一起發(fā)布译隘。如果你安裝了XCode橘券,從命令行運(yùn)行 mvn 檢 查一下它是否可用输虱。 XCode把Maven安裝在了/usr/share/maven。我們強(qiáng)烈建 議安裝最新版本的Maven 2.0.9,因?yàn)殡S著Maven 2.0.9的發(fā)布很多bug被修 正了活合,還有很多改進(jìn)廓握。
你還需要把 M2_HOME 和 PATH 寫到一個(gè)腳本里凭迹,每次登陸的時(shí)候運(yùn)行這個(gè)腳本摊聋。把下 面的幾行加入到 .bash_login偿枕。
export M2_HOME=/usr/local/maven export PATH=/usr/local/maven/bin:/usr/local/bin:/usr/local/maven/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/java/latest/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/bin:/usr/local/bin
一旦你把這幾行加入到你的環(huán)境中,你就可以在命令行運(yùn)行Maven了户辫。
注意
這些安裝指令假設(shè)你正運(yùn)行bash渐夸。
在Microsoft Windows上安裝Maven
在Windows上安裝Maven和在Mac OSX上安裝Maven十分類似,最主要的區(qū)別在于安裝位置和設(shè)置環(huán)境變量渔欢。在這里假設(shè)Maven安裝目錄是 c:\Program Files\maven-2.0.9 墓塌,但 是,只要你設(shè)置的正確的環(huán)境變量奥额,把Maven安裝到其它目錄也一樣苫幢。當(dāng)你把Maven解 壓到安裝目錄后,你需要設(shè)置兩個(gè)環(huán)境變量——PATH和M2_M2_HOME垫挨。設(shè)置這兩個(gè)環(huán)境變量韩肝,鍵入下面的命令:
C:\Users\tobrien > set M2_HOME=c:\Program Files\maven-2.0.9
C:\Users\tobrien > set PATH=%PATH%;%M2_HOME%\bin
在命令行設(shè)置環(huán)境變量后,你可以在當(dāng)前會(huì)話使用Maven九榔,但是哀峻,除非你通過控制面 板把它們加入系統(tǒng)變量,你將需要每次登陸系統(tǒng)的時(shí)候運(yùn)行這兩行命令哲泊。你應(yīng)該在 Microsoft Windows中通過控制面板修改這兩個(gè)變量剩蟀。
在Linux上安裝Maven
遵循第 2.3.1 節(jié) “在Mac OSX上安裝Maven”的步驟,在Linux機(jī)器上安裝Maven切威。
掃清障礙
學(xué)習(xí)新技能的時(shí)候育特,有太多的內(nèi)容需要去探索,快速有效的獲取信息非常重要牢屋。掌握下邊兩個(gè)方法且预,可以助你快速掌握maven槽袄。
help 插件的使用方法
tags:maven help
目的:使用
help
插件烙无,配合不同的參數(shù),查看maven插件的相關(guān)信息遍尺。
命令:
mvn help:describe -Dplugin=插件名稱
或mvn 插件名稱:help
作用:查看插件的描述信息截酷。命令:
mvn help:describe -Dplugin=插件名稱 -Dmojo=目標(biāo)名稱
作用:查看插件的某個(gè)【目標(biāo)】的簡介信息。命令:
mvn help:describe -Dplugin=插件名稱 -Dmojo=目標(biāo)名稱 -Ddetail
或者這么寫mvn 插件名稱:help -Ddetail=true -Dgoal=目標(biāo)名稱
作用:查看help插件的某個(gè)【目標(biāo)】的詳細(xì)信息乾戏。
maven自有參數(shù)
使用 mvn --help
命令查看maven自有參數(shù)信息迂苛,比如-D、-X鼓择、-e
Maven核心概念
約定大于配置
在必要的情況下才進(jìn)行自定義三幻,否則使用maven默認(rèn)設(shè)置。
插件(plugin)
, 目標(biāo)(goal)
呐能,參數(shù)
念搬,生命周期
抑堡,生命周期階段
插件
是一組【目標(biāo)】的集合。maven使用插件來完成特定的任務(wù)朗徊。
比如:創(chuàng)建項(xiàng)目使用archetype插件首妖,編譯項(xiàng)目使用compiler插件,使用install插件編譯爷恳、測試有缆、打包項(xiàng)目并安裝到本地庫中等。
注意install插件温亲,他同時(shí)也是一個(gè)maven生命周期階段棚壁,因?yàn)樵趫?zhí)行install時(shí),它使用了多個(gè)插件栈虚,完成了多個(gè)目標(biāo)灌曙。
先記下,后邊再說节芥。
目標(biāo)(goal)
- 被用來完成明確的任務(wù)在刺。
- 它可以作為單獨(dú)的目標(biāo)運(yùn)行,也可以作為一個(gè)大的構(gòu)建的一部分和其它目標(biāo)一起運(yùn)行头镊。
- 一個(gè)目標(biāo)是Maven中的一個(gè)“工作單元(unit of work)“蚣驼。
你會(huì)在maven的輸出中經(jīng)常看到一個(gè)詞:Mojo相艇。mojo就是goal颖杏。A Maven plain Old Java Object.
示例:
help
是一個(gè)maven插件。它包括9個(gè)目標(biāo)坛芽。
help:active-profiles
help:all-profiles
help:describe
help:effective-pom
help:effective-settings
help:evaluate
help:expressions
help:help
help:system
- 使用命令
mvn 插件名稱:help
查看插件的目標(biāo)留储。
參數(shù)
目標(biāo)定義了一些參數(shù),可以在執(zhí)行目標(biāo)時(shí)咙轩,向目標(biāo)傳遞參數(shù)值來達(dá)成個(gè)性化的結(jié)果获讳。
- 使用命令
mvn help:describe -Dplugin=插件名稱 -Dmojo=目標(biāo)名稱 -Ddetail
查看目標(biāo)的參數(shù)。
生命周期
生命周期就是一個(gè)項(xiàng)目從無到有的整個(gè)過程活喊,這個(gè)過程里包含了多個(gè)階段(比如創(chuàng)建丐膝、編譯、測試钾菊、打包/構(gòu)建帅矗、部署),每個(gè)階段就叫做生命周期階段煞烫。Maven的生命周期是抽象的浑此。
這意味著生命周期本身不做任何實(shí)際的工作。在Maven的設(shè)計(jì)中滞详,實(shí)際的任務(wù)(如編譯源代碼)都交由插件來完成凛俱。maven命令行的輸入往往就對(duì)應(yīng)了生命周期階段喘落,如mvn package就表示執(zhí)行默認(rèn)生命周期階段package(構(gòu)建)。
- 生命周期和插件兩者協(xié)同工作最冰,密不可分瘦棋。
- 生命周期是一系列有序的生命周期階段的集合,對(duì)所有的構(gòu)建過程進(jìn)行了抽象和統(tǒng)一暖哨。
- Maven可以支持許多不同的生命周期赌朋,最常用的是Maven生命周期。
包括:
清理
初始化
編譯
測試
打包(package)
集成測試
驗(yàn)證
部署
站點(diǎn)生成
以上的每個(gè)生命周期階段都可以綁定一個(gè)或者多個(gè)插件行為篇裁,而且Maven為大多數(shù)構(gòu)建步驟編寫并綁定了默認(rèn)插件沛慢。
比如package這個(gè)生命周期階段的編譯任務(wù)可能就會(huì)調(diào)用maven-jar-plugin來完成,測試任務(wù)就會(huì)調(diào)用maven-surefire-plugin來完成达布。
坐標(biāo)
Maven坐標(biāo)定義了一組標(biāo)識(shí)团甲,它們可以用來唯一標(biāo)識(shí)一個(gè)項(xiàng)目,一個(gè)依賴黍聂,或者M(jìn)aven POM里的一個(gè)插件躺苦。
Maven項(xiàng)目坐標(biāo)的構(gòu)成元素:groupId, artifactId, version和packaging。這些組合的標(biāo)識(shí)符拼成了一個(gè)項(xiàng)目的坐標(biāo)产还。
但是packaging不是一個(gè)項(xiàng)目唯一標(biāo)識(shí)符的必須部分匹厘。
Maven坐標(biāo)通常用冒號(hào)來作為分隔符來書寫,格式:groupId:artifactId:packaging:version脐区。
比如:mavenbook:my-app:jar:1.0-SNAPSHOT.
這也適用于項(xiàng)目依賴愈诚,比如項(xiàng)目包含了一個(gè)對(duì)junit:junit:jar:3.8.1的依賴。
標(biāo)識(shí)解釋
1 groupId:
團(tuán)體牛隅,公司炕柔,小組,組織媒佣,項(xiàng)目匕累,或者其它團(tuán)體的逆向域名。比如Apache Software的項(xiàng)目經(jīng)常以org.apache作為groupId丈攒。
2 artifactId
在groupId下表示一個(gè)單獨(dú)項(xiàng)目的唯一標(biāo)識(shí)符哩罪。
3 version:
一個(gè)項(xiàng)目的特定版本。發(fā)布的項(xiàng)目有一個(gè)固定的版本標(biāo)識(shí)來指向該項(xiàng)目的某一個(gè)特定的版本巡验。正在開發(fā)中的項(xiàng)目用一個(gè)特殊的標(biāo)識(shí)“SNAPSHOT”標(biāo)記。正式發(fā)布版是“release”或“stable”標(biāo)記碘耳。
4 packaging:
項(xiàng)目的類型显设,默認(rèn)是jar,描述了項(xiàng)目打包后的輸出辛辨。類型為jar的項(xiàng)目產(chǎn)生一個(gè)JAR文件捕捂,類型為war的項(xiàng)目產(chǎn)生一個(gè)web應(yīng)用瑟枫。
倉庫(Repositories)
當(dāng)你第一次運(yùn)行Maven的時(shí)候,你會(huì)注意到Maven從一個(gè)遠(yuǎn)程的Maven倉庫下載了許多文件指攒。如果這個(gè)簡單的項(xiàng)目是你第一次運(yùn)行Maven慷妙,那么當(dāng)觸發(fā)resources:resource目標(biāo)的時(shí)候,它首先會(huì)做的事情是去下載最新版本的Resources插件允悦。在Maven中膝擂,構(gòu)件和插件是在它們被需要的時(shí)候從遠(yuǎn)程的倉庫取來的。初始的Maven下載包的大小相當(dāng)?shù)男隙弛。?.8兆)架馋,其中一個(gè)原因是這個(gè)初始Maven不包括多余的插件。它只包含了幾近赤裸的最少值全闷,而在需要的時(shí)候再從遠(yuǎn)程倉庫去取叉寂。Maven自帶了一個(gè)用來下載Maven核心插件和依賴的遠(yuǎn)程倉庫地址/ http://repo1.maven.org/maven2 。你常常會(huì)寫這樣一個(gè)項(xiàng)目总珠,這個(gè)項(xiàng)目依賴于一些既不免費(fèi)也不公開的包屏鳍。在這種情況下,你需要要么在你組織的網(wǎng)絡(luò)里安裝一個(gè)定制的倉庫局服,要么手動(dòng)的安裝這些依賴孕蝉。默認(rèn)的遠(yuǎn)程倉庫可以被替換,或者增加一個(gè)你組織維護(hù)的自定義Maven倉庫的引用腌逢。有許多現(xiàn)成的項(xiàng)目允許組織管理和維護(hù)公共Maven倉庫的鏡像降淮。
是什么讓Maven倉庫成為一個(gè)Maven倉庫的呢?
Maven倉庫是通過結(jié)構(gòu)來定義的搏讶,一個(gè)Maven倉庫是項(xiàng)目構(gòu)件的一個(gè)集合佳鳖,這些構(gòu)件存儲(chǔ)在一個(gè)目錄結(jié)構(gòu)下面,它們的格式能很容易的被Maven所理解媒惕。在一個(gè)Maven倉庫中系吩,所有的東西存儲(chǔ)在一個(gè)與Maven項(xiàng)目坐標(biāo)十分匹配的目錄結(jié)構(gòu)中。你可以打開瀏覽器妒蔚,然后瀏覽中央Maven倉庫http://repo1.maven.org/maven2/ 來看這樣的結(jié)構(gòu)穿挨。你會(huì)看到坐標(biāo)為org.apache.commons:commons-email:1.1的構(gòu)件能在目錄/org/apache/commons/commons-email/1.1/下找到,文件名為commons-email-1.1.jar肴盏。Maven倉庫使用約定的標(biāo)準(zhǔn)目錄格式來存儲(chǔ)構(gòu)件科盛。
Maven從遠(yuǎn)程倉庫下載構(gòu)件和插件到你本機(jī)上,存儲(chǔ)在你的本地Maven倉庫里菜皂。一旦Maven已經(jīng)從遠(yuǎn)程倉庫下載了一個(gè)構(gòu)件贞绵,它將永遠(yuǎn)不需要再下載一次,因?yàn)閙aven會(huì)首先在本地倉庫查找插件恍飘,然后才是其它地方榨崩。在Windows XP上谴垫,你的本地倉庫很可能在C:\Documents and Settings\USERNAME.m2\repository,在Windows Vista上母蛛,會(huì)是C:
\Users\USERNAME.m2\repository翩剪。在Unix系統(tǒng)上,你的本地倉庫在~/.m2/repository彩郊。
如果你運(yùn)行 mvn install
命令前弯,Maven會(huì)把本地項(xiàng)目的構(gòu)件安裝到本地倉庫。你能從這個(gè)命令的輸出看到焦辅,Maven把本地項(xiàng)目的JAR文件安裝到了本地Maven倉庫博杖。Maven在本地項(xiàng)目中通過本地倉庫來共享依賴。如果你開發(fā)了兩個(gè)項(xiàng)目—— 項(xiàng)目A和項(xiàng)目B——項(xiàng)目B依賴于項(xiàng)目A產(chǎn)生的構(gòu)件筷登。當(dāng)構(gòu)建項(xiàng)目B的時(shí)候剃根,Maven會(huì)從本地倉庫取得項(xiàng)目A的構(gòu)件。
Maven倉庫既是一個(gè)從遠(yuǎn)程倉庫下載的構(gòu)件的緩存前方,也允許你的項(xiàng)目相互依賴狈醉。
依賴管理 (Dependency Management)
創(chuàng)建一個(gè)項(xiàng)目所需要的資源引用稱為依賴。
一個(gè)復(fù)雜的項(xiàng)目將會(huì)包含很多依賴惠险,也有可能包含依賴于其它構(gòu)件的依賴苗傅。這是Maven最強(qiáng)大的特征之一,它支持了傳遞性依賴(transitive dependencies)班巩。假如你的項(xiàng)目依賴于一個(gè)庫渣慕,而這個(gè)庫又依賴于五個(gè)或者十個(gè)其它的庫(就像Spring或者Hibernate那樣)。你不必找出所有這些依賴然后把它們寫在你的pom.xml里抱慌,你只需要加上你直接依賴的那些庫逊桦,Maven會(huì)隱式的把這些庫間接依賴的庫也加入到你的項(xiàng)目中。Maven也會(huì)處理這些依賴中的沖突抑进,同時(shí)能讓你自定義默認(rèn)行為强经,或者排除一些特定的傳遞性依賴。
在Maven中的一個(gè)依賴不僅僅是一個(gè)JAR寺渗。它還包括了一個(gè)POM文件匿情,這個(gè)POM可能也聲明了對(duì)其它構(gòu)件的依賴。這些依賴的依賴叫做傳遞性依賴信殊,Maven倉庫不僅僅存貯二進(jìn)制文件炬称,也存儲(chǔ)了這些構(gòu)建的元數(shù)據(jù)(metadata),才使傳遞性依賴成為可能鸡号。
讓我們看一下這個(gè)目錄:~/.m2/repository/junit/junit/3.8.1/转砖。這里會(huì)有文件junit-3.8.1.jar 和junit-3.8.1.pom,還有Maven用來驗(yàn)證已下載構(gòu)件準(zhǔn)確性的校驗(yàn)和文件鲸伴。需要注意的是Maven不只是下載JUnit的JAR文件府蔗,它同時(shí)為這個(gè)JUnit依賴下載了一個(gè)POM文件。Maven同時(shí)下載構(gòu)件和POM文件的這種行為汞窗,對(duì)Maven支持傳遞性依賴來說非常重要姓赤。
當(dāng)Maven通過一組Maven坐標(biāo)來處理依賴構(gòu)件的時(shí)候,它也會(huì)獲取依賴構(gòu)建的POM仲吏,通過依賴的POM來尋找傳遞性依賴不铆。那些傳遞性依賴就會(huì)被添加到當(dāng)前項(xiàng)目的依賴列表中。
Maven同時(shí)也提供了一種機(jī)制裹唆,能讓你排除一些你不想要的傳遞性依賴誓斥。
Maven也提供了不同的依賴范圍(dependency scope)。當(dāng)一個(gè)依賴的范圍是test的時(shí)候许帐,說明它在Compiler插件運(yùn)行compile 目標(biāo)的時(shí)候是不可用的劳坑。它只有在運(yùn)行compiler:testCompile和surefire:test目標(biāo)的時(shí)候才會(huì)被加入到classpath中。當(dāng)用Maven來創(chuàng)建WAR或者EAR成畦,你可以配置Maven讓它在生成的構(gòu)件中捆綁依賴距芬,你也可以配置Maven,使用provided范圍循帐,讓它排除WAR文件中特定的依賴框仔。provided范圍告訴Maven一個(gè)依賴在編譯的時(shí)候需要,但是它不應(yīng)該被捆綁在構(gòu)建的輸出中拄养。當(dāng)你開發(fā)web應(yīng)用的時(shí)候provided范圍變得十分有用离斩,你需要通過Servlet API來編譯你的代碼,但是你不希望Servlet API的JAR文件包含在你web應(yīng)用的WEB-INF/lib 目錄中瘪匿。
站點(diǎn)生成和報(bào)告 (Site Generation and Reporting)
另外一個(gè)Maven的重要特征是跛梗,它能生成文檔和報(bào)告。在項(xiàng)目的目錄下柿顶,運(yùn)行以下命令:
mvn site
這將會(huì)運(yùn)行site生命周期階段茄袖。它不像默認(rèn)生命周期那樣,管理代碼生成嘁锯,操作資源宪祥,編譯,打包等等家乘。Site生命周期只關(guān)心處理在src/site目錄下的site內(nèi)容蝗羊,還有生成報(bào)告。在這個(gè)命令運(yùn)行過之后仁锯,你將會(huì)在target/site 目錄下看到一個(gè)項(xiàng)目web站點(diǎn)耀找。載入target/site/index.html你會(huì)看到項(xiàng)目站點(diǎn)的基本外貌。它包含了一些報(bào)告,它們?cè)谧笫诌叺膶?dǎo)航目錄的“項(xiàng)目報(bào)告”下面野芒。它也包含了項(xiàng)目相關(guān)的信息蓄愁,依賴和相關(guān)開發(fā)人員信息。
在這個(gè)站點(diǎn)上狞悲,你會(huì)注意到一些默認(rèn)的報(bào)告已經(jīng)可以訪問了撮抓,有一個(gè)報(bào)告詳細(xì)描述了測試的結(jié)果。這個(gè)單元測試報(bào)告描述了項(xiàng)目中所有單元測試的成功和失敗信息摇锋。另外一個(gè)報(bào)告生成了項(xiàng)目API的JavaDoc丹拯。Maven提供了很完整的可配置的報(bào)告,像Clover報(bào)告檢查單元測試覆蓋率荸恕,JXR報(bào)告生成HTML源代碼相互間引用乖酬,這在代碼審查的時(shí)候非常有用,PMD報(bào)告針對(duì)各種編碼問題來分析源代碼融求,JDepend報(bào)告分析源代碼中各個(gè)包之間的依賴咬像。通過在pom.xml中配置那些報(bào)告被包含在構(gòu)建中,站點(diǎn)報(bào)告就可以被定制了双肤。
自己動(dòng)手體會(huì)一下
通過一個(gè)經(jīng)典的控制臺(tái) Hello world! 程序來體會(huì)maven的使用過程施掏,包括創(chuàng)建、編譯茅糜、測試七芭、打包 ,并運(yùn)行程序蔑赘。
第一步:定位目錄
在命令窗口中定位到將要?jiǎng)?chuàng)建項(xiàng)目的目錄下狸驳。比如我的是:D:\Project\mavenTest\quickstart>
。
第二步:創(chuàng)建項(xiàng)目
使用archetype插件創(chuàng)建項(xiàng)目缩赛,輸入以下命令:mvn archetype:generate
,回車耙箍,等。酥馍。辩昆。 然后,不出意外的話旨袒,你會(huì)看到屏幕輸出了上千種archetype支持的項(xiàng)目類型汁针。在末尾你會(huì)看到要求你輸入的地方,就是這個(gè):Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 756:
不翻譯了砚尽,你一定要能看懂施无。
因?yàn)槲覀円獎(jiǎng)?chuàng)建的是一個(gè)簡單的示例程序,所以什么都不輸入必孤,直接回車猾骡。
屏幕輸出maven-archetype-quickstart項(xiàng)目類型的幾個(gè)不同版本.
輸入對(duì)應(yīng)的序號(hào)(我輸入的是6),然后回車。
按照屏幕輸出兴想,依次輸入:groupId,artifactId,version,package.
屏幕會(huì)輸出你填寫的項(xiàng)目信息幢哨,要求你確認(rèn),輸入 Y 襟企,回車嘱么,確認(rèn)狮含。
maven會(huì)根據(jù)你的設(shè)置開始下載依賴文件并創(chuàng)建項(xiàng)目顽悼。 當(dāng)你看到Build Success時(shí),項(xiàng)目就被創(chuàng)建好了几迄,打開你的項(xiàng)目位置查看你的項(xiàng)目蔚龙。maven在項(xiàng)目根目錄下生成了一個(gè)POM.xml文件,這個(gè)是項(xiàng)目對(duì)象模型描述文件映胁,maven就是根據(jù)這個(gè)文件的描述來構(gòu)建你的項(xiàng)目的木羹,打開看一下。
第三步:編譯項(xiàng)目
使用compiler插件創(chuàng)建項(xiàng)目解孙,輸入以下命令:mvn compiler:compile
,回車坑填,等。弛姜。脐瑰。
maven開始下載依賴文件并編譯項(xiàng)目。 當(dāng)你看到Build Success時(shí)廷臼,項(xiàng)目就被編譯好了苍在,你還可以看到詳細(xì)的編譯結(jié)果信息。
第四步:打包項(xiàng)目 / 構(gòu)建項(xiàng)目
使用maven默認(rèn)的生命周期階段命令package來打包項(xiàng)目荠商,輸入以下命令:mvn package
,回車寂恬,等。莱没。初肉。
maven開始下載依賴文件并編譯項(xiàng)目。 當(dāng)你看到Build Success時(shí)饰躲,項(xiàng)目就被打包好了牙咏,你還可以看到詳細(xì)的編譯結(jié)果信息。項(xiàng)目的根目錄會(huì)出現(xiàn)一個(gè)target目錄属铁,存放了項(xiàng)目打包后的文件眠寿。
當(dāng)然,你也可以不使用maven生命周期的默認(rèn)package命令焦蘑,而是自己動(dòng)手使用多個(gè)插件來完成這個(gè)任務(wù)盯拱。
第五步:運(yùn)行項(xiàng)目
如果前邊的都成功完成的話,現(xiàn)在就可以運(yùn)行一下項(xiàng)目看看結(jié)果了。
命令行輸入:java -cp target/quickstart-1.1.jar maven.archetype.quickstart.App
回車狡逢。
應(yīng)該輸出了Hello world宁舰!
。
到這里為止奢浑,你已經(jīng)了解了maven最核心的概念蛮艰,明白了maven的結(jié)構(gòu),而且親自使用maven成功構(gòu)建了一個(gè)項(xiàng)目雀彼。
所以壤蚜,本文到此就結(jié)束了。
接下來徊哑,到實(shí)際的工作中去使用maven袜刷,不斷磨練自己的技藝吧!