maven02-----Maven專案構建的初次使用
一. 建立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 { @Test public 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