温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何安装和使用Maven

发布时间:2020-10-29 23:28:26 来源:亿速云 阅读:187 作者:Leah 栏目:开发技术

这篇文章运用简单易懂的例子给大家介绍如何安装和使用Maven,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

环境准备

在安装Maven之前,首先要确保本地已安装JDK并配置好了JAVA_HOME环境变量,可以在cmd通过以下命令进行验证:

echo %JAVA_HOME%  # 输出 JAVA_HOME 环境变量值
java -version    # 输出 Java 版本信息

如果正常输出了JDK的安装路径及java的版本信息,那么就可以开始进行下一步了,否则,你可能需要先到官网下载一个JDK,并按照下图所示配置好环境变量:

如何安装和使用Maven

安装Maven

在确认本地已安装好了JDK并配置了环境变量后,我们就可以开始安装Maven了,首先找到官网,然后找到安装包下载即可,本文以 3.6.3 版本为例:

如何安装和使用Maven

在下载完成后,解压到本地文件夹即可,以我为例,我解压在 D 盘:

如何安装和使用Maven

在解压完毕后,我们先进行环境变量的配置,配置一个名为M2_HOME的环境变量,对应值为个人的Maven文件夹位置:

如何安装和使用Maven

然后在Path系统变量中配置%M2_HOME%\bin即可:

如何安装和使用Maven

在配置完成并保存后,重新打开cmd,输入以下命令进行验证,如果均得到正确信息,便表明已经安装成功:

echo %M2_HOME%  # 输出 Maven 的安装位置
mvn -v		 	 # 输出 Maven 的版本信息

注意

你可能会疑惑为什么我们下载了Maven3却要配置一个名为M2_HOME的环境变量,这主要是因为在Maven1时环境变量配置为MAVEN_HOME,在Maven2时改为了M2_HOME,而在Maven3则继续沿用了这个命名,不过在Maven3.5.0以后,官方也舍弃了M2_HOME,因此我们现在其实只需要在Path中配置D:\apache-maven-3.6.3\bin即可,不过本文依旧沿用了M2_HOME

安装目录介绍

在正式讲解Maven的使用之前,我们先熟悉一下Maven的安装目录中各个文件夹的内容及作用(基于Maven3.6.3版本):

如何安装和使用Maven

bin

该文件夹下包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。其中mvn是基于UNIX平台的shell脚本,mvn.cmd是基于Windows平台的下的运行脚本。当我们在命令行中输入一条mvn命令时,其实就是在调用这些脚本。此外该文件夹中还包含了mvnDebugmvnDebug.cmd这两个文件,该脚本包含了mvn脚本所有的功能,只是多了一条MAVEN_DEBUG_OPTS的配置,用于调试Maven。除此之外,该文件夹内还包含了m2.confmvnyjp文件,其中m2.confclassworlds的配置文件,而mvnyjp则是为了配合Yourkit profiler的使用,关于classworldsYourkit profiler,本文不做介绍,感兴趣可以自行查找资料。

boot

该文件夹下只有一个plexus-classworldsjar包和其相关的license文件,plexus-classworlds是一个类加载框架,Maven使用该框架来加载自己的类库。

conf

该文件下包含了一个我们以后接触最多的settings.xml文件,主要用于配置代理、镜像和插件等。

此外还包含了一个toolchains.xml配置文件和一个logging文件夹,其中toolchains.xml主要是为了方便我们指定项目所使用的JDK版本,需要配置maven-toolchains-plugin插件一起使用,而logging文件夹(内含一个名为simplelogger.properties的配置文件)则用于配置我们在使用Maven时的日志。

lib

该文件夹下包含了所有Maven在运行时所需要的一些库文件,这里就不做具体介绍了。

其它

此外还有LICENSENOTICEREADME.txt用于说明开源协议和简单介绍的文件。

实战演练

下面我们就开始通过一个实际小案例来说明Maven的基本使用,为了加深对Maven中配置文件和基本指令的学习,我们就不使用IDEA等集成MavenIDE了,直接使用VS CODE来进行接下来案例的讲解。

首先,我们先创建一个名为maven的文件夹,然后通过VS CODE打开,新建一个名为pom.xml的文件夹,并在其中输入以下内容:

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
<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.0</modelVersion>
  <groupId>com.butterfly.maven</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 可选 -->
  <name>a demo maven project</name> 
  
</project>

下面对该文件中的内容进行简单介绍:

文件的第一行是XML头,就像HTML中也有<!DOCTYPE html>头为了告诉标准通用标记语言解析器如何解析文档一般,在XML这里主要是为了指定文档的版本和编码方式。紧接着是project,主要声明了一些POM相关的命名空间和xsd元素,可以方便我们在使用IDE时编辑XML文档。在project这个根元素下还有四个同级的元素,下面再一一介绍:

  • modelVersion:制定了当前POM模型的版本,对于Maven2和Maven3来说,这个值固定为 4.0.0。
  • groupId:定义了项目属于哪个组,一般都是对应公司或组织的域名反写并加上项目名,例如公司域名为abc.com,项目名为demo,那么groupId就是com.abc.demo。
  • artifactId:定义了在当前Maven项目中的唯一的ID,当项目包含多个子项目时,我们就需要特别注意命名方式。
  • version:指定了当前项目的版本,SNAPSHOT意思是快照,即代表当前项目属于不稳定的版本。
  • name:声明了一个让用户更容易理解的项目名称,改元素属于可选项。
     

然后,我们就开始正式编写项目的主代码,我们首先按照Maven规范,在maven文件夹下创建一个src/main/java目录,然后在该目录下再根据我们在XMLgroupIdartifactId的命名,创建文件:com/butterfly/maven/demo/Sum.java,并写入以下内容:

package com.butterfly.maven.demo;

public class Sum {

  private static int sum(int[] arr) {
    int sum = 0;
    for (int val : arr) {
      sum += val;
    }
    return sum;
  }

  public static void main(String[] args) {
    System.out.println(sum(new int[]{1, 3, 5, 7, 9}));
  }

}

然后在项目的根目录下执行mvn clean compile命令进行编译,可以得到以下输出(第一次执行会下载很多插件依赖,下面输出中省略了这些下载输出):

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.butterfly.maven:demo >----------------------
[INFO] Building a demo maven project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo ---
[INFO] Deleting D:\Temp\maven\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.975 s
[INFO] Finished at: 2020-10-02T21:27:55+08:00
[INFO] ------------------------------------------------------------------------

其中clean用于告诉Maven清理输出目录target/compile告诉Maven编译项目主代码,从上面的输出中也可以看出Maven首先执行了maven-clean-plugin:2.5:clean进行删除了target目录,然后执行了maven-resources-plugin:2.6:resources,由于项目中不存在resources文件,因此跳过了,最后执行了maven-compiler-plugin:3.1:compile对主代码进行编译,并将编译的结果放到target/classes目录下,如下图所示:

如何安装和使用Maven

接下来,我们再编写测试的代码,首先我们依旧按照Maven规范,在src/目录下继续创建test/java目录,然后在编写正式的测试代码之前,让我们先引入JUnit的依赖,我们需要将pom.xml进行如下修改:

<!-- 添加在 project 根元素下 -->
<dependencies>
	<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
	</dependency>
</dependencies>

然后我们就可以编写我们的测试代码了,我们在src/test/java/目录下,创建demo/SumTest.java文件,并写入以下内容:

package demo;

import org.junit.Test;
import static com.butterfly.maven.demo.Sum.sum;
import static org.junit.Assert.assertEquals;

public class SumTest {

  @Test
  public void testSum() {
    assertEquals(10, sum(new int[]{1, 2, 3, 4}));
  }

}

然后我们在根目录下开启终端,并运行mvn clean test指令(第一次运行同样会下载一些插件,这里也省略了这些下载输出),可以在终端中得到以下信息:

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.butterfly.maven:demo >----------------------
[INFO] Building a demo maven project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo ---
[INFO] Deleting D:\Temp\maven\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo ---
[INFO] Surefire report directory: D:\Temp\maven\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running demo.SumTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.091 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.166 s
[INFO] Finished at: 2020-10-02T22:17:30+08:00
[INFO] ------------------------------------------------------------------------

根据输出可以发现,执行mvn clean test同样也执行了mvn clean compile中的cleanresourcescompile这三个指定,不同的是,这里还多了对测试包中进行的三个操作,分别是testResourcestestCompiletest,随后打印了执行单元测试后的输出,可以发现执行了一个测试(即为我们建立的testSum测试方法),并且没有失败的测试。

注意

对于不同版本的Maven,在第一次执行上述操作的时候,可能会有关于JDK版本方面的报错,提示我们编译版本过低,这时就需要在pom.xml中添加如下配置:

<!-- 添加在 project 根元素下 -->
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

此外,由于Maven在安装依赖时,默认是从国外网址下载,因此为了加快下载速度,我们需要配置国内的镜像,这时我们就需要对settings.xml文件进行修改,这里建议在修改之前做一个备份。打开settings.xml后,通过查找找到mirrors标签,然后在内部添加如下配置即可:

<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>    
</mirror>

还有一点需要注意的是,所有的依赖包默认下载的位置是~/.m2/repository,这里的~代表的个人的用户目录,对我而言就是对应C:/Users/zjw/.m2/repository。因此,如果不想将jar包放在 C 盘,就需要和mirrors同级,然后加入以下配置:

<localRepository>D:/jar</localRepository>

这样,所有的依赖都会保存在D:/jar目录下了。

打包及运行

Maven里,我们只要通过mvn clean package命令就可以对项目进行打包了(默认打包类型为jar),我们在cmd中输入以上指令,可以得到下面的输出(省略了和以上指令中相同的前几个输出):

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo ---
[INFO] Building jar: D:\Temp\maven\target\demo-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

执行完毕后,我们就可以在target/目录下发现我们生成的jar包了。此外,如果我们想要像引用其它jar包一样,在其它的项目中引入我们自己的jar包也是可以的,但是如果每次都要将jar包一个一个地复制到其他项目中是非常麻烦的,但是通过Maven,我们只需要一个mvn clean install命令就可以将当前项目的jar包安装到本地仓库:

可以发现和mvn clean package相比,又多了如下几行输出:

[INFO] --- maven-install-plugin:2.4:install (default-install) @ demo ---
[INFO] Installing D:\Temp\maven\target\demo-1.0-SNAPSHOT.jar to D:\jar\com\butterfly\maven\demo\1.0-SNAPSHOT\demo-1.0-SNAPSHOT.jar
[INFO] Installing D:\Temp\maven\pom.xml to D:\jar\com\butterfly\maven\demo\1.0-SNAPSHOT\demo-1.0-SNAPSHOT.pom

按照信息,我们可以知道,我们生成的jar包被保存在了D:/jar/com/butterfly/maven/demo/1.0-SNAPSHOT/目录下,我们可以打开文件资源管理器进行验证:

如何安装和使用Maven

这样,我们就可以在其它项目中,通过以下配置来引用我们自己的jar包了:

<dependency>
  <groupId>com.butterfly.maven</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

不过,到目前为止,我们仍然没有运行主代码中的main函数部分,由于默认生成的jar包中缺少manifest配置,因此上文生成的jar包并没有办法直接运行,为了生成能够执行的jar包,我们还需要在pom.xml加入以下配置:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>1.2.1</version>
	<executions>
		<execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.                   
          	shade.resource.ManifestResourceTransformer">       					
          	<mainClass>com.butterfly.maven.demo.Sum</mainClass>
          </transformer>
        </transformers>
      </configuration>
		</execution>
	</executions>
</plugin>

再次执行mvn clean install命令,可以发现target/目录下有两个jar包:

如何安装和使用Maven

其中orgin开头的jar包则对用我们之前无法直接执行的jar包,另外一个则是可以直接执行的,我们可以进行测试:

如何安装和使用Maven

关于如何安装和使用Maven就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI