小黑子—Maven基础

news2025/1/16 13:52:51

Maven基础

  • 一 小黑子的Maven学习
    • 1. Mavn的介绍
    • 2. Maven基础概念
      • 2.1 仓库
      • 2.2 坐标
      • 2.3 仓库配置
    • 3. 手动写一个maven项目
      • 3.1 Maven项目构建命令
      • 3.2 插件创建工程
    • 4. IDEA下的maven项目
    • 5. 依赖管理
      • 5.1 依赖配置
      • 5.2 依赖传递
      • 5.3 可选依赖(不透明)
      • 5.4 排除依赖(不需要)
      • 5.5 依赖范围
    • 6. 生命周期与插件
      • 6.1 构建生命周期
      • 6.2 插件

一 小黑子的Maven学习

1. Mavn的介绍

  • Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  • POM(Project Object Model)︰项目对象模型
    在这里插入图片描述

  • 项目构建:提供标准的、跨平台的自动话项目构建

  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题

  • 统一开发结构:提供标准的、统一的项目结构
    在这里插入图片描述

2. Maven基础概念

2.1 仓库

  • 仓库:用户存储资源,包含各种jar包
  • 仓库分类:
    • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
    • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
      • 中央仓库:Maven团队维护,存储所有资源的仓库
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服的作用:

  • 保存具有版权的资源,包含购买或自主研发的jar 中央仓库中的jar都是开源的,不能存储具有版权的资源
  • 一定范围内共享资源,仅对内部开放,不对外共享
    在这里插入图片描述

2.2 坐标

mvn查找网站

什么是坐标?

Maven中的坐标用于描述仓库中资源的位置

Maven坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
  • artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
  • version:定义当前项目版本号
  • packaging:定义该项目的打包方式

Maven坐标的作用

  • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

2.3 仓库配置

本地仓库配置

  • Maven启动后,会自动保存下载的资源到本地仓库
    • 默认位置
<localRepository>${user.home}/.m2/repository</localRepository>

当前目录位置为登录用户名所在目录下的.m2文件夹中

  • 自定义位置
<localRepository>D: \maven\repository</localRepository>

当前目录位置为D:\maven\repository文件夹中

远程仓库配置

  • Maven默认连接的仓库配置
<repositories>
	<repository>
		<id>central</id>
		<name>Central Repository</name>
		<ur1>https://repo.maven.apache.org/maven2</ur1>
		<layout>default</layout>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>
</repositories>

镜像仓库配置

  • 在setting文件中配置阿里云镜像仓库
<mirrors>
	<!--配置具体的仓厍的下载镜像-->
	<mirror>
		<!--此镜像的唯━标识符,用来区分不同的mirror元素-->
		<id>nexus-aliyun</id>
		<!--对哪种仓库进行镜像,简单说就是替代哪个仓库-->
		<mirrorof>central</mirrorOf>
		<!--镜像名称-->
		<name>Nexus aliyun</name>
		<!--镜像URL-->
		<ur1>http: //maven.aliyun. com/nexus/content/groups/public</url>
	</mirror>
</mirrors>

全局setting与用户setting区别

  • 全局settting定义了当前计算器中Maven的公共配置
  • 用户settting定义了当前用户的配置

3. 手动写一个maven项目

Maven工程目录结构
在这里插入图片描述

  • 在src同层目录下创建pom.xml
    在这里插入图片描述

3.1 Maven项目构建命令

  • Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
mvn compile			# 编译
mvn clean			# 清理
mvn	test			# 测试
mvn package			# 打包
mvn	install			# 安装到本地仓库

3.2 插件创建工程

  • 创建工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name }
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
  • 创建java工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -
DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0 .0.1-snapshot -
DinteractiveMode=false
  • 创建web工程
mvn archetype: generate -DgroupId=com.itheima -DartifactId=web-project -
DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -
DinteractiveMode=false

在这里插入图片描述

4. IDEA下的maven项目

IDEA编译环境下的maven学习视频

5. 依赖管理

5.1 依赖配置

依赖指当前运行所需要的jar,一个项目可以设置多个依赖

格式:

<!--设置当前项目所依赖的所有jar-->
<dependencies>
	<!--设置具体的依赖-->
	<dependency>
		<!--依赖所属群组id-->
		<groupId>junit</groupId>
		<!--依赖所属项目id-->
		<artifactId>junit</artifactId>
		<!--依赖版本号-->
		<version>4.12</version>
	</dependency>
</dependencies>

5.2 依赖传递

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
    在这里插入图片描述

依赖传递中的冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
    在这里插入图片描述

5.3 可选依赖(不透明)

可选依赖指对外隐藏当前所依赖的资源―—不透明

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactid>
	<version>4.12</version>
	<optional>true</optional>
</dependency>

5.4 排除依赖(不需要)

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactid>
	<version>4.12</version>
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

5.5 依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围

  • 主程序范围有效 (main文件夹范围内)
  • 测试程序范围有效 (test文件夹范围内)
  • 是否参与打包 (package指令范围内)
scope主代码测试代码打包范例
compile(默认)YYYlog4j
testYjunit
providedYYservlet-api
runtimeYjdbc

依赖范围传递性

  • 带有以来范围的资源在进行传递时,作用范围将受到影响
    在这里插入图片描述

6. 生命周期与插件

6.1 构建生命周期

  • Maven构建生命周期描述的是一次构建过程经历经历了多少个事件
    在这里插入图片描述

  • Maven对项目构建的生命周期划分为3套

    • clean:清理工作
      在这里插入图片描述

    • default:核心工作,例如编译,测试,打包,部署等
      在这里插入图片描述

    • site:产生报告,发布站点等
      在这里插入图片描述

6.2 插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
    在这里插入图片描述

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

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

相关文章

【AI视野·今日Sound 声学论文速览 第二十七期】Tue, 17 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 17 Oct 2023 Totally 15 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers LocSelect: Target Speaker Localization with an Auditory Selective Hearing Mechanism Authors Yu Chen, Xinyuan Qian, Zexu Pan, Ka…

Python逆向爬虫案例: 某网站AES逆向解密

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&#xff0…

了解 AI :了解 AI 方面的一些术语 (中英文对照)

本心、输入输出、结果 文章目录 了解 AI &#xff1a;了解 AI 方面的一些术语 &#xff08;中英文对照&#xff09;前言AI 方面的一些术语 &#xff08;中英文对照&#xff09;AI 方面的一些术语 &#xff08;中英文对照&#xff09; - 文字版弘扬爱国精神 了解 AI &#xff1a…

网工内推 | IT主管、高级网工,上市公司,必须持有HCIE认证

01 深圳市飞荣达科技股份有限公司 招聘岗位&#xff1a;高级网络工程师 职责描述&#xff1a; 1. 参与、负责集团公司IT基础技术架构的规划设计、实施及维护、性能优化&#xff0c;包括数据中心机房、网络架构、虚拟化平台、信息安全设备及灾备系统等&#xff1b; 2. 负责集团…

如何给Github上的开源项目提交PR?

前言 对于一个热爱开源的程序员而言&#xff0c;学会给GitHub上的开源项目提交PR这是迈出开源的第一步。今天我们就来说说如何向GitHub的开源项目提交PR&#xff0c;当然你提交的PR可以是一个项目的需求迭代、也可以是一个Bug修复、再或者是一些内容文本翻译等等&#xff0c;并…

安装VSCode,提升工作效率!iPad Pro生产力进阶之路

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

MyBatisPlus(二十一)乐观锁

使用场景 用于当有多个用户同时修改同一条数据的时候&#xff0c;只允许有一个修改成功。 实现原理 使用一个字段&#xff0c;用于记录数据的版本。 当修改数据时&#xff0c;会去检测当前版本是否是正在修改的版本&#xff0c;同时修改成功后会把 版本号 1。 实现方式 配…

Go学习第一章——开发环境安装以及快速入门(GoLand)

Go开发环境安装以及快速入门 一、环境配置1.1 go开发工具1.2 go sdk下载3.1 go相关命令行 二、快速入门2.1 创建项目2.2 创建.go程序文件2.3.配置 mod 的开启与关闭2.4 用 GoLand 写第一份代码2.5.代码静态检测&#xff08;此部分非必要&#xff09; 三、初步了解3.1 代码解释以…

设计模式:单例模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

大家好&#xff01;本节主要介绍设计模式中的单例模式。 简介&#xff1a; 单例模式&#xff0c;它是一种常用的软件设计模式&#xff0c;它属于创建类型。单例模式的主要目的是确保一个类仅有一个实例&#xff0c;并提供一个全局访问点。 在单例模式中&#xff0c;一个类只有…

python控制Windows桌面程序自动化模块uiautomation

github仓库地址&#xff1a;GitHub - yinkaisheng/Python-UIAutomation-for-Windows: (Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ... uiaut…

【OJ比赛日历】快周末了,不来一场比赛吗? #10.21-10.27 #11场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-10-21&#xff08;周六&#xff09; #2场比赛2023-10-22…

硬件成本节省60%,四川华迪基于OceanBase的健康大数据数仓建设实践

导语&#xff1a;本文为四川华迪数据计算平台使用 OceanBase 替代 Hadoop 的实践&#xff0c;验证了 OceanBase 在性能和存储成本方面的优势&#xff1a;节省了 60% 的硬件成本&#xff0c;并将运维工作大幅减少&#xff0c;从 Hadoop 海量组件中释放出来&#xff1b;一套系统处…

【Python】文件操作

一、文件的编码 思考:计算机只能识别:0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢? 答案:使用编码技术( 密码本)将内容翻译成0和1存入 编码技术即:翻译的规则&#xff0c;记录了如何将内容翻译成二进制&#xff0c;以及如何将二…

2022年下半年 软件设计师 上午试卷(41题—75题)

UML活动图用于建模 &#xff08;41&#xff09; 。以下活动图中&#xff0c;活动A1之后&#xff0c;可能的活动执行序列顺序是 &#xff08;42&#xff09; 。 &#xff08;41&#xff09; A. 系统在它的周边环境的语境中所提供的外部可见服务 B. 某一时刻一组对象以及它们之间…

【代码随想录】算法训练营 第七天 第三章 哈希表 Part 2

454. 四数相加 题目 思路 这道题相当于是两数相加的加强版&#xff0c;其实大体思路是一致的&#xff0c;只不过这道题里先把四个数组中的数两两相加&#xff0c;把和作为map的key值&#xff0c;把和出现的次数作为value&#xff0c;这样先遍历完前两个数组&#xff0c;后面再…

nginx平滑升级添加echo模块、localtion配置、rewrite配置

nginx平滑升级添加echo模块、location配置、rewrite配置 文章目录 nginx平滑升级添加echo模块、location配置、rewrite配置1.环境说明&#xff1a;2.nginx平滑升级原理&#xff1a;3.平滑升级nginx&#xff0c;并添加echo模块3.1.查看当前nginx版本以及老版本编译参数信息3.2.下…

【LeetCode-数组】--搜索插入位置

搜索插入位置 class Solution {public int searchInsert(int[] nums, int target) {int n nums.length;int left 0,right n-1;while(left < right){int mid (left right) / 2;if(nums[mid] target){return mid;}else if(nums[mid] > target){right mid - 1;}else…

【一:实战开发testng的介绍】

目录 1、主要内容1.1、为啥要做接口测试1.2、接口自动化测试落地过程1.3、接口测试范围1.4、手工接口常用的工具1.5、自动化框架的设计 2、testng自动化测试框架基本测试1、基本注解2、忽略测试3、依赖测试4、超时测试5、异常测试6、通过xml文件参数测试7、通过data实现数据驱动…

边写代码边学习之mlflow

1. 简介 MLflow 是一个多功能、可扩展的开源平台&#xff0c;用于管理整个机器学习生命周期的工作流程和工件。 它与许多流行的 ML 库内置集成&#xff0c;但可以与任何库、算法或部署工具一起使用。 它被设计为可扩展的&#xff0c;因此您可以编写插件来支持新的工作流程、库和…

Go学习第二章——变量与数据类型

Go变量与数据类型 1 变量1.1 变量概念1.2 变量的使用步骤1.3 变量的注意事项1.4 ""的使用 2 数据类型介绍3 整数类型3.1 有符号整数类型3.2 无符号整数类型3.3 其他整数类型3.4 整型的使用细节 4 小数类型/浮点型4.1 浮点型的分类4.2 简单使用 5 字符类型5.1 字符类型…