国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Maven學(xué)習(xí)-入門(mén)

2019-11-14 15:30:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在進(jìn)行java開(kāi)發(fā)的過(guò)程中,我接觸到了Maven這套構(gòu)建工具。所以,花費(fèi)了點(diǎn)時(shí)間學(xué)習(xí)了一下這套構(gòu)建工具,在學(xué)習(xí)過(guò)程中學(xué)習(xí)到的有關(guān)Maven的知識(shí),在這里分享給大家。

什么是Maven

首先,在介紹Maven這套工具之前,我們得了解Maven是什么。
Maven,在依地語(yǔ)中的意思是知識(shí)的積累,Maven在最初的時(shí)候,是作為Jakarta的Turbine項(xiàng)目的構(gòu)建工具。在Maven出現(xiàn)之前,不同的Java項(xiàng)目使用不同的Ant配置進(jìn)行構(gòu)建,并且將jar包包含在版本控制系統(tǒng)(CVS)中,沒(méi)有一套統(tǒng)一的構(gòu)建工具。如果有一套工具,可以擁有一套標(biāo)準(zhǔn)的方法來(lái)構(gòu)建一個(gè)項(xiàng)目,并且可以清楚的定義一個(gè)項(xiàng)目是由哪些部分組成的,擁有一種簡(jiǎn)單的方法發(fā)布項(xiàng)目的信息,在不同的項(xiàng)目之間可以分享jar包。出于這個(gè)目的,Maven被創(chuàng)造了出來(lái)。

Maven最初始的目標(biāo)是讓開(kāi)發(fā)者可以在最短的周期內(nèi)可以快速的理解一個(gè)項(xiàng)目。為了達(dá)到這個(gè)目的,Maven解決了一下幾個(gè)問(wèn)題:

  • 讓構(gòu)建過(guò)程變的簡(jiǎn)單
  • 提供一套統(tǒng)一的構(gòu)建系統(tǒng)
  • 提供項(xiàng)目相關(guān)的信息
  • 可以透明得遷移新的特性

使用Maven

在使用Maven之前,我們需要確保我們已經(jīng)安裝了Maven構(gòu)建工具。沒(méi)有安裝Maven構(gòu)建工具的,可以參考官方提供的手冊(cè)參考如何安裝Maven

在安裝了Maven以后,可以通過(guò)命令 mvn -version查看Maven的版本信息:

$ mvn -versionApache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)Maven home: /usr/local/opt/mavenJava version: 1.7.0_79, vendor: Oracle CorporationJava home: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jreDefault locale: zh_CN, platform encoding: UTF-8OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"

接下來(lái),我們通過(guò)Maven創(chuàng)建一個(gè)新的項(xiàng)目開(kāi)始。

使用Maven創(chuàng)建一個(gè)新的Java項(xiàng)目

$ mvn -B archetype:generate /	-DarchetypeGroupId=org.apache.maven.archetypes /	-DgroupId=com.myapp /	-DartifactId=myapp

在上面的Maven命令中,我們創(chuàng)建了一個(gè)名為myapp的普通Java項(xiàng)目。一旦我們執(zhí)行了上面的命令,就會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)目錄為myapp的工程。在這個(gè)工程目錄下,包含了一個(gè)名為pom.xml的文件,這個(gè)新創(chuàng)建的pom文件內(nèi)容大致如下:

<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/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.myapp</groupId>  <artifactId>myapp</artifactId>  <packaging>jar</packaging>  <version>1.0-SNAPSHOT</version>  <name>myapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>  </dependencies></project>

這個(gè)pom文件表示了當(dāng)前這個(gè)項(xiàng)目的項(xiàng)目對(duì)象模型(Project Object Model(POM)。在Maven中,POM是它進(jìn)行操作的基本單位。Maven的本質(zhì)是以圍繞POM這個(gè)概念為中心來(lái)管理整個(gè)項(xiàng)目的。POM中包含了項(xiàng)目中所有和項(xiàng)目相關(guān)的重要的信息,并且提供了類似一站式購(gòu)物那樣的依賴管理方式,可以很方便的找到當(dāng)前項(xiàng)目關(guān)聯(lián)的所有依賴來(lái)項(xiàng)目。

上面的pom.xml文件中的內(nèi)容,包含了當(dāng)前這個(gè)項(xiàng)目的相關(guān)信息。我們首先就上面這個(gè)POM文件中的一些元素,解釋下具體的含義:

  • project 這個(gè)元素是Maven的pom.xml文件的頂層元素。每個(gè)POM文件都是以一個(gè)project元素包裹的。
  • modelVersion 這個(gè)元素指定了當(dāng)前這個(gè)pom.xml文件使用的項(xiàng)目對(duì)象模型(POM)的版本。
  • groupId 這個(gè)元素表示創(chuàng)建這個(gè)項(xiàng)目的組織的唯一標(biāo)識(shí)。這個(gè)元素的值是區(qū)分一個(gè)項(xiàng)目的關(guān)鍵信息之一,它的值通常是由該項(xiàng)目的組織的域名的反寫(xiě)產(chǎn)生的(和Java的包名的機(jī)制一樣)。
  • artifactId 這個(gè)元素是唯一標(biāo)識(shí)了該項(xiàng)目最終生成的artifact(可以理解為是我們編寫(xiě)代碼產(chǎn)生的一個(gè)程序,所以可以理解為是手工作品)。一個(gè)項(xiàng)目的artifact一般是一個(gè)jar文件。一個(gè)項(xiàng)目最終生成的artifact的名字的格式是<artifactId>-<version>.<extension>,比如上面的項(xiàng)目生成的artifact為myapp-1.0.jar
  • packaging 這個(gè)元素指定了該artifact打包的類型(比如:jar、war、ear等)。這不只是意味著該artifact是以什么方式打包,也指定了在構(gòu)建過(guò)程中會(huì)用到的特定的生命周期(所謂的生命周期,簡(jiǎn)單的說(shuō)就是構(gòu)建的過(guò)程)。packaging元素的默認(rèn)值是JAR
  • version 這個(gè)元素指定了項(xiàng)目生成的artifact的版本號(hào)。在版本號(hào)中會(huì)包含當(dāng)前項(xiàng)目的進(jìn)度,比如這里的SNAPSHOT
  • name 這個(gè)元素表示項(xiàng)目的名字,常用于生成的文檔中。
  • url 這個(gè)元素表示該項(xiàng)目所在的站點(diǎn),常用于生成的文檔中。
  • description 這個(gè)元素提供了對(duì)項(xiàng)目的描述,通常用于生成的文檔中。

在項(xiàng)目被創(chuàng)建以后,除了會(huì)生成上面的pom.xml文件,還會(huì)產(chǎn)生一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu):

myapp|-- pom.xml`-- src    |-- main    |   `-- java    |       `-- com    |           `-- myapp    |               `-- App.java    `-- test        `-- java            `-- com                `-- myapp                    `-- APPTest.java

上面的目錄結(jié)構(gòu)是Maven項(xiàng)目的標(biāo)準(zhǔn)布局,項(xiàng)目的源代碼在目錄${basedir}/src/main/java目錄下,而項(xiàng)目的測(cè)試代碼存放在目錄${basedir}/src/test/java目錄下。對(duì)于${basedir},這里表示的是包含了pom.xml文件的目錄,也就是項(xiàng)目的根目錄。

現(xiàn)在,我們已經(jīng)簡(jiǎn)單介紹了maven相關(guān)的概念和maven標(biāo)準(zhǔn)的目錄結(jié)構(gòu)。但是,在我們使用Maven構(gòu)建項(xiàng)目之前,我們先簡(jiǎn)單了解下Maven的生命周期。

Maven的構(gòu)建的生命周期

Maven的構(gòu)建機(jī)制,是圍繞生命周期(lifecycle)這個(gè)概念進(jìn)行構(gòu)建的。這意味著構(gòu)建和發(fā)布一個(gè)項(xiàng)目的整個(gè)過(guò)程是預(yù)先被定義了的。采用這種方式進(jìn)行項(xiàng)目構(gòu)建,可以讓用戶可以在學(xué)習(xí)很少的一部分命令的情況下通過(guò)POM對(duì)項(xiàng)目進(jìn)行構(gòu)建。

在Maven中,內(nèi)建了三種構(gòu)建生命周期:defaultcleansitedefault生命周期處理項(xiàng)目的部署,clean生命周期處理項(xiàng)目構(gòu)建后的清理工作,site生命周期對(duì)項(xiàng)目的站點(diǎn)文檔進(jìn)行生成。

Maven的生命周期,又是由不同的階段(phase)構(gòu)成的。每一個(gè)生命周期,都包含了一系列的階段,每一個(gè)階段都表示了生命周期中的一個(gè)狀態(tài)。比如,對(duì)于default生命周期來(lái)說(shuō),包含了如下的這些階段:

  • validate
  • compile
  • test
  • package
  • integration-test
  • verify
  • install
  • deploy

Maven在執(zhí)行default生命周期的時(shí)候,會(huì)順序執(zhí)行這些階段來(lái)完成不同的工作。

使用maven構(gòu)建項(xiàng)目

現(xiàn)在我們已經(jīng)安裝好Maven,并且對(duì)Maven的相關(guān)概念有了一些認(rèn)識(shí)。下面,我們可以開(kāi)始使用Maven對(duì)我們的項(xiàng)目進(jìn)行構(gòu)建了。

編譯項(xiàng)目

在前面,我們已經(jīng)創(chuàng)建了一個(gè)名為myapp的項(xiàng)目。現(xiàn)在,我們可以通過(guò)下面的命令對(duì)這個(gè)項(xiàng)目進(jìn)行編譯。

$ mvn compile

這個(gè)命令執(zhí)行以后,會(huì)有類似下方的輸出:

[INFO] Scanning for projects...[INFO]                                                                         [INFO] ------------------------------------------------------------------------[INFO] Building myapp 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myapp ---...[INFO] skip non existing resourceDirectory /Users/duke/practise/myapp/src/main/resources[INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---[INFO] Changes detected - recompiling the module!...[INFO] Compiling 1 source file to /Users/duke/practise/myapp/target/classes[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.159 s[INFO] Finished at: 2015-10-06T18:57:37+08:00[INFO] Final Memory: 11M/156M[INFO] ------------------------------------------------------------------------

在執(zhí)行這個(gè)命令以后,Maven會(huì)首先去下載所有構(gòu)建當(dāng)前項(xiàng)目所需要的插件,以及所有被當(dāng)前項(xiàng)目所依賴所有依賴項(xiàng)目。從上面的輸出中可以看出,我們最終構(gòu)建后的文件被輸出到目錄${basedir}/target/classes中,這個(gè)目錄是Maven約定的一個(gè)標(biāo)準(zhǔn)目錄。使用Maven的好處之一,就是當(dāng)我們遵循Maven的約定以后,我們可以使用盡可能少的配置就可以讓Maven為我們構(gòu)建項(xiàng)目。

編譯單元測(cè)試

現(xiàn)在,我們已經(jīng)成功地編譯了我們的項(xiàng)目。接下來(lái),我們可以讓Maven對(duì)單元測(cè)試進(jìn)行編譯和執(zhí)行,通過(guò)執(zhí)行下面的命令,可以讓Maven編譯和執(zhí)行我們寫(xiě)的單元測(cè)試:

$ mvn test

上面的命令會(huì)有大致如下的輸出:

[INFO] Scanning for projects...[INFO]                                                                         [INFO] ------------------------------------------------------------------------[INFO] Building myapp 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] ...[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---[INFO] Nothing to compile - all classes are up to date ...[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myapp ---[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to /Users/duke/practise/myapp/target/test-classes[INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ myapp ---[INFO] Surefire report directory: /Users/duke/practise/myapp/target/surefire-reports------------------------------------------------------- T E S T S-------------------------------------------------------Running com.myapp.AppTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.799 s[INFO] Finished at: 2015-10-06T19:08:08+08:00[INFO] Final Memory: 13M/156M[INFO] ------------------------------------------------------------------------

從輸出中我們可以看到,Maven在編譯和執(zhí)行單元測(cè)試之前,會(huì)首先編譯main中的項(xiàng)目代碼,然后才會(huì)對(duì)test中的單元測(cè)試進(jìn)行編譯和執(zhí)行,并提供一個(gè)有關(guān)單元測(cè)試結(jié)果的簡(jiǎn)單報(bào)告。

在這里,我們使用surefire插件對(duì)單元測(cè)試進(jìn)行執(zhí)行。surefire插件會(huì)對(duì)符合該插件約定的命名規(guī)則的單元測(cè)試文件進(jìn)行搜索,然后進(jìn)行執(zhí)行。默認(rèn)會(huì)執(zhí)行以下命名規(guī)則的文件:

  • **/*Test.java
  • **/Test*.java
  • **/*TestCase.java

默認(rèn)會(huì)排除以下命名規(guī)則的文件

  • **/Abstract*Test.java
  • **/Abstract*TestCase.java

當(dāng)然,如果只是需要對(duì)單元測(cè)試進(jìn)行編譯而不需要執(zhí)行,可以運(yùn)行命令mvn test-comiple實(shí)現(xiàn)。

項(xiàng)目打包

現(xiàn)在,我們已經(jīng)對(duì)項(xiàng)目進(jìn)行編譯測(cè)試過(guò)了,我們接下來(lái)需要對(duì)項(xiàng)目進(jìn)行打包。當(dāng)前項(xiàng)目,我們?cè)趐om.xml中的packaging元素中指定了打包的類型為jar。所以我們可以通過(guò)下面的命令來(lái)打jar包:

$ mvn package

執(zhí)行這個(gè)命令的輸出大致如下:

[INFO] Scanning for projects...[INFO]                                                                         [INFO] ------------------------------------------------------------------------[INFO] Building myapp 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------...[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myapp ---[INFO] Building jar: /Users/duke/practise/myapp/target/myapp-1.0-SNAPSHOT.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.741 s[INFO] Finished at: 2015-10-06T19:41:05+08:00[INFO] Final Memory: 10M/156M[INFO] ------------------------------------------------------------------------

Maven在執(zhí)行這個(gè)命令的時(shí)候,會(huì)從pom.xml文件中獲得打包的類型,在這個(gè)項(xiàng)目中為jar包類型。然后將打出來(lái)的jar輸出到目錄${basedir}/target下。

在打完包以后,我們的jar包現(xiàn)在還是留在我們的項(xiàng)目的target目錄下,為了將這個(gè)jar部署到我們的本地倉(cāng)庫(kù)(默認(rèn)是~/.m2/repository)中以供別的項(xiàng)目使用,我們需要使用如下命令將當(dāng)前項(xiàng)目的jar包部署到本地倉(cāng)庫(kù)中:

$ mvn install

到目前為止,我們已經(jīng)學(xué)習(xí)了怎么對(duì)項(xiàng)目進(jìn)行打包和部署到本地倉(cāng)庫(kù)中了。

清理項(xiàng)目

現(xiàn)在,我們?nèi)绻枰獙?duì)構(gòu)建除的文件進(jìn)行清理,我們需要使用如下的命令:

$ mvn clean[INFO] Scanning for projects...[INFO]                                                                         [INFO] ------------------------------------------------------------------------[INFO] Building myapp 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ myapp ---[INFO] Deleting /Users/duke/practise/myapp/target[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.255 s[INFO] Finished at: 2015-10-06T19:47:25+08:00[INFO] Final Memory: 6M/123M[INFO] ------------------------------------------------------------------------

這個(gè)命令會(huì)刪除target目錄,因?yàn)樵谶@個(gè)目錄下包含了我們構(gòu)建這個(gè)項(xiàng)目后輸出的所有文件。現(xiàn)在,我們的項(xiàng)目就回到被構(gòu)建之前了。

IDE相關(guān)的命令

我們?nèi)绻褂肐DE開(kāi)發(fā)環(huán)境,我們可以使用Maven生成當(dāng)前項(xiàng)目相關(guān)的IDE的描述文件。

對(duì)于IntelliJ IEDA環(huán)境,可以用如下命令進(jìn)行生成:

$ mvn idea:idea

對(duì)于eclipse環(huán)境,可以用如下的命令生成:

$ mvn eclipse:eclipse

參考

http://maven.apache.org/guides/getting-started/index.html


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新绛县| 镇沅| 普格县| 五家渠市| 阿瓦提县| 南召县| 左权县| 安龙县| 福州市| 浮梁县| 隆回县| 遂宁市| 小金县| 滨州市| 淮安市| 巴彦淖尔市| 亳州市| 航空| 浠水县| 高碑店市| 沐川县| 彭阳县| 衡东县| 澄江县| 金阳县| 澄迈县| 东城区| 云林县| 乌鲁木齐市| 瑞金市| 和顺县| 迁西县| 玉龙| 肥城市| 平阴县| 洛川县| 新巴尔虎右旗| 定日县| 海宁市| 青岛市| 平顺县|