Maven核心概念

一、Maven基础知识

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

1、Maven模型

在这里插入图片描述

2、仓库分类

  • 本地仓库:自己计算机上的一个目录
  • 中央仓库:由Maven团队维护的全球唯一的仓库
    地址:https://repo1.maven.org/maven2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库
  • jar包的查找顺序为:本地仓库->远程仓库->中央仓库

3、Maven常用命令

上节我们演示了Maven的使用,使用的就是如下命令:

  • compile:编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

4、Maven生命周期

  • Maven构建项目生命周期描述的是一次构建过程经历了多少事件
  • Maven对项目构建的生命周期划分为3套
    clean:清理工作
    default:核心工作,例如编译,测试,打包,安装等
    site:产生报告,发布站点等

在这里插入图片描述

5、Maven坐标详解

Ⅰ、什么是坐标?

Maven中的坐标是资源的唯一标识

使用坐标来定义项目或引入项目中需要的依赖

Ⅱ、Maven坐标主要组成

groupId:定义当前Maven项目隶属组织名称(通常域名反写,例如:com.liming)

artifactId:当前项目的模块名称(类似于:maven)

version:版本

<groupId>com.liming</groupId>
<artifactId>maven</artifactId>
<version>1.0-SNAPSHOT</version>

6、依赖范围
在这里插入图片描述

举例:

<dependencies>
		<dependency>
			<!—坐标 -->
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<!-- 依赖的范围 -->
			<scope>test</scope>
		</dependency>
	</dependencies>

二、Maven进阶

1、依赖传递

如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
当存在间接依赖的情况时,主工程对间接依赖的jar可以访问吗?这要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问。

2、依赖传递冲突问题

  • 路径优先:路径最短者优先
  • 声明优先:路径相同时先声明者优先 (这里“声明”的先后顺序指的是dependency标签配置的先后顺序)

3、可选依赖与排除依赖

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

<dependency>
	<groupId>com.liming</groupId>
	<artifactId>maven_01</artifactId>
	<version>1.0-SNAPSHOT</version>
	<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源不具有依赖传递性-->
	<optional>false</optional>
</dependency>

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

举例:
当前工程为public,直接依赖environment。environment依赖commons-logging的1.1.1对于public来说是间接依赖。当前工程public直接依赖commons-logging的1.1.2加入exclusions配置后可以在依赖environment的时候排除版本为1.1.1的commons-logging的间接依赖。

Environment工程:
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.1</version>
</dependency>


当前工程:
<dependency>
	<groupId>com.liming.maven</groupId>
	<artifactId>Environment</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 依赖排除 -->
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.2</version>
</dependency>

4、继承

继承描述的是两个工程之间的关系,与Java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承

步骤:

1、创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

2、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        ......
    </dependencies>

3、配置子工程中可选的依赖关系

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.13</version>
            </dependency>
        </dependencies>
        ......
    </dependencyManagement>

4、在子工程中配置当前工程所继承的父工程

<!--定义该工程的父工程-->
    <parent>
        <groupId>com.liming</groupId>
        <artifactId>maven_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--填写父工程的pom文件-->
        <relativePath>../maven_parent/pom.xml</relativePath>
    </parent>

5、在子工程中配置使用父工程中可选依赖的坐标

</dependencies>
	<dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
     </dependency>
</dependencies>

在这里插入图片描述
5、属性

以对Spring的jar包依赖为例:Spring的每一个版本中都包含spring-corespring-context等jar包。我们应该导入版本一致的Spring jar包,而不是使用4.0.0的spring-core的同时使用4.1.1的spring-context。

问题是如果我们想要将这些jar包的版本统一升级为4.1.1,是不是要手动一个个修改呢?显然,我们有统一配置属性的方式:

<properties>
	<spring.version>4.1.1.RELEASE</spring.version>
</properties>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-orm</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-web</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>${spring.version}</version>
</dependency>

这样一来,进行版本调整的时候只改一改地方就行了

6、配置文件加载属性

1、定义属性

<!--定义自定义属性-->
    <properties>
        <spring.version>5.2.10.RELEASE</spring.version>
        <junit.version>4.12</junit.version>
        <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
    </properties>

2、配置文件中引入属性

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc,password=root

3、开启资源目录加载属性的过滤器

<build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
</build>

4、配置maven打war包时,忽略web.xml检查

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
        <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
</plugin>

7、版本管理

1、工程版本:

SNAPSHOT(快照版本)

在这里插入图片描述

RELEASE(发布版本)

在这里插入图片描述

2、发布版本:

  • alpha版
  • beta版
  • 纯数字版

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【vite+vue3】 多页面应用模式

需要注意到的点&#xff1a; 1. 项目文件结构 2. vite.config.js 的配置 3. 访问地址的路径 假设你有下面这样的项目文件结构 ├── package.json ├── vite.config.js ├── index.html ├── main.ts └── src├── project&#xff5c;————projectA&#xf…

1669_MIT 6.828 xv6代码的获取以及编译启动

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 6.828的学习的资料从开始基本信息的讲解&#xff0c;逐步往unix的一个特殊版本xv6过度了。这样&#xff0c;先得熟悉一下这个OS的基本代码以及环境。 在课程中其实…

Python工具库安装

1、Python工具库下载 &#xff08;1&#xff09;查询安装Python的版本信息。 按键 WinR&#xff0c;在弹出的“运行”对话框中输入cmd&#xff0c;在弹出的Dos系统中&#xff0c;输入python&#xff0c;即可查询得到Python的版本信息。本次所安装的python版本为3.8.10。 &…

后端开发之Swagger API开发工具

最近刚入职公司&#xff0c;做Java后端。当下对于新手程序员来说&#xff0c;的确并不友好&#xff0c;不仅是经济低迷&#xff0c;而且这次chatgpt的大火也极大地冲击了软件开发行业&#xff0c;所以小白必须抓紧时间卷&#xff0c;哪怕自己写出来的东西把自己搞失业……也要尽…

【Python从入门到进阶】14、字典高级应用

接上篇《13、元组高级应用及常见切片操作》 上两篇我们学习了Python中元组的高级应用&#xff0c;以及字符串、列表和元祖的切片操作。本篇我们来学习字典的高级应用&#xff0c;包括字典的查询、修改、添加、删除及遍历操作。 一、字典高级简介 我们通过前面的学习知道&…

ORACLE创建表空间、用户、授权和Navicat创建序列和触发器及解决ORA-00942、ORA-01219错误

问题描述&#xff1a;因为每次Oracle删除数据库的时候磁盘文件还没删除&#xff0c;然后自己手动停止Oracle&#xff0c;删除磁盘里的.DBF文件导致数据库重启后无法连接。 cmd sqlplus sys as sysdba执行alter database open;查看你报错的数据文件&#xff08;就是你停止Orac…

Git 基础知识总结

Git 基础知识总结 1. Git 简介 Git 是什么 Git是一款分布式版本控制系统&#xff0c;可以有效地管理代码的版本和变更。Git可以在本地进行版本控制&#xff0c;也可以在多人协作开发时进行远程版本控制。Git的设计目标是速度快、数据完整性高、支持分布式、非线性开发流程。…

NVIDIA-cuSPARSE数据类型2023年(二)

4 cuSPARSE数据类型参考 4.1 数据类型 float,double,cuComplex,cuDoubleComplex后两个类型是来自cuComplex.h 4.2 cusparseStatus_t 表示库函数返回的状态&#xff0c;可以有以下取值&#xff1a; CUSPARSE_STATUS_SUCCESS 操作成功完成CUSPARSE_STATUS_NOT_INITIALIZED 库…

SpringBoot整合junitmybatis

SpringBoot整合junit&mybatis3&#xff0c;SpringBoot整合junit3.1 环境准备3.2 编写测试类4&#xff0c;SpringBoot整合mybatis4.1 回顾Spring整合Mybatis4.2 SpringBoot整合mybatis4.2.1 创建模块4.2.2 定义实体类4.2.3 定义dao接口4.2.4 定义测试类4.2.5 编写配置4.2.6 …

拉取代码到本地 git pull 和 git clone 的区别

一、git pull 使用 git pull 拉取代码&#xff0c;你需有权限。 从你自己的远程仓库拉取代码&#xff0c;或者使用你团队的仓库拉取代码。 1.有 有权限可以拉取代码的远程仓库 1. 所以首先要连接远程仓库&#xff0c;前提你得先有个本地仓库存放&#xff0c;如果没有先创建。 …

ToBeWritten之反入侵安全技术面经总结

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

ReactJS到React-Native,架构原理概述

React是一个纯JS的UI库&#xff0c;只能干HTML/CSS/JS 提供的Web服务&#xff08;新的H5 API不一定支持&#xff09;&#xff0c; React-Native厉害在于它能打通JS和Native Code, 让JS能够调用丰富的原生接口,充分发挥硬件的能力, 实现非常复杂的效果,同时能保证效率和跨平台性…

【CocosCreator入门】CocosCreator组件 | MotionStreak(拖尾)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中MotionStreak是Cocos Creator中一个非常有用的特效组件&#xff0c;可以创建出类似于拖尾的效果。本文将深入讲解MotionStreak的实现原理及使用方法。 目录 一、MotionStreak的实现原…

黑客与渗透师的区别,如何才能成为一名黑客

网络安全员顾名思义就是“研究网络的安全性的人员”没有“渗透师”这个称呼&#xff0c;都是“渗透测试工程师”“黑客”像是个俗名&#xff0c;广义概念上是一种精神&#xff0c;狭义概念还得按照时代来分1、网络安全这个领域非常庞大&#xff0c;包括了安全服务&#xff08;渗…

碉堡!“万物皆可分”标记模型上线「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干这周有个让人眼前一亮的图像识别模型 segment-anything&#xff0c;它能精细地框出所有可见物体&#xff0c;它标记出的物体边界线清晰可见。如此出色的模型&#xff0c;自然获得了不少人的赞赏&#xff0c;开源没几天&#xff0c;就拿下了 …

VSCode+PyQt之Python界面编写

环境配置 1、python3.9 2、安装库 pip install PyQt5 pip install PyQt5-tools3、选择python解释器 4、在VSCode里下载并安装PYQT Integration 5、配置pyqt integration 5.1 将下面改为&#xff1a;D:\ProgramFiles\Python39\Scripts\pyuic5.exe 5.2 将下面的改为&#xff…

Kafka 入门篇(三)

文章目录 提交和偏移量的概念特殊偏移自动提交提交当前偏移量异步提交同步和异步组合提交提交特定的偏移量提交和偏移量的概念 特殊偏移 我们上面提到,消费者在每次调用poll() 方法进行定时轮询的时候,会返回由生产者写入 Kafka 但是还没有被消费者消费的记录,因此我们可以…

ccc-pytorch-宝可梦自定义数据集实战-加载数据部分(9)

文章目录第一步&#xff1a;构建路径与种类的映射关系第二步&#xff1a;载入所有的宝可梦图像第三步&#xff1a;打散顺序并通过路径名提取映射关系构建映射文件第四步&#xff1a;完善选取、获取图片信息功能并可视化第五步&#xff1a;对数据进行预处理第六步&#xff1a;批…

【李宏毅】深度学习——HW4-Speaker Identification

Speaker Identification 1.Goal 根据给定的语音内容&#xff0c;识别出说话者是谁 2.Data formats 2.1data directory 目录下有三个json文件和很多pt文件&#xff0c;三个json文件作用标注在下图中&#xff0c;pt文件就是语音内容。 mapping文件 metadata文件 n_mels:Th…

飞桨EasyDL落地三大工业场景,工业AI赋能产业升级

数智化时代&#xff0c;如何利用人工智能实现传统生产方式的转型升级&#xff0c;成为摆在每个工业制造企业的一道必答题。工业生产、质检、管理等环节&#xff0c;持续产生海量数据。以机器视觉为代表的AI技术&#xff0c;广泛应用在3C电子、快消品制造、汽车零部件制造等多个…