1. 程式人生 > >maven02-----Maven專案構建的初次使用

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