以前也沒有系統(tǒng)的看過maven的資料寿桨,一般就是用它來添加依賴半火,但最近慘遭maven的折磨,經(jīng)常性的編譯通過搬卒,但運行的時候出現(xiàn)ClassNotFoundException
或者NoClassDefFoundError
之類的錯誤吕嘀,終于痛下決心违寞,想系統(tǒng)的了解一下Maven的用法。
安裝maven
maven的安裝很簡單偶房,去官網(wǎng)下載壓縮包之后解壓趁曼,然后配置環(huán)境變量M2_HOME
和把%M2_HOME%/bin
添加到path
即可。 MAVEN_OPTS
是用來調整jvm內(nèi)存和持久代的不是必須要配置的棕洋。
創(chuàng)建maven項目
配置好maven的環(huán)境變量之后就可以使用命令行來創(chuàng)建maven項目挡闰,但個人感覺這樣的方式還是比較麻煩的,還是使用ide
直接生成比較簡單拍冠。
項目結構
建好的項目目錄結構如下
-
main
目錄存放項目的主要代碼 -
java
目錄存放java代碼 -
resources
目錄存放配置文件 -
webapp
目錄存放Web應用相關的代碼 -
pom.xml
是項目的配置文件
POM結構
剛建好的maven項目的的pom.xml
文件是類似于這樣的
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tk.xmfaly</groupId>
<artifactId>xmfdemo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>xmfdemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>xmfdemo</finalName>
</build>
</project>
從上到下
-
modelVersion
是pom
的版本號尿这,這個必須有,不需要修改 -
groupId
庆杜、artifactId
、version
是maven項目的三坐標碟摆,可以在倉庫中對應唯一的一個maven項目 -
packaging
是打包方式晃财,默認不寫是jar
包方式 -
name
、url
表示該項目的名稱和url地址典蜕,可以省略 -
dependencies
是該項目的依賴關系断盛,每一個dependency
都代表著一個maven依賴 -
build
是與構建相關的配置,這里的finalName
是用來配置構建之后的文件名字
生命周期
一個maven項目有9個生命周期愉舔,如果你使用ide應該可以很方便的看到這九個周期钢猛,并且可以快速的執(zhí)行某個周期。
其實本質上每個周期都是一個或多個的
maven
插件在起作用轩缤,比如compile
是由maven-compile-plugin
這個插件在起作用命迈。每個周期的功能如下
-
clean
清理自動生成的target
目錄 -
validate
驗證pom.xml
文件是否有效 -
compile
編譯java代碼 -
test
運行測試代碼 -
package
項目打包 -
verify
驗證package
打的包是否有效 -
site
生成項目的靜態(tài)站點 -
deploy
將打包的文件部署到遠程倉庫
依賴的作用域
一直以來我一直被這個作用域所困惑贩绕,很多時候就是作用于搞混了,導致一系列的問題壶愤。其實maven依賴的作用域也不是那么復雜淑倾,只是一直沒有仔細的去看,去思考罷了征椒。
作用域 | 編譯時有效 | 測試時有效 | 運行時有效 |
---|---|---|---|
compile | √ | √ | √ |
test | √ | ||
runtime | √ | √ | |
provided | √ | √ | |
system | √ | √ |
作用域最好應用于他應該出現(xiàn)的地方娇哆,不應該出現(xiàn)的地方最好不要放上,否則會導致項目過大勃救。