Maven是Java界使用最廣泛的依賴管理工具,幾乎所有的Java類庫和項目都使用Maven的項目模型。可以說Maven是學習Java必要的一個知識點。那麼就讓我們來看看如何使用Maven吧。
安裝Maven
Maven的安裝非常簡單,訪問下面的網頁,選擇zip包下載。下載完成後,放到合適的位置解壓,然後將文件夾中的bin目錄添加到環境變量中,以便可以在命令行中運行Maven。
<code>http
:/<code>
或者如果你使用chocolatery或者scoop這樣的包管理器,也可以直接使用命令行方式安裝Maven。命令行方式安裝Maven有一個好處就是包管理器會幫我們配置好環境變量,不需要手動配置。
Maven安裝成功以後,打開一個cmd或者powershell窗口,運行以下命令,如果成功顯示出Maven的版本號,說明Maven安裝成功了。
<code>mvn
-v/<code>
Maven的配置
安裝好了Maven,先不要著急使用。默認情況下Maven會連接國外的倉庫,下載速度非常慢。為了加快下載速度,最好先修改Maven配置文件。默認配置文件的位置是~/.m2/settings.xml。如果沒有改文件夾,需要先創建一下。注意Windows系統無法直接創建以小數點開頭的文件名,因此需要在powershell命令行中運行。
<code>mkdir
~/.m2
notepad
settings.xml
/<code>
然後複製下面文件的內容。如果你不想讓Maven將類庫緩存放到用戶目錄下。可以取消localRepository標籤的註釋,然後設置你喜歡的目錄。另外如果你使用的JDK版本不是11的話,就將profile標籤中的java.version版本改成自己的。
<code><
settings
xmlns
="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
><
pluginGroups
>pluginGroups
><
proxies
>proxies
><
servers
>servers
><
mirrors
><
mirror
><
id
>aliyunmavenid
><
mirrorOf
>*mirrorOf
><
name
>阿里雲公共倉庫name
><
url
>https://maven.aliyun.com/repository/publicurl
>mirror
>mirrors
><
profiles
><
profile
><
id
>jdkid
><
properties
><
java.version
>11java.version
><
maven.compiler.source
>${java.version}maven.compiler.source
><
maven.compiler.target
>${java.version}maven.compiler.target
><
maven.compiler.compilerVersion
>${java.version}maven.compiler.compilerVersion
><
maven.compiler.release
>${java.version}maven.compiler.release
><
project.build.sourceEncoding
>UTF-8project.build.sourceEncoding
><
project.reporting.outputEncoding
>UTF-8project.reporting.outputEncoding
><
maven.compiler.encoding
>UTF-8maven.compiler.encoding
><
downloadSources
>truedownloadSources
><
downloadJavadocs
>truedownloadJavadocs
>properties
><
repositories
><
repository
><
id
>springid
><
url
>https://maven.aliyun.com/repository/springurl
><
releases
><
enabled
>trueenabled
>releases
><
snapshots
><
enabled
>trueenabled
>snapshots
>repository
><
repository
><
id
>springid
><
url
>https://maven.aliyun.com/repository/spring-pluginurl
><
releases
><
enabled
>trueenabled
>releases
><
snapshots
><
enabled
>trueenabled
>snapshots
>repository
>repositories
>profile
>profiles
><
activeProfiles
><
activeProfile
>jdkactiveProfile
>activeProfiles
>settings
>/<code>
完成後保存即可。這樣一來,Maven就會使用國內的阿里雲鏡像,下載速度會非常快。
使用Maven創建項目
接下來就可以使用Maven創建項目了,平時我們一般都是直接用IDE的創建項目功能,很少用Maven的創建項目命令。不過還是有必要了解一下Maven的創建項目命令:
<code>mvn
archetype
:generate
/<code>
該命令會以交互式方式運行,接下來會詢問你要創建的項目模板,選擇默認的7即可;然後輸入groupId、artifactId、版本號、包名等信息。前三者唯一標識了一個Maven包,不管是我們自己開發項目,還是引用項目都需要明確指定這三個參數。全部選擇完畢之後,一個新的項目文件夾就生成了。
使用合適的IDE打開項目,可以看到項目具有類似下面的結構。簡單介紹一下這個結構:src目錄下是所有的源代碼;main目錄下是項目主要的代碼;test目錄下是項目的測試代碼;pom.xml文件非常重要,它是Maven的核心描述文件,定義了Maven項目的所有重要信息。
<code>my-app | ` | | ` | ` | ` | ` | ` ` ` ` ` ` `/<code>
那麼再來看看pom.xml文件內容是什麼樣的吧。它是一個XML格式的文件,前面一部分定義了項目的信息,也就是我們在創建項目時候指定的groupId等。dependencies定義了項目要使用的各種依賴項,也就是第三方類庫。
<code><
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.0modelVersion
><
groupId
>yitian.studygroupId
><
artifactId
>helloartifactId
><
version
> 1.0-SNAPSHOTversion
><
packaging
>jarpackaging
><
name
>helloname
><
url
>http://maven.apache.orgurl
><
properties
><
project.build.sourceEncoding
>UTF-8project.build.sourceEncoding
>properties
><
dependencies
><
dependency
><
groupId
>junitgroupId
><
artifactId
>junitartifactId
><
version
>3.8.1version
><
scope
>testscope
>dependency
>dependencies
>project
> /<code>
這裡默認的junit類庫比較舊,我們可以將版本號修改為4.13,這是目前最新的junit4版本。然後輸入下面的命令重新編譯項目,Maven會檢查依賴項,如果發現本地不存在的依賴項就會先把它下載下來。因為我們用了阿里雲鏡像,所以下載和編譯過程應該很快就可以完成了。
<code>mvn
compile/<code>
接下來就可以運行項目了,這樣一個成功的Maven項目就創建完畢了。
添加和管理依賴
那麼Maven是怎樣讓我們更方便的開發項目的呢?如你所見,我們只要將項目需要的依賴項添加到pom.xml中,Maven就可以自動下載和配置依賴的類路徑。之後項目就可以直接運行了,簡直和變魔術一樣!如果你還在使用原始的複製粘貼jar包的方式,我建議你馬上切換到Maven上來,享受它的便利功能。
默認情況下,Maven會將包下載到配置文件指定的localRepository,默認路徑是~/.m2/repository。每個包會按照包名分類存放,搜索和查找也很方便。
依賴項還有作用域這個特性,默認的作用域是compile,也就是包在編譯和運行的時候都可見,大部分依賴也都使用這個作用域。test作用域只在test的時候可見,打包的時候不會包括,測試用的依賴會使用這個作用域。還有個provided作用域,指定一些開發時候需要、但是部署時不需要的包,一般用於開發servlet項目,servlet依賴是我們開發時必須的,但是部署項目的時候,會由servlet容器提供這些依賴。
要搜索依賴的話,可以使用Jetbrains新推出的Package Search網站,利用它可以搜索各種依賴項。地址如下:
<code>https
:/<code>
例如我們搜索一下junit,然後點進來看看,包搜索功能將依賴項的各種信息都聚合到了一起。在左邊可以查看項目的源碼地址,右邊列出了Maven和Gradle的依賴代碼塊,可以直接複製粘貼到項目中。
再舉個例子,我們在項目中添加Gson的依賴,注意要添加到dependencies,和其他dependency平級。
<code><
dependency
><
scope
>compilescope
><
groupId
>com.google.code.gsongroupId
><
artifactId
>gsonartifactId
><
version
>2.8.6version
>dependency
>/<code>
然後將Main代碼修改成類似下面這樣的:
<code>package
yitian.study;import
com.google.gson.Gson;public
class
App
{public
static
void
main
(String[] args)
{ Gson gson =new
Gson(); System.out.println(gson.toJson(new
User("yitian"
,"123456"
))); } }class
User
{private
String username;private
String password;public
User
(String username, String password)
{this
.username = username;this
.password = password; }public
StringtoString
()
{return
"User{"
+"username='"
+ username +'\''
+", password='"
+ password +'\''
+'}'
; } }/<code>
然後再次maven compile,並運行一下項目,可以發現,Maven已經幫我們下載並配置好了項目依賴,這次依然可以完美運行。這就是Maven強大的依賴管理功能。
測試項目
Maven項目結構中還專門為代碼測試留了一個專門的文件夾,用Maven進行單元測試也同樣方便。將測試代碼修改成類似下面的樣子:
<code>package
yitian.study;import
com.google.gson.Gson;import
org.junit.Before;import
org.junit.Test;import
static
org.junit.Assert.assertEquals;public
class
AppTest
{private
static
Gson gson =new
Gson();private
static
User user;public
void
setUp
()
{ user =new
User("yitian"
,"123456"
); }public
void
test
()
{ String expected ="{"username":"yitian","password":"123456"}"
; assertEquals(expected, gson.toJson(user)); } } /<code>
然後運行下面的命令即可使用Maven執行單元測試。假如有多個測試的話,Maven會執行所有這些測試。如果出現失敗的測試,Maven也會給出相應的提示信息。
<code>mvntest
/<code>
利用這一功能,我們可以放心的編寫大量的測試用例,使用Maven一鍵幫我們執行測試。Maven的這一特性也可以方便的集成到持續集成系統中:推送項目代碼以後自動測試,測試通過後自動發佈,極大簡化開發流程。
好了,相信大家看了本文也瞭解了Maven的一些核心功能,希望本文對大家有所幫助。如果有什麼問題,也可以在評論區留言,大家一起交流學習!