Maven笔记(一):基础使用【记录】
Maven笔记(一)-基础使用
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
- 提供了一套标准化的项目结构
Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用。

- 提供了一套标准化的构建流程(编译,测试,打包,发布……)

- 提供了一套依赖管理机制
依赖管理其实就是管理你项目所依赖的第三方资源 (jar包、插件…)
- 以前的操作流程: 需要手动去导入jar包,过程非常繁琐

- 使用Maven管理jar包:
Maven 使用标准的坐标配置来管理各种依赖,只需要简单的配置就可以完成依赖管理

常见的项目构建工具使用占比情况:

一、Maven简介
官网:https://maven.apache.org/
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
1.1 Maven模型

- 项目对象模型
每个项目在 pom.xml 文件中都有自己的唯一标识。
- 依赖管理模型
- 插件(plugin)
打包插件、编译插件…
1.2 Maven仓库
- 仓库的分类:
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球开源唯一的仓库,地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库,存放一些含有版权的Jar

当项目中 pom.xml 使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包,如果有,则在项目直接引用;如果没有,则去中央仓库中下载对应的jar包到本地仓库。
还可以搭建远程仓库,将来jar包的查找顺序则变为:本地仓库 -> 远程仓库 -> 中央仓库
二、Maven安装配置
Maven安装直接进入官网进行下载(下载地址:http://maven.apache.org),选择zip格式的压缩文件,解压后即可使用。
解压出来之后的Maven工具目录结构如下:

2.1 配置Maven环境变量
- 环境变量设置中的 系统变量中添加MAVEN_HOME

- 在系统变量里的Path变量内部添加MAVE_HOME

- 打开CMD终端测试配置情况
命令:mvn -version

2.2 配置Maven 本地仓库
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ****标签内容。为 标签指定目录文件夹,用于存放依赖。

注:Maven本地仓库在配置前都会有一个默认仓库地址C:/用户/super/.m2/repository。默认仓库地址是在C盘下,所有这里建议调整一下。
2.3 配置阿里云私服
私服的配置是为了提高项目中jar包的下载速度,阿里云私服对于中央仓库来说下载速度更快。
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ** **标签内容。

<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
三、Maven基本使用
3.1 Maven的常用命令
**PS:**这里简单的创建了一个Mavn项目,然后通过执行下面命令查看执行效果:

- MavenTest类中代码
package org.myself;public class MavenTest {public static void main(String[] args) {System.out.println("Hello World ~~!");}
}
- TestMaven :test文件夹下的测试类代码
package org.myself;
import org.junit.Test;
public class TestMaven {@Testpublic void testAAA(){System.out.println("======== Maven test 执行~!========");}
}
- 项目中 pom.xml 文件中内容
<?xml version="1.0" encoding="UTF-8"?>
<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>org.myself</groupId><artifactId>maven_demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!-- 导入依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency></dependencies><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.10</version><configuration><!--<includes><include>**\*</include></includes>--><!--<skipTests>true</skipTests>--></configuration></plugin></plugins></build></project>
执行命令时,需要cmd到对应项目中 pom.xml 所在目录下进行命令操作
在Maven项目目录下( pom.xml 文件所在目录层级中),进入cmd命令终端,然后执行下列命令。
mvn compile编译命令
在项目目录下,执行 mvn compile 命令后会对项目进行编译操作,首先Maven工具会去自动下载需要用到的编译插件。然后会在私服/中央仓库中 下载 pom.xml 文件中所依赖jar 到本地仓库中。

编译完成之后,项目文件夹中会增加一个 target 文件目录,该文件中就存放了当前项目编译后的 java.class 字节码文件。
mvn clean清理
清理命令主要作用是用来删除 执行编译命令 mvn compile时所生成的 target文件。同时Maven也会自动去下载一些clean插件。

mvn test测试
用于执行项目中 test文件目录下的 Java 测试代码,会在控制台中对应输出测试类中的打印数据。

mvn package打包命令
主要作用是将项目代码编译成class文件,然后打包生成对应的jar包 (java项目打成jar包 / Web项目打成war包 [后续介绍]),项目目录中同样会生成一个 target文件目录,该target文件中就存放了打包生成的jar文件。
同样执行命令时,Maven会自动下载打包所需要的插件。

mvn install安装
命令作用是将当前项目,安装到本地仓库中,然后本地仓库中就会对应生成该项目的jar包。


3.2 Maven的生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项目构建的生命周期划分为3套,分别为 clean、default、site:
- clean:清理工作

- default:核心工作
例如编译、测试、打包、安装等。

- site:产生报告,发布站点等

同一生命周期内,执行后边的命令,前边的所有命令会自动执行。
default 构建生命周期 (除了几个常用命令,其余大部分命令都很少使用到)
- validate(校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
- initialize(初始化):初始化构建状态,比如设置属性值。
- generate-sources(生成源代码):生成包含在编译阶段中的任何源代码。
- process-sources(处理源代码):处理源代码,比如说,过滤任意值。
- generate-resources(生成资源文件):生成将会包含在项目包中的资源文件。
- process-resources (处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
- compile(编译):编译项目的源代码。
- process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
- generate-test-sources(生成测试源代码):生成包含在编译阶段中的任何测试源代码。
- process-test-sources(处理测试源代码):处理测试源代码,比如说,过滤任意值。
- generate-test-resources(生成测试资源文件):测试创建资源文件。
- process-test-resources(处理测试资源文件):复制和处理测试资源到目标目录。
- test-compile(编译测试源码):编译测试源代码到测试目标目录.
- process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
- test(测试):使用合适的单元测试框架运行测试(Juint是其中之一)。
- prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
- **package(打包):**将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
- pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
- integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
- post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
- verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
- install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
- deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。
四、IDEA 配置 Maven
- 选择 IDEA 中 File --> Settings
- 搜索 maven( 在Build… -> Build Tools -> Maven 中设置)
- 设置IDEA 使用本地安装的maven,并修改配置文件路径

4.1 Maven坐标
Maven坐标上资源的唯一标识,使用坐标来定义项目或者引入项目中需要的依赖。
- Maven 坐标的主要成分
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写 eg:com.item)
- artifactId:定义当前Maven项目名称(通常是模块名称 eg:order-server、goods-server)
- version:定义当前项目版本号
eg:项目定义坐标

eg:项目引入坐标

4.2 Maven项目中打印输出乱码解决方案
- Help --> Edit Custom Vm Options 中添加 Dfile.encoding = utf-8

- File --> Settings --> File Encodings 中的三个选项设置为 UtF-8

- File --> Setting --> Runner 中的 VM Options 设置为:-Dfile.encoding=GB2312

五、Maven 依赖管理
5.1 使用坐标导入jar
5.1.1 使用坐标导入jar包
- 中 pom.xml 中编写 标签
- 在 标签中使用 引入坐标
- 定义坐标的 groupId, artifactId,version
- 点击刷新按钮,使坐标生效

5.1.2 使用坐标导入jar包 - 快捷方式
- 中 pom.xml 中 按 alt + insert ,选择 Dependency

- 中弹出的面板中搜索对应坐标,然后双击选中对应坐标

- 点击刷新按钮,使坐标生效
5.1.3 自动导入设置,不需要中每次都进行手动刷新
- 选择 IDEA 中 File --> Settings
- 中弹出的面板中点击 Build Tools
- 选择 Any changes ,点击ok即可生效

5.2 依赖范围
通过设置坐标的范围(scope),可以设置对应 jar 包的作用范围: 编译环境、测试环境、运行环境

| 依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
|---|---|---|---|---|
| compile | Y | Y | Y | logback |
| test | - | Y | - | Junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | jdbc驱动 |
| system | Y | Y | - | 存储中本地的jar |
| impotr | 引入 DependencyManagement |
相关文章:
Maven笔记(一):基础使用【记录】
Maven笔记(一)-基础使用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构 Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使…...
[vulnhub] Jarbas-Jenkins
靶机链接 https://www.vulnhub.com/entry/jarbas-1,232/ 主机发现端口扫描 扫描网段存活主机,因为主机是我最后添加的,所以靶机地址是135的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-21 14:03 CST Nmap scan…...
js设计模式(26)
js设计模式(26) JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表: 一、创建型模式 这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。 工厂模…...
数据库中, drop、delete与truncate的区别?
在数据库中,drop、delete和truncate都可以用于删除数据,但它们之间有以下区别: 一、作用对象 drop:可以删除数据库对象,如表、视图、索引、存储过程等。例如:DROP TABLE table_name;可以删除名为 table_na…...
2024年项目经理不能错过的开源项目管理系统大盘点:全面指南
在2024年,随着项目管理领域的不断发展,开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统,帮助项目经理们找到最佳选择,不容错过。 在项目管理日益复杂的今天,开源项…...
MATLAB基本语句
MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规…...
委托的注册及注销+观察者模式
事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…...
Jetpack02-LiveData 数据驱动UI更新(类似EventBus)
前提 LiveData使用了Lifecycle的生命周期,阅读本文前,请先了解Lifecycle源码。 简介 LiveData本质是数据类型,当改变数据的时候,会通知观察者,且只在界面可见的时候才会通知观察者。只能在主线程注册观察者…...
Redis 的 Java 客户端有哪些?官方推荐哪个?
Redis 官网展示的 Java 客户端如下图所示,其中官方推荐的是标星的3个:Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中,Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较: Jedis: 线程安全&…...
工作笔记20240927——vscode + jlink调试
launch.json的配置,可以用的 {"name": "Debug","type": "cppdbg","request": "launch","miDebuggerPath": "./arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g…...
Python | Leetcode Python题解之第433题最小基因变化
题目: 题解: class Solution:def minMutation(self, start: str, end: str, bank: List[str]) -> int:if start end:return 0def diffOne(s: str, t: str) -> bool:return sum(x ! y for x, y in zip(s, t)) 1m len(bank)adj [[] for _ in ra…...
opengauss使用遇到的问题,随时更新
一、查看数据库状态的方式 1、gs_ctl -D /opt/huawei/install/data/dn/ status 2、gs_om -t status --detail 3、cm_ctl query -Cv二、opengauss打印WDR性能报告 1、开启WDR性能参数开关 gs_guc reload -N all -D /opt/huawei/install/data/dn -c "enable_wdr_snap…...
从环境部署到开发实战:消息队列 RocketMQ
文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…...
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版
文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…...
渗透测试-文件上传绕过思路
文件上传绕过思路 引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#x…...
等保测评中的密码学应用分析
等保测评中密码学应用的分析 等保测评(信息安全等级保护测评)是中国信息安全领域的一项重要活动,旨在评估信息系统的安全性,并根据评估结果给予相应的安全等级。在等保测评中,密码学应用分析是评估信息系统安全性的关键…...
LCR 007. 三数之和
文章目录 1.题目2.思路3.代码 1.题目 LCR 007. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c *,*使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1:…...
【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)
1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title></title><link rel"s…...
STL迭代器标签
STL(标准模板库)迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性,比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括: Input Iterator:只读迭代器,可以顺…...
容器学习之SparseArray源码解析
1、SparseArray是android sdk 提供集合类,主要用来替换key 为int类型,value为Object类型的Hashmap 2、SparseArray和HashMap相比优缺点: 优点: 1、SparseArray存在一个int[]keys, 因此避免自动装箱 2、SparseArray扩容时只需要数…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
