Maven系列第2篇:安裝、配置、mvn運行過程詳解

  • 2019 年 11 月 5 日
  • 筆記

maven系列目標:從入門開始開始掌握一個高級開發所需要的maven技能。

這是maven系列第2篇。

本文主要內容

  1. linux中安裝maven
  2. window中安裝maven
  3. mvn命令運行的原理
  4. maven配置設置

本篇環境

  1. jdk1.8
  2. maven3.6.2

我們要寫java代碼,需要安裝jdk,那我們要使用maven,也類似,需要在我們的機器中安裝maven。

linux中安裝安裝maven

maven是使用java語言編寫的,所以我們要運行maven,需要先安裝jdk。

安裝jdk

下載jdk

本次我們安裝jdk1.8,可以到oracle官網上去下載jdk-8u181-linux-x64.tar.gz,將其放在/opt/jdk目錄中,如下:

[root@ady01 jdk]# cd /opt/jdk/  [root@ady01 jdk]# ll  total 181300  -rw-r--r-- 1 root root 185646832 Nov  1 13:30 jdk-8u181-linux-x64.tar.gz
解壓jdk
[root@ady01 jdk]# tar -zvxf jdk-8u181-linux-x64.tar.gz  [root@ady01 jdk]# ll  total 181304  drwxr-xr-x 7   10  143      4096 Jul  7  2018 jdk1.8.0_181  -rw-r--r-- 1 root root 185646832 Nov  1 13:30 jdk-8u181-linux-x64.tar.gz
配置環境變量

在/etc/profile文件末尾追加下面幾行

export JAVA_HOME=/opt/jdk/jdk1.8.0_181  export PATH=$JAVA_HOME/bin:$PATH  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

這個地方擴展個知識點: 有個知識點我們說一下,系統運行java或者其他外部命令的時候,系統是如何找到這些命令的? linux中會去PATH對應的所有目錄中尋找這個命令,找到了就可以直接運行,如果沒有設置PATH,我們需要知道命令的完整路徑才可以運行,所以使用PATH更方便一些。 window中,也有個系統變量PATH,這個PATH的值是由很多目錄的地址組成的,當我們執行一個命令的之後,系統會去PATH對應的所有目錄中尋找我們運行的命令,找到了就可以直接運行,比如你們想快速啟動其他的一些軟件,可以將這些軟件的設置到PATH變量中,可以在cmd命令中快速啟動了。

運行下面命令使環境變量生效
[root@ady01 jdk1.8.0_181]# source /etc/profile
驗證jdk是否正常

查看jdk版本

[root@ady01 jdk]# java -version  java version "1.8.0_181"  Java(TM) SE Runtime Environment (build 1.8.0_181-b13)  Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

新建/opt/jdk/HelloWorld.java,內容如下:

public class HelloWorld {      public static void main(String[] args) {          System.out.println("hello maven!");      }  }

運行下面的命令:

[root@ady01 jdk]# cd /opt/jdk/  [root@ady01 jdk]# javac HelloWorld.java  [root@ady01 jdk]# java HelloWorld  hello maven!

恭喜,輸出hello maven表示正常,jdk安裝成功!

安裝maven

下載maven

咱們到maven官網中下載最新的maven,地址如下:

https://maven.apache.org/download.cgi

最新的版本是apache-maven-3.6.2,linux中我們需要下載apache-maven-3.6.2-bin.tar.gz這個。

[root@ady01 jdk]# mkdir /opt/maven  [root@ady01 jdk]# cd /opt/maven/  [root@ady01 maven]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz  --2019-11-01 13:47:11--  http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz  Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1  Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... connected.  HTTP request sent, awaiting response... 200 OK  Length: 9142315 (8.7M) [application/octet-stream]  Saving to: 『apache-maven-3.6.2-bin.tar.gz』    100%[==================================================================================================================================>] 9,142,315   10.2MB/s   in 0.9s    2019-11-01 13:47:13 (10.2 MB/s) - 『apache-maven-3.6.2-bin.tar.gz』 saved [9142315/9142315]  [root@ady01 maven]# ls  apache-maven-3.6.2-bin.tar.gz

上面我們創建了/opt/maven目錄用來存放maven相關軟件,然後使用到wget命令,這個是linux中的一個命令,可以訪問一個http地址,將其下載到當前目錄。

解壓maven
[root@ady01 maven]# tar -zvxf apache-maven-3.6.2-bin.tar.gz  [root@ady01 maven]# ls  apache-maven-3.6.2  apache-maven-3.6.2-bin.tar.gz
maven目錄結構
[root@ady01 maven]# ll /opt/maven/maven/  total 40  drwxr-xr-x 2 root  root   4096 Nov  1 13:49 bin  drwxr-xr-x 2 root  root   4096 Nov  1 13:49 boot  drwxrwxr-x 3 mysql mysql  4096 Aug 27 23:01 conf  drwxrwxr-x 4 mysql mysql  4096 Nov  1 13:49 lib  -rw-rw-r-- 1 mysql mysql 12846 Aug 27 23:09 LICENSE  -rw-rw-r-- 1 mysql mysql   182 Aug 27 23:09 NOTICE  -rw-rw-r-- 1 mysql mysql  2533 Aug 27 23:01 README.txt
  1. bin:存放可以執行的文件
  2. conf:存放maven的配置文件
  3. lib:maven是java編寫的,裏面會用到很多第三方的jar包,這些jar包位於lib中
創建一個軟連接指向apache-maven-3.6.2目錄
[root@ady01 maven]# ln -s apache-maven-3.6.2 maven  [root@ady01 maven]# ll  total 8936  drwxr-xr-x 6 root root    4096 Nov  1 13:49 apache-maven-3.6.2  -rw-r--r-- 1 root root 9142315 Sep  3 05:43 apache-maven-3.6.2-bin.tar.gz  lrwxrwxrwx 1 root root      18 Nov  1 13:56 maven -> apache-maven-3.6.2

ln –s 源文件 目標文件是linux中的一個命令,windows中的快捷方式都知道吧,這個相當於給源文件創建了一個快捷方式,快捷方式的名稱叫做目標文件ln -s apache-maven-3.6.2 maven是指給apache-maven-3.6.2創建了一個快捷方式maven,訪問maven就相當於訪問apache-maven-3.6.2。 此處為什麼需要用快捷方式? 以後升級maven更方便一些,以後如果我們需要將maven升級到最新的版本,比如3.7,那麼只需下載3.7到當前目錄,再運行一下ln -s apache-maven-3.7 maven命令修改一下快捷方式的指向就行了,很方便。

配置maven環境變量

在/etc/profile文件末尾追加下面幾行

export M2_HOME=/opt/maven/maven  export PATH=$M2_HOME/bin:$PATH
運行下面的命令讓環境變量生效
[root@ady01 maven]# source /etc/profile
驗證maven是否正常
[root@ady01 maven]# mvn -v  Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)  Maven home: /opt/maven/maven  Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /opt/jdk/jdk1.8.0_181/jre  Default locale: en_US, platform encoding: UTF-8  OS name: "linux", version: "3.10.0-693.2.2.el7.x86_64", arch: "amd64", family: "unix"

mvn -v輸出maven的版本號信息,若輸出和上面類似,那麼恭喜你,maven安裝成功!

window安裝maven

安裝jdk

下載jdk

我們以jdk1.8為例,到oracle官網下載jdk-8u121-windows-x64.exe

安裝jdk文件

雙擊jdk-8u121-windows-x64.exe運行。

更改安裝地址,如下:

上圖中的地址為默認地址,本次我們將其改為D:installsoftJavajdk1.8.0_121,大家也可以根據自己的需求修改安裝地址。

然後點擊下一步

上圖中是jre的默認地址,我們將其改為D:installsoftJavajre1.8.0_121

配置環境變量

桌面上選中此電腦->鼠標右鍵點擊屬性->高級系統設置->高級->環境變量->新建,如下:

上圖中新建環境變量JAVA_HOME,值為D:installsoftJavajdk1.8.0_121,如下圖:

新建環境變量CLASSPATH,值為.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar

修改環境變量PATH,在PATH的值中添加%JAVA_HOME%bin

驗證jdk是否正常

查看jdk版本,cmd窗口中運行java -version,如下:

C:UsersThink>java -version  java version "1.8.0_121"  Java(TM) SE Runtime Environment (build 1.8.0_121-b13)  Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

新建D:/HelloWorld.java,文件編碼格式為utf-8,內容如下:

public class HelloWorld {      public static void main(String[] args) {          System.out.println("hello maven!");      }  }

運行下面的命令:

C:UsersThink>D:  D:>javac -encoding utf-8 HelloWorld.java  D:>java HelloWorld  hello maven!

恭喜,輸出hello maven表示正常,jdk安裝成功!

安裝maven

下載maven3.6.2
下載地址:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
解壓

放在D:installsoftmaven目錄,如下圖

配置環境變量

這個地方參考上面jdk環境變量的配置。

新建環境變量M2_HOME,值為:

D:installsoftmavenapache-maven-3.6.2

修改環境變量PATH,在PATH的值中添加%M2_HOME%bin

驗證maven是否正常
C:UsersThink>mvn -v  Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)  Maven home: D:installsoftmavenapache-maven-3.6.2bin..  Java version: 1.8.0_121, vendor: Oracle Corporation, runtime: D:installsoftJavajdk1.8.0_121jre  Default locale: zh_CN, platform encoding: GBK  OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

mvn -v輸出maven的版本號信息,若輸出和上面類似,那麼恭喜你,maven安裝成功!

Maven的運行原理詳解

本文後面會用到~這個符號,先對這個符號做一下說明,這個符號表示當前用戶的目錄 window中默認在C:Users用戶名 linux root用戶默認在/root目錄,其他用戶的~對應/home/用戶名 後面的文章中我們就用~表示用戶目錄,這個地方不再說明。

運行下面命令,看一下效果

C:UsersThink>mvn help:system  [INFO] Scanning for projects...  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom (4.7 kB at 4.0 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/12/maven-plugins-12.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/12/maven-plugins-12.pom (12 kB at 21 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/9/maven-parent-9.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/9/maven-parent-9.pom (33 kB at 44 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.jar  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.jar (24 kB at 12 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom (15 kB at 13 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/16/maven-plugins-16.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/16/maven-plugins-16.pom (13 kB at 33 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.jar  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.jar (209 kB at 29 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom  Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom (11 kB at 14 kB/s)  Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.jar  Progress (1): 153 kB

上面運行mvn help:system命令之後,好像從https://repo.maven.apache.org站點中在下載很多東西,最後又輸出了系統所有環境變量的信息。

我們來詳細看一下mvn help:system這個命令的運行過程:

  1. 運行mvn help:system之後
  2. 系統會去環境變量PATH對應的所有目錄中尋找mvn命令,然後在D:installsoftmavenapache-maven-3.6.2bin中找到了可執行的mvn文件
  3. 運行mvn文件,也就是執行mvn命令
  4. 通常一些軟件啟動的時候,會有一個啟動配置文件,maven也有,mvn命令啟動的時候會去~/.m2目錄尋找配置文件settings.xml,這個文件是mvn命令啟動配置文件,可以對maven進行一些啟動設置(如本地插件緩存放在什麼位置等等),若~/.m2目錄中找不到settings.xml文件,那麼會去M2_HOME/conf目錄找這個配置文件,然後運行maven程序
  5. mvn命令後面跟了一個參數:help:sytem,這個是什麼意思呢?這個表示運行help插件,然後給help插件發送system命令
  6. maven查看本地緩存目錄(默認為~/.m2目錄)尋找是否有help插件,如果本地沒有繼續下面的步驟
  7. maven會去默認的一個站點(apache為maven提供的一個網站[repo.maven.apache.org],這個叫中央倉庫)下載help插件到~/.m2目錄
  8. 運行help插件,然後給help插件發送system指令,help插件收到system指令之後,輸出了本地環境變量的信息,如果系統找不到指定的插件或者給插件發送無法識別的命令,都會報錯

上面這個過程大家再感受一下,maven中所有的命令都是以插件的形式提供的,所以maven擴展也是相當容易的。

mvn 插件名稱:help

上面這種會輸出插件的幫助文檔,來感受一個:

C:UsersThink>mvn clean:help  [INFO] Scanning for projects...  [INFO]  [INFO] ------------------------------------------------------------------------  [INFO] Building Maven Stub Project (No POM) 1  [INFO] ------------------------------------------------------------------------  [INFO]  [INFO] --- maven-clean-plugin:2.5:help (default-cli) @ standalone-pom ---  [INFO] org.apache.maven.plugins:maven-clean-plugin:2.5    Maven Clean Plugin    The Maven Clean Plugin is a plugin that removes files generated at build-time    in a project's directory.    This plugin has 2 goals:    clean:clean    Goal which cleans the build.    This attempts to clean a project's working directory of the files that were    generated at build-time. By default, it discovers and deletes the directories    configured in project.build.directory, project.build.outputDirectory,    project.build.testOutputDirectory, and project.reporting.outputDirectory.      Files outside the default may also be included in the deletion by configuring    the filesets tag.    clean:help    Display help information on maven-clean-plugin.    Call      mvn clean:help -Ddetail=true -Dgoal=<goal-name>    to display parameter details.      [INFO] ------------------------------------------------------------------------  [INFO] BUILD SUCCESS  [INFO] ------------------------------------------------------------------------  [INFO] Total time: 0.372 s  [INFO] Finished at: 2019-11-01T17:59:04+08:00  [INFO] Final Memory: 15M/487M  [INFO] ------------------------------------------------------------------------

這些後面還會詳細介紹。

Maven的一些配置

啟動文件設置

上面提到了mvn運行的時候,會加載啟動的配置文件settings.xml,這個文件默認在M2_HOME/conf目錄,一般我們會拷貝一個放在~/.m2目錄中,前者是全局範圍的配置文件,整個機器上所有用戶都會受到該配置的影響,而後者是用戶範圍級別的,只有當前用戶才會受到該配置的影響。推薦使用用戶級別的,將其放在~/.m2目錄,而不去使用全局的配置,以免影響到其他用戶的使用。還有這樣使用方便日後maven版本升級,一般情況下maven整個安裝目錄我們都不要去動,升級的時候只需要替換一下安裝文件就可以了,很方便。

配置本地緩存目錄

settings.xml中有個localRepository標籤,可以設置本地緩存目錄,maven從遠程倉庫下載下來的插件以及以後所有我們用到的jar包都會放在這個目錄中,如下:

<localRepository>C:/Users/Think/.m1/repository</localRepository>

總結

  1. 掌握maven的安裝過程
  2. ~表示當前用戶目錄
  3. maven的配置文件settings.xml一般我們放在~/.m2目錄中,方便maven的升級,避免影響其他用戶的配置
  4. 了解mvn命令的執行過程