Maven技術(shù)解析

Maven簡(jiǎn)單介紹

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);
  • 用來(lái)運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。

當(dāng)你使用Maven的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來(lái)描述你的項(xiàng)目,然后 Maven 可以應(yīng)用橫切的邏輯, 這些邏輯來(lái)自一組共享的(或者自定義的)插件。

如果看完簡(jiǎn)介,你還迷糊的,那么我想說(shuō):這很正常!請(qǐng)心無(wú)旁騖地往下看,學(xué)習(xí)完這個(gè)入門教程,該懂的你就都懂了。


溫馨提示:本文的最后一個(gè)主題是個(gè)動(dòng)手示例,如果大段的文字定義讓你非常沒(méi)有效率,那么,你可以在任何時(shí)候先來(lái)動(dòng)手完成這個(gè)示例。找找感覺(jué),然后再來(lái)看這些枯燥的定義。

安裝Maven

在Mac OSX上安裝Maven

你可以從http://maven.apache.org/download.html下載Maven的二進(jìn)制版本。下載最新 的,下載格式最方便你使用的版本。找個(gè)地方存放它,并把存檔文件解開(kāi)。如果你把存 檔文件解壓到 /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,但是,除非你通過(guò)控制面 板把它們加入系統(tǒng)變量,你將需要每次登陸系統(tǒng)的時(shí)候運(yùn)行這兩行命令。你應(yīng)該在 Microsoft Windows中通過(guò)控制面板修改這兩個(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)】的簡(jiǎn)介信息。

  • 命令: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使用插件來(lái)完成特定的任務(wù)。

比如:創(chuàng)建項(xiàng)目使用archetype插件,編譯項(xiàng)目使用compiler插件,使用install插件編譯、測(cè)試、打包項(xiàng)目并安裝到本地庫(kù)中等。
注意install插件,他同時(shí)也是一個(gè)maven生命周期階段,因?yàn)樵趫?zhí)行install時(shí),它使用了多個(gè)插件,完成了多個(gè)目標(biāo)。

先記下,后邊再說(shuō)。


目標(biāo)(goal)

  • 被用來(lái)完成明確的任務(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ù)值來(lái)達(dá)成個(gè)性化的結(jié)果。

  • 使用命令 mvn help:describe -Dplugin=插件名稱 -Dmojo=目標(biāo)名稱 -Ddetail 查看目標(biāo)的參數(shù)。

生命周期

生命周期就是一個(gè)項(xiàng)目從無(wú)到有的整個(gè)過(guò)程,這個(gè)過(guò)程里包含了多個(gè)階段(比如創(chuàng)建、編譯、測(cè)試、打包/構(gòu)建、部署),每個(gè)階段就叫做生命周期階段。Maven的生命周期是抽象的。
這意味著生命周期本身不做任何實(shí)際的工作。在Maven的設(shè)計(jì)中,實(shí)際的任務(wù)(如編譯源代碼)都交由插件來(lái)完成。maven命令行的輸入往往就對(duì)應(yīng)了生命周期階段,如mvn package就表示執(zhí)行默認(rèn)生命周期階段package(構(gòu)建)。

  • 生命周期和插件兩者協(xié)同工作,密不可分。
  • 生命周期是一系列有序的生命周期階段的集合,對(duì)所有的構(gòu)建過(guò)程進(jìn)行了抽象和統(tǒng)一。
  • Maven可以支持許多不同的生命周期,最常用的是Maven生命周期。

包括:

清理
初始化
編譯
測(cè)試
打包(package)
集成測(cè)試
驗(yàn)證
部署
站點(diǎn)生成

以上的每個(gè)生命周期階段都可以綁定一個(gè)或者多個(gè)插件行為,而且Maven為大多數(shù)構(gòu)建步驟編寫并綁定了默認(rèn)插件。
比如package這個(gè)生命周期階段的編譯任務(wù)可能就會(huì)調(diào)用maven-jar-plugin來(lái)完成,測(cè)試任務(wù)就會(huì)調(diào)用maven-surefire-plugin來(lái)完成。

坐標(biāo)

Maven坐標(biāo)定義了一組標(biāo)識(shí),它們可以用來(lái)唯一標(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)來(lái)作為分隔符來(lái)書寫,格式: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í)來(lái)指向該項(xiàng)目的某一個(gè)特定的版本。正在開(kāi)發(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)用。

倉(cāng)庫(kù)(Repositories)

當(dāng)你第一次運(yùn)行Maven的時(shí)候,你會(huì)注意到Maven從一個(gè)遠(yuǎn)程的Maven倉(cāng)庫(kù)下載了許多文件。如果這個(gè)簡(jiǎn)單的項(xiàng)目是你第一次運(yùn)行Maven,那么當(dāng)觸發(fā)resources:resource目標(biāo)的時(shí)候,它首先會(huì)做的事情是去下載最新版本的Resources插件。在Maven中,構(gòu)件和插件是在它們被需要的時(shí)候從遠(yuǎn)程的倉(cāng)庫(kù)取來(lái)的。初始的Maven下載包的大小相當(dāng)?shù)男。?.8兆),其中一個(gè)原因是這個(gè)初始Maven不包括多余的插件。它只包含了幾近赤裸的最少值,而在需要的時(shí)候再?gòu)倪h(yuǎn)程倉(cāng)庫(kù)去取。Maven自帶了一個(gè)用來(lái)下載Maven核心插件和依賴的遠(yuǎn)程倉(cāng)庫(kù)地址/ http://repo1.maven.org/maven2 。你常常會(huì)寫這樣一個(gè)項(xiàng)目,這個(gè)項(xiàng)目依賴于一些既不免費(fèi)也不公開(kāi)的包。在這種情況下,你需要要么在你組織的網(wǎng)絡(luò)里安裝一個(gè)定制的倉(cāng)庫(kù),要么手動(dòng)的安裝這些依賴。默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù)可以被替換,或者增加一個(gè)你組織維護(hù)的自定義Maven倉(cāng)庫(kù)的引用。有許多現(xiàn)成的項(xiàng)目允許組織管理和維護(hù)公共Maven倉(cāng)庫(kù)的鏡像。

是什么讓Maven倉(cāng)庫(kù)成為一個(gè)Maven倉(cāng)庫(kù)的呢?

Maven倉(cāng)庫(kù)是通過(guò)結(jié)構(gòu)來(lái)定義的,一個(gè)Maven倉(cāng)庫(kù)是項(xiàng)目構(gòu)件的一個(gè)集合,這些構(gòu)件存儲(chǔ)在一個(gè)目錄結(jié)構(gòu)下面,它們的格式能很容易的被Maven所理解。在一個(gè)Maven倉(cāng)庫(kù)中,所有的東西存儲(chǔ)在一個(gè)與Maven項(xiàng)目坐標(biāo)十分匹配的目錄結(jié)構(gòu)中。你可以打開(kāi)瀏覽器,然后瀏覽中央Maven倉(cāng)庫(kù)http://repo1.maven.org/maven2/ 來(lái)看這樣的結(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倉(cāng)庫(kù)使用約定的標(biāo)準(zhǔn)目錄格式來(lái)存儲(chǔ)構(gòu)件。

Maven從遠(yuǎn)程倉(cāng)庫(kù)下載構(gòu)件和插件到你本機(jī)上,存儲(chǔ)在你的本地Maven倉(cāng)庫(kù)里。一旦Maven已經(jīng)從遠(yuǎn)程倉(cāng)庫(kù)下載了一個(gè)構(gòu)件,它將永遠(yuǎn)不需要再下載一次,因?yàn)閙aven會(huì)首先在本地倉(cāng)庫(kù)查找插件,然后才是其它地方。在Windows XP上,你的本地倉(cāng)庫(kù)很可能在C:\Documents and Settings\USERNAME.m2\repository,在Windows Vista上,會(huì)是C:
\Users\USERNAME.m2\repository。在Unix系統(tǒng)上,你的本地倉(cāng)庫(kù)在~/.m2/repository。

如果你運(yùn)行 mvn install 命令,Maven會(huì)把本地項(xiàng)目的構(gòu)件安裝到本地倉(cāng)庫(kù)。你能從這個(gè)命令的輸出看到,Maven把本地項(xiàng)目的JAR文件安裝到了本地Maven倉(cāng)庫(kù)。Maven在本地項(xiàng)目中通過(guò)本地倉(cāng)庫(kù)來(lái)共享依賴。如果你開(kāi)發(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ì)從本地倉(cāng)庫(kù)取得項(xiàng)目A的構(gòu)件。

Maven倉(cāng)庫(kù)既是一個(gè)從遠(yuǎn)程倉(cāng)庫(kù)下載的構(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è)庫(kù),而這個(gè)庫(kù)又依賴于五個(gè)或者十個(gè)其它的庫(kù)(就像Spring或者Hibernate那樣)。你不必找出所有這些依賴然后把它們寫在你的pom.xml里,你只需要加上你直接依賴的那些庫(kù),Maven會(huì)隱式的把這些庫(kù)間接依賴的庫(kù)也加入到你的項(xiàng)目中。Maven也會(huì)處理這些依賴中的沖突,同時(shí)能讓你自定義默認(rèn)行為,或者排除一些特定的傳遞性依賴。

在Maven中的一個(gè)依賴不僅僅是一個(gè)JAR。它還包括了一個(gè)POM文件,這個(gè)POM可能也聲明了對(duì)其它構(gòu)件的依賴。這些依賴的依賴叫做傳遞性依賴,Maven倉(cāng)庫(kù)不僅僅存貯二進(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用來(lái)驗(yàn)證已下載構(gòu)件準(zhǔn)確性的校驗(yàn)和文件。需要注意的是Maven不只是下載JUnit的JAR文件,它同時(shí)為這個(gè)JUnit依賴下載了一個(gè)POM文件。Maven同時(shí)下載構(gòu)件和POM文件的這種行為,對(duì)Maven支持傳遞性依賴來(lái)說(shuō)非常重要。
當(dāng)Maven通過(guò)一組Maven坐標(biāo)來(lái)處理依賴構(gòu)件的時(shí)候,它也會(huì)獲取依賴構(gòu)建的POM,通過(guò)依賴的POM來(lái)尋找傳遞性依賴。那些傳遞性依賴就會(huì)被添加到當(dāng)前項(xiàng)目的依賴列表中。

Maven同時(shí)也提供了一種機(jī)制,能讓你排除一些你不想要的傳遞性依賴。

Maven也提供了不同的依賴范圍(dependency scope)。當(dāng)一個(gè)依賴的范圍是test的時(shí)候,說(shuō)明它在Compiler插件運(yùn)行compile 目標(biāo)的時(shí)候是不可用的。它只有在運(yùn)行compiler:testCompile和surefire:test目標(biāo)的時(shí)候才會(huì)被加入到classpath中。當(dāng)用Maven來(lái)創(chuàng)建WAR或者EAR,你可以配置Maven讓它在生成的構(gòu)件中捆綁依賴,你也可以配置Maven,使用provided范圍,讓它排除WAR文件中特定的依賴。provided范圍告訴Maven一個(gè)依賴在編譯的時(shí)候需要,但是它不應(yīng)該被捆綁在構(gòu)建的輸出中。當(dāng)你開(kāi)發(fā)web應(yīng)用的時(shí)候provided范圍變得十分有用,你需要通過(guò)Servlet API來(lái)編譯你的代碼,但是你不希望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)行過(guò)之后,你將會(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)開(kāi)發(fā)人員信息。

在這個(gè)站點(diǎn)上,你會(huì)注意到一些默認(rèn)的報(bào)告已經(jīng)可以訪問(wèn)了,有一個(gè)報(bào)告詳細(xì)描述了測(cè)試的結(jié)果。這個(gè)單元測(cè)試報(bào)告描述了項(xiàng)目中所有單元測(cè)試的成功和失敗信息。另外一個(gè)報(bào)告生成了項(xiàng)目API的JavaDoc。Maven提供了很完整的可配置的報(bào)告,像Clover報(bào)告檢查單元測(cè)試覆蓋率,JXR報(bào)告生成HTML源代碼相互間引用,這在代碼審查的時(shí)候非常有用,PMD報(bào)告針對(duì)各種編碼問(wèn)題來(lái)分析源代碼,JDepend報(bào)告分析源代碼中各個(gè)包之間的依賴。通過(guò)在pom.xml中配置那些報(bào)告被包含在構(gòu)建中,站點(diǎn)報(bào)告就可以被定制了。

自己動(dòng)手體會(huì)一下

通過(guò)一個(gè)經(jīng)典的控制臺(tái) Hello world! 程序來(lái)體會(huì)maven的使用過(guò)程,包括創(chuàng)建、編譯、測(cè)試、打包 ,并運(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è)簡(jiǎn)單的示例程序,所以什么都不輸入,直接回車。
屏幕輸出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è)置開(kāi)始下載依賴文件并創(chuàng)建項(xiàng)目。 當(dāng)你看到Build Success時(shí),項(xiàng)目就被創(chuàng)建好了,打開(kāi)你的項(xiàng)目位置查看你的項(xiàng)目。maven在項(xiàng)目根目錄下生成了一個(gè)POM.xml文件,這個(gè)是項(xiàng)目對(duì)象模型描述文件,maven就是根據(jù)這個(gè)文件的描述來(lái)構(gòu)建你的項(xiàng)目的,打開(kāi)看一下。

第三步:編譯項(xiàng)目

使用compiler插件創(chuàng)建項(xiàng)目,輸入以下命令:mvn compiler:compile ,回車,等。。。
maven開(kāi)始下載依賴文件并編譯項(xiàng)目。 當(dāng)你看到Build Success時(shí),項(xiàng)目就被編譯好了,你還可以看到詳細(xì)的編譯結(jié)果信息。

第四步:打包項(xiàng)目 / 構(gòu)建項(xiàng)目

使用maven默認(rèn)的生命周期階段命令package來(lái)打包項(xiàng)目,輸入以下命令:mvn package ,回車,等。。。
maven開(kāi)始下載依賴文件并編譯項(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è)插件來(lái)完成這個(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é)束了。

接下來(lái),到實(shí)際的工作中去使用maven,不斷磨練自己的技藝吧!

附錄

apache maven 官網(wǎng)

基于 Jenkins 快速搭建持續(xù)集成環(huán)境

maven的快速設(shè)置

maven核心插件列表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • |-1-更新內(nèi)容[6.從倉(cāng)庫(kù)解析依賴的機(jī)制(重要)] 1Maven倉(cāng)庫(kù)作用 倉(cāng)庫(kù)用來(lái)存儲(chǔ)所有項(xiàng)目使用到構(gòu)件,在ma...
    zlcook閱讀 6,466評(píng)論 0 25
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個(gè)開(kāi)源項(xiàng)目。它是用純java開(kāi)發(fā)的。是一...
    Bcome閱讀 3,152評(píng)論 0 7
  • 我jdk版本是1.7.0_95,在網(wǎng)上查了一下1.7屬于java7maven3.3+版本都支持java7,所以我使...
    liangxifeng833閱讀 1,387評(píng)論 0 2
  • 首先私服是一種衍生出來(lái)的特殊的Maven遠(yuǎn)程倉(cāng)庫(kù),構(gòu)建私服的好處請(qǐng)看3.5私服 可以幫助大家建立私服的倉(cāng)庫(kù)管理軟件...
    zlcook閱讀 10,834評(píng)論 0 32
  • 一直以來(lái),便很喜歡三毛的這句話:如果有來(lái)生,我愿做一棵樹(shù)。站成永恒,沒(méi)有悲歡的姿勢(shì)。一半在塵土里安詳,一半...
    2401期待閱讀 379評(píng)論 0 1

友情鏈接更多精彩內(nèi)容