之前也用過maven,但一直都是知其然不知是以然,正好有時間,就從頭完整的理一遍,加深印象。本篇将學習maven如何去建構項目。
Maven是什麼?優點是啥?
Maven是java項目管理工具,支援依賴管理和項目的建構。
- 依賴管理:隻需要在pom.xml中,寫入需要引用的jar包,自動下載下傳管理,開發者不用自己去下載下傳jar并下載下傳它依賴的jar,也不會有jar包的沖突問題,新人上手直接一個pom檔案,不用拷貝大量的jar檔案。
- 項目的建構:内置許多的插件,支援多種任務,包括清理、編譯、測試、打包、部署、釋出。
Maven的倉庫
倉庫是在某個統一的位置存儲所有項目的共享的構件。
本地倉庫:顧名思義就是在本地計算機上的倉庫,所有本地項目共享構件,如果本地不存在,就會從中央倉庫下載下傳到本地來。
中央倉庫:是Maven在http://repo.maven.apache.org/maven2這個位址存放的構件。
私服:架在區域網路内的倉庫服務,私服代理廣域網的遠端倉庫,供區域網路内的Maven使用者使用。
修改本地倉庫預設存放位置
修改maven的setting.xml檔案,maven本地倉庫預設存放在使用者的/.m2/respositoy目錄下,我們在settint.xml檔案使用localReposity來更改預設儲存位置。更改為c:/fp/repository目錄,這樣就把jar包下載下傳到我們配置的目錄下。如下圖所示:
maven目錄結構
MavenProjectRoot(項目根目錄)
|----src
| |----main
| | |----java ——存放項目的.java檔案
| | |----resources ——存放項目資源檔案,如spring, hibernate配置檔案
| |----test
| | |----java ——存放所有測試.java檔案,如JUnit測試類
| | |----resources ——存放項目資源檔案,如spring, hibernate配置檔案
|----target ——項目輸出位置
|----pom.xml ----用于辨別該項目是一個Maven項目
本地建立項目目錄
我們現在c:/fp目錄下建立檔案夾mavenDemo作為新項目的根目錄,然後按照下圖添加檔案夾和pom檔案。
在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執行一個生命周期的指令時,會執行之前所有的生命周期操作,每一個生命周期都是對應的插件在執行。
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目錄
實踐檢驗真理
上面建立的項目的初始目錄結構如下:
mvn compile指令編譯項目
可以看出,mvn compile會執行兩個生命周期 resources和compile,每一個生命周期都是對應的插件在執行,同時在目前目錄生成target目錄,裡面包含編譯好的class檔案。
mvn clean:清理項目緩存的輸出。
即删除了剛才生成的target目錄,如下圖
mvn package:打包(jar等)到本項目的target下
mvn package共執行了6個生命周期不包括clean生命周期,并打包jar到本項目的target目錄下,如下圖所示
mvn clean package:會比mvn package多一個clean的生命周期。
mvn install:把target下打的包(jar等)安裝到本地倉庫,可以供其他項目使用
從上圖中可以看出,mvn install會執行之前的6個生命周期,每個生命周期都有對應的插件在執行。并且mvn install 會把打包的jar檔案安裝到本地倉庫,如下圖,
mvn test:執行測試,并生成class檔案到target/test-classes目錄
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包。