Maven:基础知识
Maven
- 概念图
- 生命周期
- 目录
- 工程创建
- 测试
- 常用命令
- COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。
- 问题解决
- pom.xml文件
- properties配置示例
- scope配置详解
概念图

- 依赖管理
- 构建项目
- Maven 的底层核心实现项目的构建和管理必须通过插件完成,但插件本身并不包含在其核心程序当中。
生命周期
在 Maven 中,它拥有三套标准的生命周期,分别为CleanLifeCycle、DefaultLifeCycle 和 SiteLifeCycle 。每一套生命周期互相独立、互不影响。另外,每套生命周期包含一系列的构建阶段,这些阶段是有顺序的,会按照顺序执行(即执行后面的阶段会先自动执行前面的阶段)。
- CleanLifeCycle:清理的生命周期
- DefaultLifeCycle:默认的生命周期
- SiteLifeCycle:站点的生命周期
目录
在 Maven 中,所有文件的存放目录都有明确的约定。标准目录结构如下:
| 目录名 | 含义 |
|---|---|
| 项目根/ | 项目目录根 |
| pom.xml | 项目对象模型(Project Object Model),Maven项目中的文件 |
| src/ | 源代码目录根 |
| main/ | 项目主体目录根 |
| java | 源代码目录 |
| resources | 所需资源目录 |
| filters | 资源过滤文件目录 |
| assembly | Assembly descriptors |
| config | 配置文件目录根 |
| test/ | 项目测试目录根 |
| java | 测试代码目录 |
| resources | 测试所需资源目录 |
| filters | 测试资源过滤文件目录 |
| site | 与site相关的资源目录 |
| target/ | 输出目录根 |
| classes | 项目主体输出目录 |
| test-classes | 项目测试输出目录 |
| site | 项目site输出目录 |
工程创建
创建的工程分为两类:一是Java项目,二是Web项目。创建命令如下:
<1>. Java项目:
mvn archetype:generate -DgroupId=JavaProjectPackage -DartifactId=JavaProjectName -DarchetypeArtifactId=maven-archetype-quickstart
<2>. Web项目:
mvn archetype:generate -DgroupId=WebProjectPackage -DartifactId=WebProjectName -DarchetypeArtifactId=maven-archetype-webapp
其中,属性含义:
-DgroupId:包名
-DartifactId: 项目名
-DarchetypeArtifactId: 项目类型
注: 一定要按照标准目录结构来构建工程。
测试
我们先使用命令行窗口在桌面上对 Maven 项目进行创建。步骤如下:
打开命令行窗口,进入桌面,输入命令:
//1.Java项目
mvn archetype:generate -DgroupId=cn.edu.MavenStudy -DartifactId=MavenJavaProjectTest -DarchetypeArtifactId=maven-archetype-quickstart//2.Web项目
mvn archetype:generate -DgroupId=cn.edu.MavenStudy -DartifactId=MavenWebProjectTest -DarchetypeArtifactId=maven-archetype-webapp
若是第一次创建,需要耐心等待 Maven 下载相应资源到本地仓库上(repository 文件)。如图:

所需的资源,如图:

再创建Web项目,如图:

常用命令
| 命令 | 作用 |
|---|---|
| mvn compile | 编译,将源代码编译成字节码文件(.class) |
| mvn clean | 清除,删除编译的目标文件target |
| mvn test | 测试,运行test包下的单元测试类(其方法名约定为XxxxTest) |
| mvn package | 将项目打包,文件存储在项目根目录的target目录中(Java项目打包成 jar文件,Web项目打包成 war文件) |
| mvn install | 将一个工程打包成 jar文件,存储在本地仓库里 |
| mvn deploy | 若有私服,打包后上传到私服 |
| mvn source:jar | 源码打包 |
| mvn dependency:sources | 下载 jar包的源代码 |
| mvn site | 查看报告和操作流程 |
COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。
在使用命令过程中,遇到了错误,如图:

原因:JDK版本不匹配。
问题解决
首先,打开命令行窗口,输入命令:java -version ,查看版本信息。如图:

找到 Maven/apache-maven-3.8.6/conf 目录下的 settings.xml 文件进行修改配置:
//根据本机JDK版本,添加以下配置:
<profile> <id>jdk-16.0.2</id><activation><activeByDefault>true</activeByDefault><jdk>16</jdk></activation><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>16</maven.compiler.source><maven.compiler.target>16</maven.compiler.target><maven.compiler.compilerVersion>16</maven.compiler.compilerVersion></properties>
</profile>
如图:

再次使用命令,成功执行。如图:

pom.xml文件
pom.xml为当前Maven项目配置文件,定义项目的基本信息,用于描述项目的maven坐标,依赖关系等。
一般情况下,Maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入工程。若要引用项目(已开发完毕并发布到远程仓库),则在pom.xml文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, Maven便会把jar包下载到本地 。接下来,简单介绍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"><!-- 基本配置 --><!-- 声明pom文件遵循POM模型的某个版本(必不可少,且对于Maven2与Maven3只能是4.0.0)--><modelVersion>4.0.0</modelVersion><!-- 定义当前项目隶属的实际项目组 --><groupId>cn.edu.MavenProject</groupId><!-- 定义当前项目的名称,主要区分一个groupId的多个项目 --><artifactId>MavenJavaProject</artifactId><!-- 定义当前项目所处的版本号(SNAPSHOT:测试版本;RELEASE:发布版本)--><version>1.0.0-SNAPSHOT</version><!-- 定义打包的类型(默认为jar,jar:Java项目;war:Web项目;pom:父级项目 )--><packaging>jar</packaging><!-- 定义pom常量,便于在pom中的直接引用 --><properties><demo.version>4.11</demo.version></properties><!-- 定义构件输出的附属构件,有时需要加上classifier才能唯一的确定该构件,否则会报错查找不到 --><classifier>...</classifier><!-- 定义当前项目的依赖关系 --><dependencies><!-- 每个dependency对应着一个jar包 --><dependency><!-- 坐标信息 --><groupId>org.apache.commons</groupId> <!-- 组织名称 --><artifactId>commons-lang3</artifactId> <!-- jar包名称 --><version>3.8.1</version> <!-- 版本号 --><!-- 定义Jar包的使用范围 --><scope>test</scope><!-- 设置指依赖是否可选,默认为false --><optional>false</optional><!-- 屏蔽依赖关系 --><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion></exclusions></dependency></dependencies><!-- 构建配置 --><build><!-- 构件的文件名,默认值为${artifactId}-${version} --><finalName>ProjectName</finalName><!-- 统一管理插件 --><pluginManagement><!-- 使用插件的列表 --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version> <!-- 指定构建生命周期的阶段执行插件的配置 --><executions><execution><!-- 执行目标的标识符,用于标识构建过程中的目标或匹配继承过程中需要合并的执行目标 --><id>execution-id</id><!-- 指定目标的构建生命周期阶段,默认为目标被绑定到源数据里配置的阶段 --><phase>package</phase><!-- 配置的执行目标 --><goals><goal>demo-goal</goal></goals><!-- 配置是否被子POM继承 --><inherited>false</inherited></execution></executions><!-- 是否从该插件下载Maven扩展 --><extensions></extensions></plugin></plugins></pluginManagement></build><!-- 分发配置 --><!-- 执行mvn deploy,将项目生成的构件分发到远程Maven仓库,分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。 --><distributionManagement> <!-- 项目生成的构件到远程仓库所需的信息 --><repository> <!-- 是否设置唯一版本号(由时间戳和构建流水号组成) --><uniqueVersion>true</uniqueVersion><!-- 目标仓库的id --><id>repository-id</id> <!-- 目标仓库的名字 --><name>repository-name</name><!-- 目标仓库的网址 --><url>file://${basedir}/target/deploy</url> </repository><!-- 测试版仓库 --><snapshotRepository><uniqueVersion/><id/> <name/> <url/> </snapshotRepository> </distributionManagement> <!-- 仓库配置 --><!-- 远程仓库列表 --><repositories><!-- 连接远程仓库的信息 --><repository><!-- 处理远程仓库 正式发布版本 的下载 --><release><!-- 是否下载某种类型构件 --><enabled/><!-- 指定更新的频率 --><updatePolicy/><!-- Maven验证构件失败的处理 --><checksumPolicy/></release><!-- 处理远程仓库 快照版本 的下载(快照是一种特殊的版本,指定了某个当前的开发进度的副本) --><snapshots><enabled/><updatePolicy/><checksumPolicy/> </snapshots><!-- 远程仓库唯一标识符,可以匹配settings.xml文件的远程仓库 --><id>repository-id</id> <!-- 远程仓库名称 --><name>repository-name</name><!-- 远程仓库网址(形式为protocol://hostname/path) --><url>repository-url</url><!-- 指定仓库布局类型(default:默认,legacy:遗留) --><layout></layout></repository></repositories>
</project>
properties配置示例
<!-- 定义pom常量,便于在pom中的直接引用 -->
<!-- 示例 -->
<properties><demo.version>4.11</demo.version>
</properties>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${demo.version}</version><scope>test</scope>
</dependency>
scope配置详解
maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
scope值如下:
- compile(编译范围):默认值,表示被依赖项目需要参与项目的编译、测试、运行、打包、发布。
- runtime(运行时范围):表示被依赖项目不参与项目的编译。
- test(测试范围):表示被依赖项目仅参与项目测试相关的工作(包括测试代码的编译和执行,但不会被打包和部署)。
- provided(已提供范围):表示被依赖项目参与项目的编译、测试和运行,而其他依赖由JDK或容器提供。
- system(系统范围):与 provided 相似,但不依赖Maven仓库,而是必须使用systemPath属性指定本地文件系统获取。
相关文章:
Maven:基础知识
Maven概念图生命周期目录工程创建测试常用命令COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。问题解决pom.xml文件properties配置示例scope配置详解概念图 依赖管理构建项目Maven 的底层核心实现项目的构建和管理必须通过插件完成,但插件本身并不包…...
Web 框架 Flask 快速入门(一)flask基础与模板
前言 课程地址:Python Web 框架 Flask 快速入门 文章目录前言🌴 Flask基础和模板🌷 一个简单的flask程序🌼 模板的使用🌴 Flask基础和模板 1、web框架的作用 避免重复造轮子,app程序不必关心于服务器的沟…...
1CN/Jaccard/PA/AA/RA/Katz/PageRank/SimRank
common neighbors(CN) 公共邻居的数量。 Jaccard 用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。 preferential attachment(PA) 节点倾向于连接到节点度较高的节点上,&…...
YOLOv5-Backbone模块实现
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P8周:YOLOv5-Backbone模块实现🍖 作者:K同学啊一、前期准备1.设置GPUimport torch from torch impor…...
【C语言】程序环境和预处理
🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…...
9.关系查询处理和查询优化
其他章节索引 梳理 名词解释 代数优化:是指关系代数表达式的优化,也即按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询更高效物理优化:是指存取路径和底层操作算…...
计算机组成原理(三)
5.掌握定点数的表示和应用(主要是无符号数和有符号数的表示、机器数的定点表示、数的机器码表示); 定点数:小数点位置固定不变。 定点小数:小数点固定在数值位与符号位之间; 定点整数:小…...
C. Least Prefix Sum codeforces每日一题
🚀前言 🚀 大家好啊,这里是幸麟 🧩 一名普通的大学牲,最近在学习算法 🧩每日一题的话难度的话是根据博主水平来找的 🧩所以可能难度比较低,以后会慢慢提高难度的 🧩此题标…...
ASEMI三相整流模块MDS100-16图片,MDS100-16尺寸
编辑-Z ASEMI三相整流模块MDS100-16参数: 型号:MDS100-16 最大重复峰值反向电压(VRRM):1600V 最大RMS电桥输入电压(VRMS):1700V 最大平均正向整流输出电流(IF&#…...
【第37天】斐波那契数列与爬楼梯 | 迭代的鼻祖,递推与记忆化
本文已收录于专栏🌸《Java入门一百例》🌸学习指引序、专栏前言一、递推与记忆化二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题1】1、题目描述2.解题思路3、模板代码4、代码解析5、原题链接三、推荐专栏四、课后习题序…...
Map集合
Map集合 Map接口的简介 Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。 Map 没有继承 Collection 接口,…...
PyQt5编程扩展 3.2 资源文件的使用
目录 本例运行效果: 设计Qt窗体 建立项目 放一个Group Box 放三个Label 放一个Horizontal Slider 放两个Line Edit 层次结构 布局 放一个Group Box 放两个Label 放两个Line Edit 放一个Push Button 层次结构 布局 放一个frame 层次结构 布局 窗体…...
Linux系统之文件共享目录设置方法
Linux系统之文件共享目录设置方法一、本次实践目的二、检查本地系统环境1.检查系统版本2.检查系统内核三、创建相关用户及用户组1.创建共享目录2.创建测试用户账号3.创建用户组4.设置用户的属组5.查看admin和IT用户组成员6.查看所有用户信息四、共享目录权限设置1.设置/data/so…...
上海亚商投顾:三大指数均涨超1% 芯片板块集体大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪三大指数今日低开高走,午后集体涨超1%,创业板指盘中涨超1.7%。芯片板块集体大涨,…...
Harbor私有仓库部署与管理
目录 前言 一、Harbor概述 二、Harbor 的特性 三、Harbor的构成 四、Harbor构建Docker私有仓库 1、环境配置 2、案例需求 3、部署Harbor服务 3.1、部署docker compose服务 3.2 下载或上传Harbor安装程序 3.3、启动Harbor 3.4、查看Harbor启动镜像 4、物理机访问se…...
互联网架构之 “高可用” 详解
一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行…...
分布式高级篇4 —— 商城业务(2)
一、订单服务1、订单基本概念2、订单基本构成3、订单状态4、订单流程5、配置拦截器拦截订单请求6、订单确认页模型抽取7、订单确认页vo封装8、Feign 远程调用请求头丢失问题\*\*\*\*\* 惨痛教训9、Feign 异步调用请求头丢失问题10、查看库存状态11、模拟计算运费12、接口幂等性…...
二分查找基本原理
二分查找基本原理1.二分查找1.1 基本概念1.2 二分查找查找步骤1.2.1 中间索引不能整除,取整数作为中间索引1.2.2 索引不能整除,整数1作为中间索引1.3 二分查找大O记法表示2. 二分查找代码实现1.二分查找 1.1 基本概念 二分法(折半查找)是一…...
【Python实战案例】Python3网络爬虫:“可惜你不看火影,也不明白这个视频的分量......”m3u8视频下载,那些事儿~
前言 哈喽!上午好嘞,各位小可爱们!有没有等着急了呀~ 由于最近一直在学习新的内容,所以耽搁了一下下,抱歉.jpg 双手合十。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移…...
UE4:使用样条生成随机路径,并使物体沿着路径行走
一、关于样条的相关知识 参考自:样条函数 - 馒头and花卷 - 博客园 三次样条(cubic spline)插值 - 知乎 B-Spline(三)样条曲线的性质 - Fun With GeometryFun With Geometry 个人理解的也不是非常深,但是大概要知道的就是样条具…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
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…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
