?一. 創建Maven項目
1.1 建立一個Hello項目
當然也可以通過java project的方式創建符合Maven約定的目錄結果的項目,并手動建立pom.xml文件,但是太繁瑣了。因此,這里直接建立maven項目。note: eclipse有內建的maven項目創建功能,倘若不喜歡,可以裝一些差插件,使用原理是一樣的。
創建好以后會如下目錄結構:
實際上,可能還需要創建一些resources文件夾,類似如下目錄結構:
創建過程中的groupId,artifact id,version等,后面會詳細介紹。
- groupId: 定義了項目屬于哪個組,這個組往往和項目所在的組織或公司有關。比如在googlecode上建立了一個名為myapp的項目,那么groupId就應該是com.googlecode.myapp
- artifactId:定義了當前maven項目在組中唯一的ID
- version:制定了項目當前的版本,snapshot意為快照,說明該項目還處于開發中,是不穩定的版本。
(1) 在src/main/java/com.test.hello包下新建立一個類Hello.java
package com.test.hello;public class Hello {public String sayHello(String name) {return "Hello "+name+"!";}}
(2) 在src/test/java/com.test.hello下創建一個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編譯、清理、測試、打包項目
(1)使用Maven編譯項目,編譯項目的命令是:“mvn compile”
打開cmd命令行,進入Hello項目根目錄執行“mvn compile"命令編譯項目的java類
note:執行了這個命令后,會下載一些依賴包到maven repository中(本地倉庫中),方便下次直接從這里讀取已經下載了的依賴包。因為,我們的測試中用到了junit,因此,第一次使用的話,本地倉庫沒有,需要到中央倉庫取下載對應的Junit的jar包到本地倉庫。
比如:
編譯成功之后,可以看到hello項目的根目錄下多了一個【target】文件夾,這個文件夾就是編譯成功之后Maven幫我們生成的文件夾,如下圖所示:
打開【target】文件夾,可以看到里面有一個【classes】文件夾,如下圖所示:
【classes】文件夾中存放的就是Maven我們編譯好的java類,如下圖所示:
這就是使用Maven自動編譯項目的過程。
(2)使用Maven清理項目,清理項目的命令是:”mvn clean“
進入Hello項目根目錄執行"mvn clean"命令清理項目,清理項目的過程就是把執行"mvn compile"命令編譯項目時生成的target文件夾刪掉,如下圖所示:
(3) 使用Maven測試項目,測試項目的命令是:”mvn test"
進入Hello項目根目錄執行"mvn test"命令測試項目,如下圖所示:
測試成功之后,可以看到hello項目的根目錄下多了一個【target】文件夾,這個文件夾就是測試成功之后Maven幫我們生成的文件夾,如下圖所示:
打開【target】文件夾,可以看到里面有一個【classes】和【test-classes】文件夾,如下圖所示:
也就是說,我們執行執行"mvn test"命令測試項目時,Maven先幫我們編譯項目,然后再執行測試代碼。
(4)使用Maven打包項目,打包項目的命令是:"mvn package"
? 進入Hello項目根目錄執行"mvn?package"命令測試項目,如下圖所示:
打包成功之后,可以看到hello項目的根目錄下的【target】文件夾中多了一個Hello-0.0.1-SNAPSHOT.jar,這個Hello-0.0.1-SNAPSHOT.jar就是打包成功之后Maven幫我們生成的jar文件,如下圖所示:
5、使用Maven部署項目,部署項目的命令是:"mvn install"
note: 必須執行mvn install才可以讓別的maven項目引入這個jar,因為只有將構建下載到本地倉庫以后,才可以讓所有的maven項目使用。同理,只有將hello項目的構建安裝到本地倉庫,其它maven項目才可以使用。
進入Hello項目根目錄執行"mvn?install"命令測試項目,如下圖所示:
安裝成功之后,首先會在hello項目的根目錄下生成【target】文件夾,打開【target】文件夾,可以看到里面會有Hello-0.0.1-SNAPSHOT.jar,這個Hello-0.0.1-SNAPSHOT.jar就是安裝成功之后Maven幫我們生成的jar文件,如下圖所示:
除此之外,在我們存放Maven下載下來的jar包的倉庫也會有一個Hello-0.0.1-SNAPSHOT.jar,所以Maven安裝項目的過程,實際上就是把項目進行【清理】→【編譯】→【測試】→【打包】,再把打包好的jar放到我們指定的存放jar包的Maven倉庫中,如下圖所示:
所以使用"mvn install"命令,就把maven構建項目的【清理】→【編譯】→【測試】→【打包】的這幾個過程都做了,同時將打包好的jar包發布到本地的Maven倉庫中,所以maven最常用的命令還是"mvn install",這個命令能夠做的事情最多。
1.2 組合使用Maven的命令
maven的編譯,清理,測試,打包,部署命令是可以幾個命令同時組合起來使用的,常用的命令組合如下:
(1)先清理再編譯:"mvn clean compile",如下所示:
還有的就是"mvn clean test","mvn clean package","mvn clean install",這些組合命令都比較常用。
以上就是關于Maven構建項目的各個個過程演示。
note:項目的主代碼會被打包到最終的構建中(如jar),而測試代碼只能在運行測試時用到,不會被打包。
1.3 mvn命令的添加
我們選中maven項目或者pom.xml文件以后,點擊右鍵run as---會出現一些mvn命令。如果我們不滿足于這些,我們可以自己添加,讓它出現在run as的可選菜單中。
也可以通過選擇maven build,在彈出的對話框中添加想要使用的命令。
?
二. 在別的項目中使用通過Maven安裝生成的項目的jar包
在上面,我們使用mvn install命令將hello這個項目打包成了Hello-0.0.1-SNAPSHOT.jar包并且發布到本地的maven倉庫E:\repository\me\gacl\maven\Hello\0.0.1-SNAPSHOT中,下面我們來看看如何在別的項目中使用Hello-0.0.1-SNAPSHOT.jar
2.1 方法一
直接在pom.xml文件中配置hello項目打包生成jar包,即:
2.2 方法2
在根目錄下新建立一個lib文件夾,將hello的jar包粘貼進來,并build path進來,這樣就可以使用hello項目中的東西拉。
?三. 通過eclipse創建maven項目的底層實現原理簡介
在通過eclipse創建maven項目時,實際上還是采用的archetype生成了項目骨架。
?
?執行相關的archetype命令,就可以創建出上面目錄結構的maven項目拉。
3.1 pom.xml文件
通過Maven構建的JavaProject,在項目的根目錄下都會存在一個pom.xml文件,進入myapp目錄,可以看到有一個pom.xml文件,這個文件是Maven的核心。如下圖所示:
1、pom意思就是project object model。
2、pom.xml包含了項目構建的信息,包括項目的信息、項目的依賴等。
3、pom.xml文件是可以繼承的,大型項目中,子模塊的pom.xml一般都會繼承于父模塊的pom.xml
pom.xml文件的內容如下:
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文件的節點元素說明:
- <project> pom文件的頂級節點
- <modelVersion> object model版本,對Maven2和Maven3來說,只能是4.0.0
- <groupId> 項目創建組織的標識符,一般是域名的倒寫
- <artifactId> 定義了項目在所屬組織的標識符下的唯一標識,一個組織下可以有多個項 目
- <version> ? 當前項目的版本,SNAPSHOT,表示是快照版本,在開發中
- <packaging> ? 打包的方式,有jar、war、ear等
- <name> 項目的名稱
- <url> ? 項目的地址
- <properties> 屬性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <dependencies> ?? 構建項目依賴的jar
其中由groupId、artifactId和version唯一的確定了一個項目坐標
?
?
?
參考文獻:
《Maven實戰》
https://www.cnblogs.com/xdp-gacl/p/4051690.html