maven02-----Maven项目构建的初次使用
?一. 創(chuàng)建Maven項(xiàng)目
1.1 建立一個(gè)Hello項(xiàng)目
當(dāng)然也可以通過java project的方式創(chuàng)建符合Maven約定的目錄結(jié)果的項(xiàng)目,并手動(dòng)建立pom.xml文件,但是太繁瑣了。因此,這里直接建立maven項(xiàng)目。note: eclipse有內(nèi)建的maven項(xiàng)目創(chuàng)建功能,倘若不喜歡,可以裝一些差插件,使用原理是一樣的。
創(chuàng)建好以后會(huì)如下目錄結(jié)構(gòu):
實(shí)際上,可能還需要?jiǎng)?chuàng)建一些resources文件夾,類似如下目錄結(jié)構(gòu):
創(chuàng)建過程中的groupId,artifact id,version等,后面會(huì)詳細(xì)介紹。
- groupId: 定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司有關(guān)。比如在googlecode上建立了一個(gè)名為myapp的項(xiàng)目,那么groupId就應(yīng)該是com.googlecode.myapp
- artifactId:定義了當(dāng)前maven項(xiàng)目在組中唯一的ID
- version:制定了項(xiàng)目當(dāng)前的版本,snapshot意為快照,說明該項(xiàng)目還處于開發(fā)中,是不穩(wěn)定的版本。
(1) 在src/main/java/com.test.hello包下新建立一個(gè)類Hello.java
package com.test.hello;public class Hello {public String sayHello(String name) {return "Hello "+name+"!";}}(2) 在src/test/java/com.test.hello下創(chuàng)建一個(gè)HelloTest.java
package com.test.hello;import org.junit.Test;import junit.framework.Assert;public class HelloTest {@Testpublic void testHello() {Hello hello=new Hello();String results=hello.sayHello("Hermioner");Assert.assertEquals("Hello Hermioner!", results);}}1.2 使用Maven編譯、清理、測(cè)試、打包項(xiàng)目
(1)使用Maven編譯項(xiàng)目,編譯項(xiàng)目的命令是:“mvn compile”
打開cmd命令行,進(jìn)入Hello項(xiàng)目根目錄執(zhí)行“mvn compile"命令編譯項(xiàng)目的java類
note:執(zhí)行了這個(gè)命令后,會(huì)下載一些依賴包到maven repository中(本地倉(cāng)庫(kù)中),方便下次直接從這里讀取已經(jīng)下載了的依賴包。因?yàn)?#xff0c;我們的測(cè)試中用到了junit,因此,第一次使用的話,本地倉(cāng)庫(kù)沒有,需要到中央倉(cāng)庫(kù)取下載對(duì)應(yīng)的Junit的jar包到本地倉(cāng)庫(kù)。
比如:
編譯成功之后,可以看到hello項(xiàng)目的根目錄下多了一個(gè)【target】文件夾,這個(gè)文件夾就是編譯成功之后Maven幫我們生成的文件夾,如下圖所示:
打開【target】文件夾,可以看到里面有一個(gè)【classes】文件夾,如下圖所示:
【classes】文件夾中存放的就是Maven我們編譯好的java類,如下圖所示:
這就是使用Maven自動(dòng)編譯項(xiàng)目的過程。
(2)使用Maven清理項(xiàng)目,清理項(xiàng)目的命令是:”mvn clean“
進(jìn)入Hello項(xiàng)目根目錄執(zhí)行"mvn clean"命令清理項(xiàng)目,清理項(xiàng)目的過程就是把執(zhí)行"mvn compile"命令編譯項(xiàng)目時(shí)生成的target文件夾刪掉,如下圖所示:
(3) 使用Maven測(cè)試項(xiàng)目,測(cè)試項(xiàng)目的命令是:”mvn test"
進(jìn)入Hello項(xiàng)目根目錄執(zhí)行"mvn test"命令測(cè)試項(xiàng)目,如下圖所示:
測(cè)試成功之后,可以看到hello項(xiàng)目的根目錄下多了一個(gè)【target】文件夾,這個(gè)文件夾就是測(cè)試成功之后Maven幫我們生成的文件夾,如下圖所示:
打開【target】文件夾,可以看到里面有一個(gè)【classes】和【test-classes】文件夾,如下圖所示:
也就是說,我們執(zhí)行執(zhí)行"mvn test"命令測(cè)試項(xiàng)目時(shí),Maven先幫我們編譯項(xiàng)目,然后再執(zhí)行測(cè)試代碼。
(4)使用Maven打包項(xiàng)目,打包項(xiàng)目的命令是:"mvn package"
? 進(jìn)入Hello項(xiàng)目根目錄執(zhí)行"mvn?package"命令測(cè)試項(xiàng)目,如下圖所示:
打包成功之后,可以看到hello項(xiàng)目的根目錄下的【target】文件夾中多了一個(gè)Hello-0.0.1-SNAPSHOT.jar,這個(gè)Hello-0.0.1-SNAPSHOT.jar就是打包成功之后Maven幫我們生成的jar文件,如下圖所示:
5、使用Maven部署項(xiàng)目,部署項(xiàng)目的命令是:"mvn install"
note: 必須執(zhí)行mvn install才可以讓別的maven項(xiàng)目引入這個(gè)jar,因?yàn)橹挥袑?gòu)建下載到本地倉(cāng)庫(kù)以后,才可以讓所有的maven項(xiàng)目使用。同理,只有將hello項(xiàng)目的構(gòu)建安裝到本地倉(cāng)庫(kù),其它maven項(xiàng)目才可以使用。
進(jìn)入Hello項(xiàng)目根目錄執(zhí)行"mvn?install"命令測(cè)試項(xiàng)目,如下圖所示:
安裝成功之后,首先會(huì)在hello項(xiàng)目的根目錄下生成【target】文件夾,打開【target】文件夾,可以看到里面會(huì)有Hello-0.0.1-SNAPSHOT.jar,這個(gè)Hello-0.0.1-SNAPSHOT.jar就是安裝成功之后Maven幫我們生成的jar文件,如下圖所示:
除此之外,在我們存放Maven下載下來的jar包的倉(cāng)庫(kù)也會(huì)有一個(gè)Hello-0.0.1-SNAPSHOT.jar,所以Maven安裝項(xiàng)目的過程,實(shí)際上就是把項(xiàng)目進(jìn)行【清理】→【編譯】→【測(cè)試】→【打包】,再把打包好的jar放到我們指定的存放jar包的Maven倉(cāng)庫(kù)中,如下圖所示:
所以使用"mvn install"命令,就把maven構(gòu)建項(xiàng)目的【清理】→【編譯】→【測(cè)試】→【打包】的這幾個(gè)過程都做了,同時(shí)將打包好的jar包發(fā)布到本地的Maven倉(cāng)庫(kù)中,所以maven最常用的命令還是"mvn install",這個(gè)命令能夠做的事情最多。
1.2 組合使用Maven的命令
maven的編譯,清理,測(cè)試,打包,部署命令是可以幾個(gè)命令同時(shí)組合起來使用的,常用的命令組合如下:
(1)先清理再編譯:"mvn clean compile",如下所示:
還有的就是"mvn clean test","mvn clean package","mvn clean install",這些組合命令都比較常用。
以上就是關(guān)于Maven構(gòu)建項(xiàng)目的各個(gè)個(gè)過程演示。
note:項(xiàng)目的主代碼會(huì)被打包到最終的構(gòu)建中(如jar),而測(cè)試代碼只能在運(yùn)行測(cè)試時(shí)用到,不會(huì)被打包。
1.3 mvn命令的添加
我們選中maven項(xiàng)目或者pom.xml文件以后,點(diǎn)擊右鍵run as---會(huì)出現(xiàn)一些mvn命令。如果我們不滿足于這些,我們可以自己添加,讓它出現(xiàn)在run as的可選菜單中。
也可以通過選擇maven build,在彈出的對(duì)話框中添加想要使用的命令。
?
二. 在別的項(xiàng)目中使用通過Maven安裝生成的項(xiàng)目的jar包
在上面,我們使用mvn install命令將hello這個(gè)項(xiàng)目打包成了Hello-0.0.1-SNAPSHOT.jar包并且發(fā)布到本地的maven倉(cāng)庫(kù)E:\repository\me\gacl\maven\Hello\0.0.1-SNAPSHOT中,下面我們來看看如何在別的項(xiàng)目中使用Hello-0.0.1-SNAPSHOT.jar
2.1 方法一
直接在pom.xml文件中配置hello項(xiàng)目打包生成jar包,即:
2.2 方法2
在根目錄下新建立一個(gè)lib文件夾,將hello的jar包粘貼進(jìn)來,并build path進(jìn)來,這樣就可以使用hello項(xiàng)目中的東西拉。
?三. 通過eclipse創(chuàng)建maven項(xiàng)目的底層實(shí)現(xiàn)原理簡(jiǎn)介
在通過eclipse創(chuàng)建maven項(xiàng)目時(shí),實(shí)際上還是采用的archetype生成了項(xiàng)目骨架。
?
?執(zhí)行相關(guān)的archetype命令,就可以創(chuàng)建出上面目錄結(jié)構(gòu)的maven項(xiàng)目拉。
3.1 pom.xml文件
通過Maven構(gòu)建的JavaProject,在項(xiàng)目的根目錄下都會(huì)存在一個(gè)pom.xml文件,進(jìn)入myapp目錄,可以看到有一個(gè)pom.xml文件,這個(gè)文件是Maven的核心。如下圖所示:
1、pom意思就是project object model。
2、pom.xml包含了項(xiàng)目構(gòu)建的信息,包括項(xiàng)目的信息、項(xiàng)目的依賴等。
3、pom.xml文件是可以繼承的,大型項(xiàng)目中,子模塊的pom.xml一般都會(huì)繼承于父模塊的pom.xml
pom.xml文件的內(nèi)容如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>com.mycompany.app</groupId> 6 <artifactId>myapp</artifactId> 7 <version>1.0-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>myapp</name> 11 <url>http://maven.apache.org</url> 12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 </properties> 16 17 <dependencies> 18 <dependency> 19 <groupId>junit</groupId> 20 <artifactId>junit</artifactId> 21 <version>3.8.1</version> 22 <scope>test</scope> 23 </dependency> 24 </dependencies> 25 </project>pom.xml文件的節(jié)點(diǎn)元素說明:
- <project> pom文件的頂級(jí)節(jié)點(diǎn)
- <modelVersion> object model版本,對(duì)Maven2和Maven3來說,只能是4.0.0
- <groupId> 項(xiàng)目創(chuàng)建組織的標(biāo)識(shí)符,一般是域名的倒寫
- <artifactId> 定義了項(xiàng)目在所屬組織的標(biāo)識(shí)符下的唯一標(biāo)識(shí),一個(gè)組織下可以有多個(gè)項(xiàng) 目
- <version> ? 當(dāng)前項(xiàng)目的版本,SNAPSHOT,表示是快照版本,在開發(fā)中
- <packaging> ? 打包的方式,有jar、war、ear等
- <name> 項(xiàng)目的名稱
- <url> ? 項(xiàng)目的地址
- <properties> 屬性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <dependencies> ?? 構(gòu)建項(xiàng)目依賴的jar
其中由groupId、artifactId和version唯一的確定了一個(gè)項(xiàng)目坐標(biāo)
?
?
?
參考文獻(xiàn):
《Maven實(shí)戰(zhàn)》
https://www.cnblogs.com/xdp-gacl/p/4051690.html
轉(zhuǎn)載于:https://www.cnblogs.com/Hermioner/p/10247214.html
總結(jié)
以上是生活随笔為你收集整理的maven02-----Maven项目构建的初次使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个Android开发者开博一周年的成长
- 下一篇: 编写登录注册