日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Maven入门指南(一)

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven入门指南(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接??譯文鏈接??譯者:nkcoder??校對(duì):騰飛

Maven介紹:

Maven是一個(gè)強(qiáng)大的Java項(xiàng)目構(gòu)建工具。當(dāng)然,你也可以使用其它工具來(lái)構(gòu)建項(xiàng)目,但由于Maven是用Java開(kāi)發(fā)的,因此Maven被更多的用于Java項(xiàng)目中。

這篇教程的目的是幫助你理解Maven的工作機(jī)制。因此教程主要關(guān)注Maven的核心概念。一旦你理解了這些核心概念,當(dāng)你想了解更多的細(xì)節(jié)時(shí),再取查看Maven文檔,或者從網(wǎng)上搜索,就變得容易多了。

事實(shí)上,Maven開(kāi)發(fā)者認(rèn)為Maven不僅僅是一個(gè)構(gòu)建工具。你可以去閱讀他們的文檔Maven哲學(xué),看看他們是怎么想的。但是現(xiàn)在,我們就把Maven當(dāng)作一個(gè)構(gòu)建工具,當(dāng)你理解和開(kāi)始使用Maven后,你就明白Mavan到底是什么了。

本教程基于Maven 3.0.5。Maven網(wǎng)站的地址為:http://maven.apache.org,你可以從該網(wǎng)站上下載最新版的Maven,并關(guān)注項(xiàng)目的進(jìn)展。

?

什么是構(gòu)建工具?

構(gòu)建工具是將軟件項(xiàng)目構(gòu)建相關(guān)的過(guò)程自動(dòng)化的工具。構(gòu)建一個(gè)軟件項(xiàng)目通常包含以下一個(gè)或多個(gè)過(guò)程:

  • 生成源碼(如果項(xiàng)目使用自動(dòng)生成源碼);
  • 從源碼生成項(xiàng)目文檔;
  • 編譯源碼;
  • 將編譯后的代碼打包成JAR文件或者ZIP文件;
  • 將打包好的代碼安裝到服務(wù)器、倉(cāng)庫(kù)或者其它的地方;

有些項(xiàng)目可能需要更多的過(guò)程才能完成構(gòu)建,這些過(guò)程一般也可以整合到構(gòu)建工具中,因此它們也可以實(shí)現(xiàn)自動(dòng)化。

自動(dòng)化構(gòu)建過(guò)程的好處是將手動(dòng)構(gòu)建過(guò)程中犯錯(cuò)的風(fēng)險(xiǎn)降到最低。而且,自動(dòng)構(gòu)建工具通常要比手動(dòng)執(zhí)行同樣的構(gòu)建過(guò)程要快。

安裝Maven

安裝Maven,訪問(wèn)Maven下載頁(yè),然后按照安裝指南的步驟即可。總結(jié)一下,你需要做:
1. 下載并解壓Maven;
2. 將環(huán)境變量M2_HOME設(shè)置為解壓后的目錄;
3. 將M2環(huán)境變量設(shè)置為M2_HOME/bin(在Windows上是%M2_HOME%/bin,在Unix上是$M2_HOME/bin);
4. 將M2添加到PATH環(huán)境變量中(Windows上是%M2%,Unix上是$M2);
5. 打開(kāi)終端輸入`mvn`(不帶引號(hào)),然后回車(chē);

輸入‘mvn’命令后,終端上回顯示錯(cuò)誤信息。不要擔(dān)心這個(gè)錯(cuò)誤。因?yàn)槟銢](méi)有給Maven傳入pom文件,因此出現(xiàn)該錯(cuò)誤信息是意料之中的。顯示Maven錯(cuò)誤信息說(shuō)明Maven已經(jīng)安裝好了。

注意:Maven運(yùn)行需要Java環(huán)境,因此也需要安裝Java,Java版本1.5及以上;

Maven概覽-核心概念

Maven的中心思想是POM文件(項(xiàng)目對(duì)象模型)。POM文件是以XML文件的形式表述項(xiàng)目的資源,如源碼、測(cè)試代碼、依賴(lài)(用到的外部Jar包)等。POM文件應(yīng)該位于項(xiàng)目的根目錄下。

下圖說(shuō)明了Maven是如何使用POM文件的,以及POM文件的主要組成部分:

這些概念先簡(jiǎn)單地解釋一下,更多的細(xì)節(jié)放在本教程的具體小節(jié)中。

POM文件

當(dāng)你執(zhí)行一條Maven命令的時(shí)候,你會(huì)傳入一個(gè)pom文件。Maven會(huì)在該pom文件描述的資源上執(zhí)行該命令。

構(gòu)建生命周期、階段和目標(biāo)

Maven的構(gòu)建過(guò)程被分解為構(gòu)建生命周期、階段和目標(biāo)。一個(gè)構(gòu)建周期由一系列的構(gòu)建階段組成,每一個(gè)構(gòu)建階段由一系列的目標(biāo)組成。當(dāng)你運(yùn)行Maven的時(shí)候,你會(huì)傳入一條命令。這條命令就是構(gòu)建生命周期、階段或目標(biāo)的名字。如果執(zhí)行一個(gè)生命周期,該生命周期內(nèi)的所有構(gòu)建階段都會(huì)被執(zhí)行。如果執(zhí)行一個(gè)構(gòu)建階段,在預(yù)定義的構(gòu)建階段中,所有處于當(dāng)前構(gòu)建階段之前的階段也都會(huì)被執(zhí)行。

依賴(lài)和倉(cāng)庫(kù)

Maven執(zhí)行時(shí),其中一個(gè)首要目標(biāo)就是檢查項(xiàng)目的依賴(lài)。依賴(lài)是你的項(xiàng)目用到的jar文件(java庫(kù))。如果在本地倉(cāng)庫(kù)中不存在該依賴(lài),則Maven會(huì)從中央倉(cāng)庫(kù)下載并放到本地倉(cāng)庫(kù)。本地倉(cāng)庫(kù)只是你電腦硬盤(pán)上的一個(gè)目錄。你可以根據(jù)需要制定本地倉(cāng)庫(kù)的位置。你也可以指定下載依賴(lài)的遠(yuǎn)程倉(cāng)庫(kù)的地址。這些將會(huì)在后續(xù)的小節(jié)中詳細(xì)介紹。

插件

構(gòu)建插件可以向構(gòu)建階段中增加額外的構(gòu)建目標(biāo)。如果Maven標(biāo)準(zhǔn)的構(gòu)建階段和目標(biāo)無(wú)法滿(mǎn)足項(xiàng)目構(gòu)建的需求,你可以在POM文件里增加插件。Maven有一些標(biāo)準(zhǔn)的插件供選用,如果需要你可以自己實(shí)現(xiàn)插件。

配置文件

配置文件用于以不同的方式構(gòu)建項(xiàng)目。比如,你可能需要在本地環(huán)境構(gòu)建,用于開(kāi)發(fā)和測(cè)試,你也可能需要構(gòu)建后用于開(kāi)發(fā)環(huán)境。這兩個(gè)構(gòu)建過(guò)程是不同的。在POM文件中增加不同的構(gòu)建配置,可以啟用不同的構(gòu)建過(guò)程。當(dāng)運(yùn)行Maven時(shí),可以指定要使用的配置。

Maven與Ant

Ant是Apache另一個(gè)流行的構(gòu)建工具。如果你熟悉Ant,正在學(xué)習(xí)Maven,你將會(huì)注意到兩者在方法上的區(qū)別。

Ant使用命令式的方式,即你需要在Ant構(gòu)建文件里指定Ant應(yīng)該執(zhí)行的操作。你可以指定低級(jí)別的操作,如復(fù)制文件、編譯代碼等。你指定操作,還需要執(zhí)行這些操作執(zhí)行的順序。Ant沒(méi)有默認(rèn)的目錄結(jié)構(gòu)。

Maven使用聲明式的方式,即你需要在POM文件里指定做什么,而不是如何做。POM文件描述項(xiàng)目的資源-而不是如何構(gòu)建。相比而言,Ant構(gòu)建文件描述的是如何構(gòu)建項(xiàng)目。在Maven里,如何構(gòu)建是在“Maven 構(gòu)建聲明周期、階段和目標(biāo)”中預(yù)定義的。

Maven POM 文件

Maven的POM文件是一個(gè)xml文件,描述項(xiàng)目用到的資源,包括源代碼目錄、測(cè)試代碼目錄等的位置,以及項(xiàng)目依賴(lài)的外部jar包。

POM文件描述的是構(gòu)建“什么”,而不是“如何”構(gòu)建。如何構(gòu)建是取決于Maven的構(gòu)建階段和目標(biāo)。當(dāng)然,如果需要,你也可以向Maven構(gòu)建階段中添加自定義的目標(biāo)。

每一個(gè)項(xiàng)目都有一個(gè)POM文件。POM文件即pom.xml,應(yīng)該放在項(xiàng)目的根目錄下。一個(gè)項(xiàng)目如果分為多個(gè)子項(xiàng)目,一般來(lái)講,父項(xiàng)目有一個(gè)POM文件,每一個(gè)子項(xiàng)目都有一個(gè)POM文件。在這種結(jié)構(gòu)下,既可以一步構(gòu)建整個(gè)項(xiàng)目,也可以各個(gè)子項(xiàng)目分開(kāi)構(gòu)建。

本文剩下的章節(jié),主要介紹POM文件最重要的部分。POM文件的完整文檔,參考[Maven POM Reference](http://maven.apache.org/pom.html)

如下為一個(gè)最小化的POM文件示例:

<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>

<groupId>com.jenkov</groupId>
<artifactId>java-web-crawler</artifactId>
<version>1.0.0</version>
</project>

*modelVersion*屬性表示使用的POM模型的版本。選擇和你正在使用的Maven版本一致的版本即可。版本4.0.0適用于Maven 2和3。

*groupId”屬性是一個(gè)組織或者項(xiàng)目(比如開(kāi)源項(xiàng)目)的唯一ID。大多數(shù)情況下,你會(huì)使用項(xiàng)目的java包的根名稱(chēng)作為group ID。例如,對(duì)于我自己的Java網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目,我會(huì)使用com.jenkov作為group ID。如果這個(gè)項(xiàng)目是一個(gè)由很多獨(dú)立的貢獻(xiàn)者組成的開(kāi)源項(xiàng)目,也許選擇與項(xiàng)目相關(guān)的名稱(chēng)作為group ID,比選擇與我的公司相關(guān)的名稱(chēng)名作為group ID要合理地多。因此,選擇com.javawebcrawler作為group ID。

groupId不一定非要使用Java的包名,也不一定要使用.分隔符來(lái)分隔ID中的詞。但是,如果你這么使用,項(xiàng)目將會(huì)位于Maven倉(cāng)庫(kù)的結(jié)構(gòu)化目錄中,該結(jié)構(gòu)化目錄與group ID匹配。每一個(gè).是一個(gè)目錄分隔符,每一個(gè)詞都表示一個(gè)目錄。group ID為com.jenkov的項(xiàng)目將位于目錄MAVEN_REPO/com/jenkov中。目錄路徑中的MAVEN_REPO表示Maven倉(cāng)庫(kù)的路徑。

*artifactId*屬性包含你正在構(gòu)建的項(xiàng)目的名稱(chēng)。以我的Java網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目來(lái)說(shuō),artifact ID為java-web-crawler。artifact ID是Maven倉(cāng)庫(kù)中g(shù)roup ID目錄下的子目錄名。artifact ID也是構(gòu)建完項(xiàng)目后生成的jar包的文件名的一部分。構(gòu)建過(guò)程的輸出,即構(gòu)建結(jié)果,在Maven中成為構(gòu)件(artifact)。通常它就是一個(gè)jar包、war包或者EAR包,蛋它也可以是別的。

*versionId包含項(xiàng)目的版本號(hào)。如果你的項(xiàng)目有不同的發(fā)行版,比如開(kāi)源API,對(duì)構(gòu)建過(guò)程版本化是很有用的。如果使用版本,項(xiàng)目的用戶(hù)就可以查看項(xiàng)目的具體版本。版本號(hào)是artifact ID目錄下的子目錄名。版本號(hào)也用作構(gòu)建結(jié)果名稱(chēng)的一部分。(即jar包文件名的一部分–譯者注)

上文中的groupId,artifactId和version屬性,在項(xiàng)目構(gòu)建后會(huì)生成一個(gè)jar文件,位于Maven倉(cāng)庫(kù)的如下路徑中(目錄和文件名):MAVEN_REPO/com/jenkov/java-web-crawler/1.0.0/java-web-crawler-1.0.0.jar

如果你的項(xiàng)目使用[Maven目錄結(jié)構(gòu)](http://tutorials.jenkov.com/maven/maven-tutorial.html#maven-directory-structure),而且項(xiàng)目沒(méi)有外部依賴(lài),上面的最簡(jiǎn)化POM文件就是你構(gòu)建項(xiàng)目所需的所有配置了。

如果你的項(xiàng)目不遵從標(biāo)準(zhǔn)的目錄結(jié)構(gòu),有外部依賴(lài)或者在構(gòu)建過(guò)程中需要加入額外操作,你需要向POM文件中添加更多的配置。更多的配置查閱[Maven POM 參考](鏈接在上文)。

通常,你可以向POM文件中增加各種配置,這些配置告訴Maven如何更好地構(gòu)建你的項(xiàng)目。查閱Maven的POM參考,了解更多的配置。

父pom

所有的Maven pom文件都繼承自一個(gè)父pom。如果沒(méi)有指定父pom,則該pom文件繼承自根pom。pom文件的繼承關(guān)系如下圖所示:

可以讓一個(gè)pom文件顯式地繼承另一個(gè)pom文件。這樣,可以通過(guò)修改公共父pom文件的設(shè)置來(lái)修改所有子pom文件的設(shè)置。在pom文件的起始處指定父pom,例如:

<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
</parent>

<artifactId>my-project</artifactId>

</project>

子pom文件的設(shè)置可以覆蓋父pom文件的設(shè)置,只需要在子pom文件里指定新的設(shè)置即可。
關(guān)于pom文件繼承更詳細(xì)的內(nèi)容可以參考Maven POM文檔。

有效pom

考慮到pom文件的繼承關(guān)系,當(dāng)Maven執(zhí)行的時(shí)候可能很難確定最終的pom文件的內(nèi)容。總的pom文件(所有繼承關(guān)系生效后)被稱(chēng)為有效pom(effective pom)。可以使用以下的命令讓Maven打印出當(dāng)前的有效pom:

mvn help:effective-pom

執(zhí)行以上命令,Maven會(huì)將有效pom輸出到命令行。

Maven配置文件

Maven有兩個(gè)配置文件。配置文件里的設(shè)置,對(duì)所有的pom文件都是有效的。比如,你可以配置:

  • 本地倉(cāng)庫(kù)的路徑;
  • 當(dāng)前的編譯配置選項(xiàng)
  • 等等

配置文件名為settings.xml,兩個(gè)配置文件分別為:

+ Maven安裝目錄中:$M2_HOME/conf/settings.xml
+ 用戶(hù)主目錄中:${user.home}/.m2/settings.xml

兩個(gè)配置文件都是可選的。如果兩個(gè)文件都存在,則用戶(hù)目錄下的配置會(huì)覆蓋Maven安裝目錄中的配置。

關(guān)于Maven配置文件,參考[Maven配置文檔](http://maven.apache.org/settings.html)

讓Maven跑起來(lái)

當(dāng)你安裝好了Maven,并且在項(xiàng)目的根目錄下創(chuàng)建了POM文件,可以在項(xiàng)目上運(yùn)行Maven了。

運(yùn)行Maven只需在命令行執(zhí)行`mvn`命令即可。當(dāng)執(zhí)行`mvn`命令時(shí),將構(gòu)建周期、階段或目標(biāo)作為參數(shù)傳進(jìn)去,Maven就會(huì)執(zhí)行它們。例如:

mvn install

該命令執(zhí)行`install`階段(是默認(rèn)構(gòu)建階段的一部分),編譯項(xiàng)目,將打包的JAR文件復(fù)制到本地的Maven倉(cāng)庫(kù)。事實(shí)上,該命令在執(zhí)行install之前,會(huì)執(zhí)行在構(gòu)建周期序列中位于install之前的所有階段。

你可以向mvn命令傳入多個(gè)參數(shù),執(zhí)行多個(gè)構(gòu)建周期或階段,如:

mvn clean install

該命令首先執(zhí)行clean構(gòu)建周期,刪除Maven輸出目錄中已編譯的類(lèi)文件,然后執(zhí)行install構(gòu)建階段。

也可以執(zhí)行一個(gè)Maven目標(biāo)(構(gòu)建階段的一部分),將構(gòu)建階段與目標(biāo)名以冒號(hào)(:)相連,作為參數(shù)一起傳給Maven命令。例如:

mvn dependency:copy-dependencies

該命令執(zhí)行`dependency`構(gòu)建階段中的`copy-dependencies`目標(biāo)。

?

原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明:?轉(zhuǎn)載自并發(fā)編程網(wǎng) – ifeve.com本文鏈接地址:?Maven入門(mén)指南(一)

from:?http://ifeve.com/maven-1/

總結(jié)

以上是生活随笔為你收集整理的Maven入门指南(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。