一、安装moven
1、下载maven包
首先到maven官网下载安装包,解压到本地目录,然后配置环境变量。
maven下载地址:https://maven.apache.org/download.cgi
2、配置环境变量
然后打开环境变量,添加 MAVEN_HOME
系统变量,并且在PATH中添加 %MAVEN_HOME%\bin
。
3、验证
接下里可以打开cmd,执行mvn -v
,如果能打印出maven的版本信息,那么说明已经配置成功!
安装maven前,我们需要保证本机上已经安装了jdk,可以运行
java -version
,如果看到java的包信息,则说明java已经正确配置。
并且,我们还需要保证环境变量中已经正确配置了JAVA_HOME
变量,可以运行echo %JAVA_HOME%
,如果能正确打印出java包的地址则说明配置正常。
二、指定本地仓库
maven安装完成后,下载的所有第三方以来包,都会保存在一个本地仓库中,仓库地址默认是${user.home}/.m2/repository
,其中${user.home}
是当前系统用户的目录,一般这个目录会在C盘
,考虑到后期可能第三方以来可能会很多,建议把仓库修改到其他空间更大的盘符。
打开maven安装目录\conf\settings.xml
,搜索localRepository
,我们看到默认有被注释的本地仓库地址配置代码
这里设置仓库地址是:D:\maven\repository
注意所有用到的路径,都需要使用 非中文 的路径。
三、设置阿里云镜像仓库地址
当我们本地没有需要的jar包时,就需要到远程仓库去下载,默认的仓库是在国外下载很慢,这里我们可以设置成国内的阿里云镜像仓库。
打开maven安装目录\conf\settings.xml
,搜索<mirrors>
,注释原来的<mirror>
标签,然后在内部写入下面的仓库配置:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
四、配置JDK版本
找到 <profiles></profiles>
标签,在最下面配置上maven编译环境、jdk环境等配置
<profile>
<id>jdk-dev</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>20.0</jdk>
</activation>
<properties>
<maven.compiler.source>20.0</maven.compiler.source>
<maven.compiler.target>20.0</maven.compiler.target>
<maven.compiler.compilerVersion>20.0</maven.compiler.compilerVersion>
</properties>
</profile>
五、坐标
1、基本概念
maven中的每一个jar包,都可以用坐标来定位到。坐标包含三个元素,groupid、artifactid、version。
例如:
- groupid:
com.arguigu.maven
- artifactid:
pro01-atguigu-maven
- version:
1.0-SNAPSHOT
2、坐标和仓库中的jar包的存储路径之间的对应关系
坐标:
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
上面坐标对应的 jar 包在 Maven 本地仓库中的位置:
Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar
一定要学会根据坐标到本地仓库中找到对应的 jar 包。
六、创建项目
1、步骤
执行命令:mvn archetype:generate
,接下来是这样的过程:
- 首先会下载各种包,我们可以看到下载的时候是从设置的
mirror
阿里云镜像仓库下载。 - 下载完成后,会让你选择
archetype
的安装模式,系统默认是选择的模式7
,快速创建模式。
- 然后输入
groupid:com.atguigu.maven
- 输入
artifactId:pro01-maven-java
,version
和package
默认,直接回车就行。
- 安装成功,界面打印如下:
控制台打印出项目路径:groupid、package、artifactid、packageName、version。
项目目录会自动生成项目的初始代码:
安装过程中下载的包,会被放到本地仓库中:
2、pom.xml解读
默认生成的项目pom.xml
文件中,junit
版本是3.8.1
有点低,我们改成4.12
版本(4.x版本支持@test)。
<!--project 标签:根标签,表示对当前工程进行配置、管理-->
<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 标签:从maven2开始就固定4.0.0-->
<!--表示pom.xml所采用的标签结构。-->
<modelVersion>4.0.0</modelVersion>
<!--坐标信息:-->
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前Maven工程的打包方式,可选值有下面三种: -->
<!-- jar:表示这个工程是一个Java工程 -->
<!-- war:表示这个工程是一个Web工程 -->
<!-- pom:表示这个工程是“管理其他工程”的工程 -->
<packaging>jar</packaging>
<name>pro01-maven-java</name>
<url>http://maven.apache.org</url>
<properties>
<!-- 工程构建过程中读取源码时使用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 当前工程所依赖的jar包 -->
<dependencies>
<!-- 在dependency标签内使用具体的坐标依赖我们需要的一个jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- scope标签配置依赖的范围 -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
自动生成的App.java
和AppTest.java
可以删除。
pom.xml是maven工程下的核心文件,学习pom.xml的配置对于maven的学习非常重要。
七、核心概念:POM
1、含义
POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现。
2、 模型化思想
POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。我们在开发过程中,最基本的做法就是将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算与现实事物相关的数据。
3、 对应的配置文件
POM 理念集中体现在 Maven 工程根目录下 pom.xml 这个配置文件中。所以这个 pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用。
八、目录结构
还有一个target目录是用于存放构建操作输出的结果。
1、约定目录结构的意义
Maven 为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。
2、约定大于配置
Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦。
目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码。
九、命令
//删除target目录
mvn clean
//主程序编译
mvn compile
//测试程序编译
mvn test-compile
//主体程序编译结果存放的目录:target/classes
//测试程序编译结果存放的目录:target/test-classes
//测试操作
mvn test
//测试的报告存放的目录:target/surefire-reports
//打包操作
mvn build
十、测试
1、创建测试类
创建Calculator
类,路径:\pro01-maven-java\src\main\java\com\atguigu\maven
package com.alex.maven;
public class Calculator {
public int sum(int i, int j){
return i + j;
}
}
创建CalculatorTest
类,路径:\pro01-maven-java\src\test\java\com\atguigu\maven
package com.alex.maven;
import org.junit.Test;
import com.alex.maven.Calculator;
// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;
public class CalculatorTest{
@Test
public void testSum(){
// 1.创建Calculator对象
Calculator calculator = new Calculator();
// 2.调用Calculator对象的方法,获取到程序运行实际的结果
int actualResult = calculator.sum(5, 3);
// 3.声明一个变量,表示程序运行期待的结果
int expectedResult = 8;
// 4.使用断言来判断实际结果和期待结果是否一致
// 如果一致:测试通过,不会抛出异常
// 如果不一致:抛出异常,测试失败
assertEquals(expectedResult, actualResult);
System.out.println("test method have been called:CalculatorTest");
}
}
2、测试成功
新建完成上述两个类之后,我们在根目录下运行mvn test
,控制台会打印测试结果。上述代码使用assertEquals
断言,判断sum(5,3)
计算结构是否和8
一直,显然是正确的。
3、测试失败
如果我们把calculator.sum(5, 3)
改成calculator.sum(5, 30)
,这时候显然是不正确,我们再看控制台打印的报错信息:
我们可以看到,代码中明确提示期望要8,但是给了35,错误原因一目了然。
常见报错处理
1、编译报错
在执行mvn compile
命令时,控制台报错如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project pro01-maven-java: Fatal error compiling: 閿欒: 鏃犳晥鐨勭洰鏍囧彂琛岀増锛?0.0 -> [Help 1]m
这是由于当前maven
的版本和maven-compiler-plugin
的版本不匹配导致的,可以到 maven在线仓库 查看已有的版本,选择自己maven适合的版本,然后修改pom.xml
文件中build>plugin
配置。
例如:
<build>
<!-- 打jar包插件-->
<plugins>
<!--修改maven-compiler-plugin版本-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>20</source><!--jdk大版本号-->
<target>20</target><!--jdk大版本号-->
</configuration>
</plugin>
</plugins>
</build>
编译成功时,控制台打印如下:
参考阅读:
https://blog.csdn.net/sgsgkxkx/article/details/123415521
B站教学视频