maven基础教程

news2024/12/26 23:43:22

一、安装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,接下来是这样的过程:

  1. 首先会下载各种包,我们可以看到下载的时候是从设置的mirror阿里云镜像仓库下载。
  2. 下载完成后,会让你选择archetype的安装模式,系统默认是选择的模式7,快速创建模式。
    在这里插入图片描述
  3. 然后输入groupid:com.atguigu.maven
  4. 输入artifactId:pro01-maven-javaversionpackage默认,直接回车就行。
    在这里插入图片描述
  5. 安装成功,界面打印如下:
    在这里插入图片描述
    控制台打印出项目路径: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.javaAppTest.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站教学视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM-jvisualvm性能监控可视化工具使用与eden-s0-s1分配分析

目录 第一步&#xff1a;安装jvisualvm 第二步&#xff1a;安装VisualvmGc插件 方式一&#xff1a;jvisualvm工具直接下载安装 方式二&#xff1a;去官网下载导入安装 总结 第三步&#xff1a;idea安装VisualvM Launcher插件 第四步&#xff1a;演示young中eden、s0、s1垃…

轻量级数据交换格式:jsoncpp

"这不属于我&#xff0c;因为沉默背后&#xff0c;也有冲动" 一、认识json (1) 为什么有那么多的数据交换格式&#xff1f; 比如说&#xff0c;现在我有下面的数据: #include <iostream> #include <string>int main() {std::string name "张三&q…

比较两个突出的node.js框架:koa和express

目录 一、Koa 和 Express 的介绍 二、Koa 和 Express 的区别 1.异步编程方式不同 2.错误处理方式不同 三、Koa 和 Express 的优缺点 1.Express 的优点 2.Express 的缺点 3.Koa 的优点 4.Koa 的缺点 总结 接上文讲述了 koa框架&#xff0c;这边文章比较一下这两个突出…

CentOS系统忘记密码了改怎么修改重置103.88.34.X

首先&#xff0c;打开centos7&#xff0c; 在正常系统入口按↑和↓"e"&#xff0c;会进入edit模式 然后找到以“Linux16”开头的行&#xff0c;在该行的最后面输入“init/bin/sh” 按下ctrlx组合键来启动系统 接下来再输入“mount -o remount,rw /”(注意mount与…

ceph对象存储使用总结

ceph对象存储使用总结 大纲 基础概念安装对象存储网关RADOS网关配置对象存储网关RADOS网关修改RADOS网关端口修改支持https访问RADOS网关使用s3cmd操作对象存储Ceph dashboard管理RADOS网关使用java程序操作对象存储 基础准备 操作系统 ubuntu~18.04ceph版本 Octopus v15.2…

适用于 3DS Max 和 Cinema 4D 的 Chaos Corona 10重磅推出!

Chaos 发布了 Corona 10&#xff0c;适用于3DS Max和Cinema 4D 的渲染器的最新版本 &#xff01;Corona 10 对软件的多项现有功能进行了更新&#xff0c;包括贴花、体积渲染、景深和程序云。 目前渲云云渲染已支持Corona 10&#xff0c;支持批量渲染&#xff0c;批量出结果&am…

chatgpt赋能python:介绍Python语言

介绍Python语言 Python是一门易学易用的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括数据科学、机器学习、人工智能、Web开发等。自1991年首次推出以来&#xff0c;Python不断演进和发展&#xff0c;如今已经成为行业内一种不可或缺的编程语言。它在可读性和语…

chatgpt赋能python:Python词汇量为什么很重要?

Python词汇量为什么很重要&#xff1f; 作为一个有10年Python编程经验的工程师&#xff0c;我有着非常深刻的体会&#xff0c;词汇量对于掌握这门编程语言来说是非常重要的。在这篇文章中&#xff0c;我将重点讨论Python词汇量为什么很重要&#xff0c;以及如何提升你的Python…

STM32的五个时钟源

①HSI是高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为8MHz。 ②HSE是高速外部时钟&#xff0c;可接石英/陶瓷谐振器&#xff0c;或者接外部时钟源&#xff0c;频率范围为4MHz~16MHz。 ③LSI是低速内部时钟&#xff0c;RC振荡器&#xff0c;频率为40kHz。 ④LSE是低速外…

2核4G服务器_4M带宽_CPU性能测评_60G系统盘

阿里云2核4G服务器297元一年、4M公网带宽、60G系统盘&#xff0c;阿里云轻量应用服务器2核4G4M带宽配置一年297.98元&#xff0c;2核2G3M带宽轻量服务器一年108元12个月&#xff0c;如下图&#xff1a; 目录 阿里云2核4G4M轻量应用服务器 2核4G服务器限制条件 轻量服务器介…

使用Spring Boot、MyBatis Plus和Elasticsearch的简单示例

下面是一个使用Spring Boot、MyBatis Plus和Elasticsearch的简单示例&#xff1a; 首先&#xff0c;在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elast…

《Pytorch深度学习和图神经网络(卷 1)》学习笔记——第五章

全连接神经网络 隐藏层的节点数决定了模型拟合能力&#xff0c;如果在单隐藏层设置足够多的节点&#xff0c;理论上可以拟合世界上各种维度的数据进行任意规则的分类&#xff0c;但会过拟合。 隐藏层的数量决定了其泛化能力&#xff0c;层数越多&#xff0c;推理的能力越强&am…

【前端工具】使用Echats生成关系图谱,可展开折叠

目录 一、需求背景与效果 二、echarts源码 一、需求背景与效果 根据服务关系制作关系图谱&#xff0c;echarts官方关系图没有想要的案例&#xff0c;网上也没有好的效果&#xff0c;故参考网上已有的部分案例&#xff0c;自行写了一个&#xff0c;效果还不错。 当前echarts…

Centos7单机安装Redis

安装Redis依赖 Redis是基于C语言&#xff0c;因此首先需要安装Redis所需要的gcc依赖&#xff1a; yum install -y gcc tcl ​ 上传安装包并解压 上传安装包redis-6.2.12至/home目录下 ​ # 解压 tar -xzf redis-6.2.12.tar.gz # 安装 cd redis-6.2.12 make && mak…

react ant table设置动态scroll,且某些列的长度固定

设置scroll x的值为列的个数*100 1.代码 const columns [ {title: 料号描述,dataIndex: itemDesc,align:left,width: 200,ellipsis: true,} ]<EditableProTableclassName"details-table"columns{columns}loading{loading}rowKey"id"value{dataSource}…

C++笔记之自引用结构体

C笔记之自引用结构体 code review! 文章目录 C笔记之自引用结构体1.在结构体中引用相同类型的结构体&#xff0c;并且可以使用指针或引用来实现。2.自引用结构体构建链表3.自引用结构体构建二叉树附:代码随想录——链表定义附:代码随想录——二叉树定义 1.在结构体中引用相同…

分布式幂等问题解决方案

目录 一 背景 二 什么是幂等 三 解决方案三部曲 第一部曲&#xff1a;识别相同请求 第二部曲&#xff1a;列出并减少副作用的分析维度 第三部曲&#xff1a;识别细粒度副作用&#xff0c;针对性设计解决方案 四 总结 一 背景 分布式系统由众多微服务组成&#xff0c;微…

从0到1搭建Springboot整合Quartz定时任务框架(保姆级教学+Gitee源码)

前言&#xff1a;最近学习了目前主流的若依框架&#xff0c;这是一个非常优秀的开源项目&#xff0c;故此我这边把它的源码全部剖析了一遍&#xff0c;简化了它的框架&#xff0c;我会通过这篇博客详细讲解我是如何进行推敲和从0到1搭建这个项目的流程。 目录 一、Quartz简介 …

Java并发(十二)----线程应用之多线程解决烧水泡茶问题

1、背景 统筹方法&#xff0c;是一种安排工作进程的数学方法。它的实用范围极广泛&#xff0c;在企业管理和基本建设中&#xff0c;以及关系复杂的科研项目的组织与管理中&#xff0c;都可以应用。 怎样应用呢&#xff1f;主要是把工序安排好。 比如&#xff0c;想泡壶茶喝。…

【前后端分离开发及项目部署流程】

文章目录 前后端分离开发技术1 前后端分离开发1.1 介绍1.2 开发流程1.3 前端技术栈&#xff08;了解&#xff09; 2 Yapi&#xff08;定义API接口&#xff09;2.1 介绍2.2 使用 3 Swagger3.1 介绍3.2 使用方式3.3 常用注解 4 项目部署4.1 部署架构4.2 部署环境说明4.3 部署前端…