前言
今天就來聊聊Maven的基礎和一些比較概念性的東西,還有一些常用的Maven命令啥的,主要是某人腦子記不住,記在博客中讓她自己看吧,省的費心給她找。
后續的文章會聊到Maven的一些比較高級用法,像自定義插件,私服啥的,歡迎各位大佬來討論哦!
概念
Maven 是一個項目管理和整合工具。Maven 為開發者提供了一套完整的構建生命周期框架。開發團隊幾乎不用花多少時間就能夠自動完成工程的基礎構建配置,因為 Maven 使用了一個標準的目錄結構和一個默認的構建生命周期。
在有多個開發團隊環境的情況下,Maven 能夠在很短的時間內使得每項工作都按照標準進行。因為大部分的工程配置操作都非常簡單并且可復用,在創建報告、檢查、構建和測試自動配置時,Maven 可以讓開發者的工作變得更簡單。
Maven 的主要目的是為開發者提供
- 一個可復用、可維護、更易理解的工程綜合模型
- 與這個模型交互的插件或者工具
Maven 工程結構和內容被定義在一個 xml 文件中(即談到的pom.xml)
安裝配置
Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。
官網下載后解壓即可,一般都是在開發工具里面配置Maven的位置就可以了,如果喜歡敲命令的話,那就添加一下環境變量。
然后配置一下本地倉庫地址和鏡像倉庫,提供一下示例:
maven下載地址:Maven – Download Apache Maven?
JDK原生打包
在Maven工具出現之前,基本上用的都是Ant(打包構建項目工具)打包,由于現在Maven越來越流行,使用Ant打包的項目就越來越少了,這些工具基本上都是通過對JDK原生打包的方式進行了一層封裝,編譯打包底層還是基于JDK帶有的工具實現的。
現有一個demo測試項目,結構路徑如下:
?我們進入到這個src的目錄里面,使用命令進行編譯:
?編譯好后就可以進行打包成jar包文件了,jar文件又分為兩種,一種是直接被引用的jar包,另外一種是可以直接執行的可執行jar包,打包命令如下:
?這時打的包僅是一個普通的jar包,如果要打成可執行包的話,那么就得引用一個MANIFEST.MF文件了,JDK也是根據這個文件加載相關的類信息的,新建一個manifest.txt文件,內容如下(每個冒號后面都需要有空格,每行都需換行)
Manifest-Version: 1.0
Created-By: 1.8.0_101 (Oracle Corporation)
Main-Class: com.compile.App
執行一下命令
這樣打出來的jar包就是可執行包啦。使用以下命令啟動jar包
?java -jar compile.jar
使用Maven打包
我們需要創建一個Maven Project項目,我們這里使用quickstart原型(快速創建)
創建好后再pom.xml里面的build標簽里面添加Maven打包插件,如果不需要可執行jar包的話,把configuration標簽去掉就好了
?POM結構
先放在這里,起碼有個概念,會在后面的博文中講到
?Maven項目結構
項目結構是一個約定好了的目錄,如果有些改動的話,可能項目都不能正常運行或打包(博主碰到過一次,賊難受)
約定的目錄(不可改):
src/main/java –存放項目的.java文件 |
src/main/resources –存放項目資源文件。比方Spring,Mybatis配置文件 |
src/test/java –存放全部測試.java文件,比方JUnit測試類 |
src/test/resources ---測試資源文件 |
target ---項目輸出位置,編譯完畢后的東西放到這里面 |
pom.xml |
Maven生命周期
在?Maven的的生命周期里面,理想的標準構建流程為:清理->編譯 -> 測試 ->?報告 ->?打包 ->?部署。并且在一個pom.xml里面全部搞定
而Maven只是一個抽象規范流程,每個周期里面的流程是有具體的插件來執行的
?而每個生命周期的預設如下:
階段 | 處理 | 描述 |
驗證 validate | 驗證項目 | 驗證項目是否正確且所有必須信息是可用的 |
編譯 compile | 執行編譯 | 源代碼編譯在此階段完成 |
測試 Test | 測試 | 使用適當的單元測試框架(例如JUnit)運行測試。 |
包裝 package | 打包 | 創建JAR/WAR包如在 pom.xml 中定義提及的包 |
檢查 verify | 檢查 | 對集成測試的結果進行檢查,以保證質量達標 |
安裝 install | 安裝 | 安裝打包的項目到本地倉庫,以供其他項目使用 |
部署 deploy | 部署 | 拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程 |
運行任何一個階段,都會從其所在生命周期的第一個階段開始,順序執行到指定的階段,如:
mvn package? --- 本義:執行default周期的package階段,maven會自動從process-resources階段開始運行到package階段結束
Maven插件
插件plugin是綁定到生命周期,承擔實際功能的組件。mvn運行時,自動關聯插件來運行
下圖是maven默認的各階段對應的插件列表:
生命周期 | 生命周期階段 | 插件目標 | 執行任務 |
clean | pre-clean | ||
clean | maven-clean-plugin:clean | 刪除項目的輸出目錄。 | |
post-clean | |||
site | pre-site | ||
site | maven-site-plugin:site | ||
post-site | |||
site-deploy | maven-site-plugin:deploy | ||
default | process-resources | maven-resources-plugin:resources | 復制主資源文件至主輸出目錄 |
compile | maven-compiler-plugin:compile | 編譯主代碼至主輸出目錄 | |
process-test-resources | maven-resources-plugin:testResources | 復制測試資源文件至測試輸出目 | |
test-compile | maven-compiler-plugin:testCompile | 編譯測試代碼至測試輸出目錄 | |
test | maven-surefire-plugin:test | 執行測試用例 | |
package | maven-jar-plugin:jar(ejb:ejb jar:jar rar:rar war:war) | 創建項目jar包 | |
install | maven-install-plugin:install | 將項目輸出構件安裝到本地倉庫 | |
deploy | maven-deploy-plugin:deploy | 將項目輸出構件部署到遠程倉庫 |
Maven常用命令
mvn clean? 執行清理階段生命周期
mvn compile 執行編譯階段生命周期
mvn package 執行打包階段生命周期
mvn install 安裝jar到本地庫
mvn dependency:tree?將當前項目pom.xml中引入的依賴打印出來