maven基础教程

一、安装moven

1、下载maven包

首先到maven官网下载安装包,解压到本地目录,然后配置环境变量。
maven下载地址:https://maven.apache.org/download.cgi
maven基础教程_第1张图片

2、配置环境变量

然后打开环境变量,添加 MAVEN_HOME 系统变量,并且在PATH中添加 %MAVEN_HOME%\bin
maven基础教程_第2张图片

maven基础教程_第3张图片

3、验证

接下里可以打开cmd,执行mvn -v,如果能打印出maven的版本信息,那么说明已经配置成功!
maven基础教程_第4张图片

安装maven前,我们需要保证本机上已经安装了jdk,可以运行java -version,如果看到java的包信息,则说明java已经正确配置。
并且,我们还需要保证环境变量中已经正确配置了JAVA_HOME变量,可以运行 echo %JAVA_HOME%,如果能正确打印出java包的地址则说明配置正常。

maven基础教程_第5张图片

二、指定本地仓库

maven安装完成后,下载的所有第三方以来包,都会保存在一个本地仓库中,仓库地址默认是${user.home}/.m2/repository,其中${user.home}是当前系统用户的目录,一般这个目录会在C盘,考虑到后期可能第三方以来可能会很多,建议把仓库修改到其他空间更大的盘符。
打开maven安装目录\conf\settings.xml,搜索localRepository,我们看到默认有被注释的本地仓库地址配置代码
maven基础教程_第6张图片
这里设置仓库地址是:D:\maven\repository
maven基础教程_第7张图片

注意所有用到的路径,都需要使用 非中文 的路径。

三、设置阿里云镜像仓库地址

当我们本地没有需要的jar包时,就需要到远程仓库去下载,默认的仓库是在国外下载很慢,这里我们可以设置成国内的阿里云镜像仓库。

打开maven安装目录\conf\settings.xml,搜索,注释原来的标签,然后在内部写入下面的仓库配置:

<mirror>
	<id>nexus-aliyunid>
	<mirrorOf>centralmirrorOf>
	<name>Nexus aliyunname>
	<url>http://maven.aliyun.com/nexus/content/groups/publicurl> 
mirror>

maven基础教程_第8张图片

四、配置JDK版本

找到 标签,在最下面配置上maven编译环境、jdk环境等配置

<profile>
	 <id>jdk-devid>
	 <activation>
		<activeByDefault>trueactiveByDefault>
		<jdk>20.0jdk>
	 activation>
	 <properties>
		<maven.compiler.source>20.0maven.compiler.source>
		<maven.compiler.target>20.0maven.compiler.target>
		<maven.compiler.compilerVersion>20.0maven.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.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>

上面坐标对应的 jar 包在 Maven 本地仓库中的位置:

Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

一定要学会根据坐标到本地仓库中找到对应的 jar 包。

六、创建java工程

1、创建步骤

执行命令:mvn archetype:generate,接下来是这样的过程:

  1. 首先会下载各种包,我们可以看到下载的时候是从设置的mirror阿里云镜像仓库下载。
  2. 下载完成后,会让你选择archetype的安装模式,系统默认是选择的模式7,快速创建模式。
    maven基础教程_第9张图片
  3. 然后输入groupid:com.atguigu.maven
  4. 输入artifactId:pro01-maven-javaversionpackage默认,直接回车就行。
    maven基础教程_第10张图片
  5. 安装成功,界面打印如下:
    maven基础教程_第11张图片
    控制台打印出项目路径:groupid、package、artifactid、packageName、version。
    项目目录会自动生成项目的初始代码:
    maven基础教程_第12张图片
    安装过程中下载的包,会被放到本地仓库中:
    maven基础教程_第13张图片

2、pom.xml解读

默认生成的项目pom.xml文件中,junit版本是3.8.1有点低,我们改成4.12版本(4.x版本支持@test)。


<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>com.atguigu.mavengroupId>
  <artifactId>pro01-maven-javaartifactId>
  <version>1.0-SNAPSHOTversion>
  
  
  
  
  
  <packaging>jarpackaging>

  <name>pro01-maven-javaname>
  <url>http://maven.apache.orgurl>

  <properties>
  	
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  properties>
	
  
  <dependencies>
  	
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      
      
      <scope>testscope>
    dependency>
  dependencies>
project>

自动生成的App.javaAppTest.java可以删除。

pom.xml是maven工程下的核心文件,学习pom.xml的配置对于maven的学习非常重要。

3、核心概念:POM

  1. 含义
    POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现。
  2. 模型化思想
    POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。我们在开发过程中,最基本的做法就是将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算与现实事物相关的数据。
  3. 对应的配置文件
    POM 理念集中体现在 Maven 工程根目录下 pom.xml 这个配置文件中。所以这个 pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用。

4、目录结构

maven基础教程_第14张图片
还有一个target目录是用于存放构建操作输出的结果。

  1. 约定目录结构的意义
    Maven 为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。

  2. 约定大于配置
    Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦。

目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码。

5、常用命令

//删除target目录
mvn clean
//主程序编译
mvn compile

//测试程序编译
mvn test-compile
//主体程序编译结果存放的目录:target/classes
//测试程序编译结果存放的目录:target/test-classes
//测试操作
mvn test
//测试的报告存放的目录:target/surefire-reports
//打包操作
mvn package
//打包的结果——jar 包,存放的目录:target
//打包操作
mvn build

6、测试

  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");
		
	}
	
}

  1. 测试成功
    新建完成上述两个类之后,我们在根目录下运行mvn test,控制台会打印测试结果。上述代码使用assertEquals断言,判断sum(5,3)计算结构是否和8一直,显然是正确的。
    maven基础教程_第15张图片
  2. 测试失败
    如果我们把calculator.sum(5, 3)改成calculator.sum(5, 30),这时候显然是不正确,我们再看控制台打印的报错信息:
    maven基础教程_第16张图片
    我们可以看到,代码中明确提示期望要8,但是给了35,错误原因一目了然。
  3. 测试报告
    测试报告路径:target>suerfire-reports,在这个目录下会保存测试类的测试结果。内容和test命令打印的一致。
    maven基础教程_第17张图片
    在这里插入图片描述

7、打包

运行mvn package命令,生成jar包。
maven基础教程_第18张图片
进入target目录,我们可以看到刚刚打包生成的jar包。
maven基础教程_第19张图片

8、安装

安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。

运行mvn clean install命令,控制台打印:
maven基础教程_第20张图片
红线标记的打印内容,说明了安装最终是生成了pom文件jar包到本地仓库中。这时候我们根据坐标信息,到本地仓库中去寻找刚刚安装的jar包,就可以找到内容。
maven基础教程_第21张图片
我们看到,本地仓库中生成了两个坐标信息规则生成的*.pom文件和*.jar文件。*.pom文件和maven项目中的pom.xml的内容是一模一样。

七、创建web工程

1、步骤

mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DarchetypeVersion=1.4 \
-DgroupId=com.atguigu.maven \
-DartifactId=pro02-maven-web \

2、目录结构

执行命令后,生成的项目目录如下:
maven基础教程_第22张图片

3、pom.xml文件



<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>com.atguigu.mavengroupId>
  <artifactId>pro02-maven-webartifactId>
  <version>1.0-SNAPSHOTversion>
  
  <packaging>warpackaging>

  <name>pro02-maven-web Maven Webappname>
  
  <url>http://www.example.comurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
  properties>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>
  dependencies>
  <build>
	...
  build>
project>

4、创建servlet

  1. 首先在main目录下创建如下结构的文件目录:
    maven基础教程_第23张图片
  2. 并创建一个HelloServlet.java文件,代码如下:
package com.alex.maven;
	
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
	
public class HelloServlet extends HttpServlet{
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.getWriter().write("hello maven web");
		
	}
	
}

  1. 在 web.xml 中注册 Servlet
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.alex.maven.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>

</web-app>
  1. src\main\webapp\index.jsp 页面编写超链接

<html>
	<body>
		<h2>Hello World!h2>
		<a href="helloServlet">Access Servleta>
	body>
html>
  1. 编译
    此时执行 mvn compile 命令,控制台会报错:
DANGER
程序包 javax.servlet.http 不存在
程序包 javax.servlet 不存在
找不到符号
符号:HttpServlet
...

我们的 Web 工程用到了 HttpServlet 这个类,而 HttpServlet 这个类属于 servlet-api.jar 这个 jar 包。此时我们说,Web 工程需要依赖 servlet-api.jar 包。我们需要到 maven官方仓库 找下servlet-api这个jar包,找到合适的版本,然后在pom.xml中添加对这个包的依赖。
maven基础教程_第24张图片
maven基础教程_第25张图片
我们看到最新的版本是4.0.1,我们在pom.xml中添加依赖版本4.0.1,配置如下:


<dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>4.0.1version>
    <scope>providedscope>
dependency>

这时候,我们再进行编译:mvn clean compile

常见报错处理

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>
		
		<plugins>
			
			<plugin>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.11.0version>
                <configuration>
                    <source>20source>
                    <target>20target>
                configuration>
            plugin>
 
		plugins>
	build>

编译成功时,控制台打印如下:
maven基础教程_第26张图片

参考阅读:
https://blog.csdn.net/sgsgkxkx/article/details/123415521
B站教学视频

你可能感兴趣的:(maven,java)