❤️MAVEN专题之二、安装、配置、mvn运行过程详解

小明的学习圈子2023-12-23后端maven成神之路

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 185646832Nov113: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 7101434096Jul72018 jdk1.8.0_181
-rw-r--r--1 root root 185646832Nov113: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 RuntimeEnvironment(build 1.8.0_181-b13)
JavaHotSpot(TM)64-BitServer 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-0113: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,31510.2MB/s in0.9s
2019-11-0113: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 4096Nov113:49 bin
drwxr-xr-x 2 root root 4096Nov113:49 boot
drwxrwxr-x 3 mysql mysql 4096Aug2723:01 conf
drwxrwxr-x 4 mysql mysql 4096Nov113:49 lib
-rw-rw-r--1 mysql mysql 12846Aug2723:09 LICENSE
-rw-rw-r--1 mysql mysql 182Aug2723:09 NOTICE
-rw-rw-r--1 mysql mysql 2533Aug2723: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 4096Nov113:49 apache-maven-3.6.2
-rw-r--r--1 root root 9142315Sep305:43 apache-maven-3.6.2-bin.tar.gz
lrwxrwxrwx 1 root root 18Nov113: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
ApacheMaven3.6.2(40f52333136460af0dc0d7232c0dc0bcf0d9e117;2019-08-27T23:06:16+08:00)
Maven home:/opt/maven/maven
Java version:1.8.0_181, vendor:OracleCorporation, 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运行。

更改安装地址,如下:

img

上图中的地址为默认地址,本次我们将其改为D:\installsoft\Java\jdk1.8.0_121,大家也可以根据自己的需求修改安装地址。

然后点击下一步

img

上图中是jre的默认地址,我们将其改为D:\installsoft\Java\jre1.8.0_121

配置环境变量

桌面上选中此电脑->鼠标右键点击属性->高级系统设置->高级->环境变量->新建,如下:

img

上图中新建环境变量JAVA_HOME,值为D:\installsoft\Java\jdk1.8.0_121,如下图:

img

新建环境变量CLASSPATH,值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

修改环境变量PATH,在PATH的值中添加%JAVA_HOME%\bin

验证jdk是否正常

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

C:\Users\Think>java -version
java version "1.8.0_121"
Java(TM) SE RuntimeEnvironment(build 1.8.0_121-b13)
JavaHotSpot(TM)64-BitServer 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:\Users\Think>D:
D:\>javac -encoding utf-8HelloWorld.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:\installsoft\maven目录

img

配置环境变量

这个地方参考上面jdk环境变量的配置。

新建环境变量M2_HOME,值为:

D:\installsoft\maven\apache-maven-3.6.2

修改环境变量PATH,在PATH的值中添加%M2_HOME%\bin

验证maven是否正常

C:\Users\Think>mvn -v
ApacheMaven3.6.2(40f52333136460af0dc0d7232c0dc0bcf0d9e117;2019-08-27T23:06:16+08:00)
Maven home: D:\installsoft\maven\apache-maven-3.6.2\bin\..
Java version:1.8.0_121, vendor:OracleCorporation, runtime: D:\installsoft\Java\jdk1.8.0_121\jre
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:\Users\Think>mvn help:system
[INFO]Scanningfor projects...
Downloadingfrom central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom
Downloadedfrom 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)
Downloadingfrom central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/12/maven-plugins-12.pom
Downloadedfrom central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/12/maven-plugins-12.pom (12 kB at 21 kB/s)
Downloadingfrom central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/9/maven-parent-9.pom

上面运行mvn help:system命令之后,好像从https://repo.maven.apache.org站点中在下载很多东西,最后又输出了系统所有环境变量的信息。

我们来详细看一下mvn help:system这个命令的运行过程:

  1. 运行mvn help:system之后
  2. 系统会去环境变量PATH对应的所有目录中寻找mvn命令,然后在D:\installsoft\maven\apache-maven-3.6.2\bin中找到了可执行的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

上面这种会输出插件的帮助文档,来感受一下:

 1 C:\Users\Think>mvn clean:help
 2 [INFO]Scanningfor projects...
 3 [INFO]
 4 [INFO]------------------------------------------------------------------------
 5 [INFO]BuildingMavenStubProject(No POM)1
 6 [INFO]------------------------------------------------------------------------
 7 [INFO]
 8 [INFO]--- maven-clean-plugin:2.5:help (default-cli)@ standalone-pom ---
 9 [INFO] org.apache.maven.plugins:maven-clean-plugin:2.5
10 MavenCleanPlugin
11 TheMavenCleanPluginis a plugin that removes files generated at build-time
12 in a project's directory.
13 This plugin has 2 goals:
14 clean:clean
15 Goal which cleans the build.
16 This attempts to clean a project's working directory of the files that were
17 generated at build-time.Bydefault, it discovers and deletes the directories
18 configured in project.build.directory, project.build.outputDirectory,
19 project.build.testOutputDirectory,and project.reporting.outputDirectory.
20 Files outside the default may also be included in the deletion by configuring
21 the filesets tag.
22 clean:help
23 Display help information on maven-clean-plugin.
24 Call
25 mvn clean:help -Ddetail=true-Dgoal=<goal-name>
26 to display parameter details.
27 [INFO]------------------------------------------------------------------------
28 [INFO] BUILD SUCCESS
29 [INFO]------------------------------------------------------------------------
30 [INFO]Total time:0.372 s
31 [INFO]Finished at:2019-11-01T17:59:04+08:00
32 [INFO]FinalMemory:15M/487M
33 [INFO]------------------------------------------------------------------------

这些后面还会详细介绍。

Maven的一些配置

启动文件设置

上面提到了mvn运行的时候,会加载启动的配置文件settings.xml,这个文件默认在M2_HOME/conf目录,一般我们会拷贝一个放在~/.m2目录中,前者是全局范围的配置文件,整个机器上所有用户都会受到该配置的影响,而后者是用户范围级别的,只有当前用户才会受到该配置的影响。推荐使用用户级别的,将其放在~/.m2目录,而不去使用全局的配置,以免影响到其他用户的使用。还有这样使用方便日后maven版本升级,一般情况下maven整个安装目录我们都不要去动,升级的时候只需要替换一下安装文件就可以了,很方便。

配置本地缓存目录

settings.xml中有个localRepository标签,可以设置本地缓存目录,maven从远程仓库下载下来的插件以及以后所有我们用到的jar包都会放在这个目录中,如下:

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

总结

  1. 掌握maven的安装过程
  2. ~表示当前用户目录
  3. maven的配置文件settings.xml一般我们放在~/.m2目录中,方便maven的升级,避免影响其他用户的配置
  4. 了解mvn命令的执行过程

来源:http://itsoku.com/course/2/63

Last Updated 2024/4/6 11:55:17