天天看點

【Maven學習】maven項目建構

之前也用過maven,但一直都是知其然不知是以然,正好有時間,就從頭完整的理一遍,加深印象。本篇将學習maven如何去建構項目。

Maven是什麼?優點是啥?

Maven是java項目管理工具,支援依賴管理和項目的建構。

  • 依賴管理:隻需要在pom.xml中,寫入需要引用的jar包,自動下載下傳管理,開發者不用自己去下載下傳jar并下載下傳它依賴的jar,也不會有jar包的沖突問題,新人上手直接一個pom檔案,不用拷貝大量的jar檔案。
  • 項目的建構:内置許多的插件,支援多種任務,包括清理、編譯、測試、打包、部署、釋出。

Maven的倉庫

倉庫是在某個統一的位置存儲所有項目的共享的構件。

本地倉庫:顧名思義就是在本地計算機上的倉庫,所有本地項目共享構件,如果本地不存在,就會從中央倉庫下載下傳到本地來。

中央倉庫:是Maven在http://repo.maven.apache.org/maven2這個位址存放的構件。

私服:架在區域網路内的倉庫服務,私服代理廣域網的遠端倉庫,供區域網路内的Maven使用者使用。

修改本地倉庫預設存放位置

【Maven學習】maven項目建構

修改maven的setting.xml檔案,maven本地倉庫預設存放在使用者的/.m2/respositoy目錄下,我們在settint.xml檔案使用localReposity來更改預設儲存位置。更改為c:/fp/repository目錄,這樣就把jar包下載下傳到我們配置的目錄下。如下圖所示:

【Maven學習】maven項目建構

maven目錄結構

MavenProjectRoot(項目根目錄)

   |----src

   |     |----main

   |     |         |----java ——存放項目的.java檔案

   |     |         |----resources ——存放項目資源檔案,如spring, hibernate配置檔案

   |     |----test

   |     |         |----java ——存放所有測試.java檔案,如JUnit測試類

   |     |         |----resources ——存放項目資源檔案,如spring, hibernate配置檔案

   |----target ——項目輸出位置

   |----pom.xml ----用于辨別該項目是一個Maven項目

本地建立項目目錄

我們現在c:/fp目錄下建立檔案夾mavenDemo作為新項目的根目錄,然後按照下圖添加檔案夾和pom檔案。

【Maven學習】maven項目建構

在pom檔案中添加如下内容:

<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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <!-- 包名-->
  <groupId>com.maven</groupId>
  <!--項目名-->
  <artifactId>Hello</artifactId>
  <!--項目版本-->
  <version>0.0.1-SNAPSHOT</version>
  
    <!--添加依賴的jar包-->
    <dependencies>
        <!--項目要使用到junit的jar包,是以在這裡添加junit的jar包的依賴-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>        
        
    </dependencies>
</project>
           

Maven指令

首先了解maven的生命周期,因為maven執行一個生命周期的指令時,會執行之前所有的生命周期操作,每一個生命周期都是對應的插件在執行。

【Maven學習】maven項目建構

mvn clean:清理項目緩存的輸出。

mvn compile: 編譯,将Java 源程式編譯成 class 位元組碼檔案。

mvn package:打包(jar等)到本項目的target下

mvn install:把target下打的包(jar等)安裝到本地倉庫,可以供其他項目使用

mvn deploy:将打包的檔案釋出到遠端參考,提供其他人員進行下載下傳依賴

mvn clean package:會比mvn package多一個clean的生命周期。

mvn test:執行測試,并生成class檔案到target/test-classes目錄

實踐檢驗真理

上面建立的項目的初始目錄結構如下:

【Maven學習】maven項目建構

mvn compile指令編譯項目 

【Maven學習】maven項目建構

可以看出,mvn compile會執行兩個生命周期 resources和compile,每一個生命周期都是對應的插件在執行,同時在目前目錄生成target目錄,裡面包含編譯好的class檔案。

【Maven學習】maven項目建構

mvn clean:清理項目緩存的輸出。

【Maven學習】maven項目建構

即删除了剛才生成的target目錄,如下圖

【Maven學習】maven項目建構

mvn package:打包(jar等)到本項目的target下

【Maven學習】maven項目建構

mvn package共執行了6個生命周期不包括clean生命周期,并打包jar到本項目的target目錄下,如下圖所示

【Maven學習】maven項目建構

mvn clean package:會比mvn package多一個clean的生命周期。

【Maven學習】maven項目建構

mvn install:把target下打的包(jar等)安裝到本地倉庫,可以供其他項目使用

【Maven學習】maven項目建構

從上圖中可以看出,mvn install會執行之前的6個生命周期,每個生命周期都有對應的插件在執行。并且mvn install 會把打包的jar檔案安裝到本地倉庫,如下圖,

【Maven學習】maven項目建構

mvn test:執行測試,并生成class檔案到target/test-classes目錄

【Maven學習】maven項目建構

eclipse中的maven指令

最後說一下eclipse中的maven指令,eclipse提供了和maven一樣的基本指令

maven test

maven install

maven clean 

也可以使用maven build...自定義組合maven 指令,并儲存。

Maven update project

當pom.xml檔案改動之後,或者有依賴的jar包在本地maven倉庫( local repository )中有更新和内容改變,需要Eclipse執行Maven/Update Project來更新引入在本地maven庫中的外部依賴的jar包。