maven的基本学习
maven
https://www.bilibili.com/video/BV14j411S76G?p=1&vd_source=5c648979fd92a0f7ba8de0cde4f02a6e
1.简介
1.1介绍
Maven翻译为"专家"、“内行”,是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven是一个项目管理工具,可以对Java项目进行构建、依赖管理。Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache 软件基金会主持的独立Apache 项目。
通过Maven,可以帮助我们做:
- 项目的自动构建,包括代码的编译、测试、打包、安装、部署等操作。
- 依赖管理,项目使用到哪些依赖,可以快速完成导入。
我们之前并没有讲解如何将我们的项目打包为Jar文件运行,同时,我们导入依赖的时候,每次都要去下载对应的Jar包,这样其实是很麻烦的,并且还有可能一个Jar包依赖于另一个Jar包,就像之前使用JUnit一样,因此我们需要一个更加方便的包管理机制。
Maven也需要安装环境,但是IDEA已经自带了Maven环境,因此我们不需要再去进行额外的环境安装((无IDEA也能使用Maven,但是配置过程很麻烦,并且我们现在使用的都是IDEA的集成开发环境,所以这里就不讲解Maven命令行操作了)我们直接创建一个新的Maven项目即可。
1.2创建一个maven项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9m7b332o-1690375786144)(maven学习.assets/image-20230726165124192.png)]
其实本身就是一个Java项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1OMCZvc-1690375786145)(maven学习.assets/image-20230726165304209.png)]
maven的项目结构
- test是集合junit结合在一起进行使用的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yrges6P-1690375786145)(maven学习.assets/image-20230726165319415.png)]
1.3组成
groupId 、artifactId 、 version这三个元素合在一起,用于唯一区别每个项目,别人如果需要将我们编写的代码作为依赖,那么就必须通过这三个元素来定位我们的项目,我们称为一个项目的基本坐标,所有的项目一般都有自己的Maven坐标,因此我们通过
Maven导入其他的依赖只需要填写这三个基本元素就可以了,无需再下载Jar文件,而是Maven自动帮助我们下载依赖并导入。
- groupId一般用于指定组名称,命名规则一般和包名一致,比如我们这里使用的是org.example ,一个组下面可以有很多个项目。
- artifactId 一般用于指定项目在当前组中的唯一名称,也就是说在组中用于区分于其他项目的标记。定0 –
- version 代表项目版本,随着我们项目的开发和改进,版本号也会不断更新,就像LOL一样,每次赛季更新都会有一个大版本更新,我们的Maven项目也是这样,我们可以手动指定当前项目的版本号,其他人使用我们的项目作为依赖时,也可以根本版本号进行选择(这里的SNAPSHOT代表快照,一般表示这是一个处于开发中的项目,正式发布项目一般只带版本号)
基本的参数
<?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.example</groupId><artifactId>maven_study</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties></project>
导入别的依赖的话本质就是导入
<groupId>xxx</groupId>
<artifactId>xx</artifactId>
<version>xxx</version>
创建一个结点,可以导入我们需要的依赖。
<dependencies></dependencies>
下载个依赖为例
- 中心仓库几乎存储了所有的依赖
- 一般的话都会找到的
- 必须是联网的
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version><scope>provided</scope></dependency></dependencies>
使用我们的导入的依赖
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private String password;}
创建测试文件
public class TestMain {public static void main(String[] args) {System.out.println("你好");User user=new User();user.setName("张三");user.setPassword("123465");user.setId(1);System.out.println(user.toString());}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNZiG99u-1690375786146)(maven学习.assets/image-20230726170347115.png)]
1.4仓库
下面的这个网站可以告诉你常见的依赖的地址,用到什么就可以搜索什么。
https://mvnrepository.com/
仓库的基本原理图
- 本地仓库就是我们默认配置的:默认是m2。可以配置成自己的仓库的地址。
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OC7lH1z5-1690375786146)(maven学习.assets/image-20230726170056199.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6lANXvK-1690375786147)(maven学习.assets/image-20230726165929502.png)]
本地有的话,下次用到的时候会自动地进行导入地,不需要再去下载了。默认先去本地仓库中去寻找依赖进行导入。
原先maven设置的仓库的地址是远程的,现在需要换成国内的地址。
<!--配置案例云的镜像--><mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
或者是下面的形式都是一样的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fT2DZuSZ-1690375786147)(maven学习.assets/image-20230726170818427.png)]
此时下载依赖的时候全部的依赖全部是从国内的地址中去下载不需要从国外的地址中去下载了。
1.5依赖的作用域
1.依赖的基本属性
前面了解到了依赖的基本的形式
<dependency><groupId></groupId><artifactId></artifactId><version></version></dependency>
下面将会了解更多的属性
- type:依赖的类型默认就是jar
- scope:依赖的范围,重点。
- optional:依赖是不是可选的。
- exclusions:用来排除传递依赖的。b项目导入了a依赖,但是我们不需要a中的xx依赖就需要进行排除
2.scope属性内容。决定了依赖的作用域的范围。
compile:编译、运行和测试均有效。
provided:在编译和测试的时候有效,运行的时候无效。也就是说运行的时候不需要该依赖。像lombox在编译的时候用到,编译完成之后生成代码了之后,就转换成代码了,不需要进行使用了。
runtime:运行和测试有效。编译时候无效,像jdbc。
test:仅仅在测试时候有效。像junit依赖。
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version><scope>test</scope>
</dependency>
3.编写测试类
public class TestJava {@Testvoid test(){System.out.println("测试");}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVzkCEvA-1690375786147)(maven学习.assets/image-20230726172113396.png)]
4.添加连接数据库的文件
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version><scope>runtime</scope>
</dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>
5.资源文件夹下内容的创建。
mybatis的基本教程
http://c.biancheng.net/mybatis/config.html
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置 --><settings><setting name="mapUnderscoreToCamelCase" value="true"/><setting name="cacheEnabled" value="true"/></settings><typeAliases><package name = "com.test.entity"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!-- MySQL数据库驱动 --><property name="driver" value="com.mysql.jdbc.Driver" /><!-- 连接数据库的URL --><property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments><mappers><mapper class="com.test.mapper.UserMapper"/></mappers>
</configuration>
6.编写mapper
@Mapper
public interface UserMapper {@Select("select * from user where id=#{id}")User getUserById (String id);
}
7.编写测试类
public class TestMain {public static void main(String[] args) throws Exception{SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));SqlSession session=factory.openSession(true);UserMapper userMapper=session.getMapper(UserMapper.class);System.out.println(userMapper.getUserById("1"));}
}
补充一个要是只是一个本地jar怎么办呢。也就是远程没有这个jar的依赖。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSLPO6NM-1690375786148)(maven学习.assets/image-20230726174619121.png)]
1.6可选依赖
当项目中的某些依赖不希望被使用此项目作为依赖的项目使用时,我们可以给依赖添加optional标签表示此依赖是可选的,默认在导入依赖时,不会导瓜可选的依赖:
https://www.bilibili.com/video/BV14j411S76G/?p=3&spm_id_from=pageDriver&vd_source=5c648979fd92a0f7ba8de0cde4f02a6e
- 表示为true的话可以不导入这个依赖
- scope为test的话根本不需要设置
<optional>true</optional>
exclusions可以设置排除依赖。排除某个依赖。
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion></exclusions>
</dependency>
1.7创建父子项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vn4YVMJg-1690375786148)(maven学习.assets/image-20230726202031575.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXeyMifr-1690375786148)(maven学习.assets/image-20230726202210902.png)]
要是父子项目,夫设置option为true不耽误子项目的继承。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3RUFtvV-1690375786149)(maven学习.assets/image-20230726202250475.png)]
放到dependencies的全部都是强制继承的。
但是放到dependencyManagement不是强制继承的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yh7kD3GD-1690375786149)(maven学习.assets/image-20230726202634362.png)]
子项目导入的时候不需要指定对应的版本号就可以。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nn1C8Qs-1690375786149)(maven学习.assets/image-20230726202729991.png)]
1.8maven常用的命令
可以避免写命令行了
- clean:清理项目
- compile:编译
- install:是把项目构建下载到本地仓库
- validate:验证项目的可用性。
- test:测试所有位于test目录下的测试案例
- 测试类的名字必须是Test结尾,例如MainTest
- 测试方法上必须标注@Test注解
- package:先跑测试方法,执行完成之后才进行打包,生成jar文件。如何将jar打包成一个可执行的文件。将第三方的依赖也打包到依赖包里面。需要配置插件的内容。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmtqI985-1690375786150)(maven学习.assets/image-20230726204229538.png)]
-
verify:
-
deploy:发布到本地和远程仓库的,公司一般有私服的。
-
site:生成当前项目的发布站点。
对于存在依赖关系的项目的话,a依赖于b,打包a的话,同时会把b打包进去。会生成两个jar文件
相关文章:
maven的基本学习
maven https://www.bilibili.com/video/BV14j411S76G?p1&vd_source5c648979fd92a0f7ba8de0cde4f02a6e 1.简介 1.1介绍 Maven翻译为"专家"、“内行”,是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一…...
疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)
疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 (1)疲…...
安防监控视频汇聚EasyCVR修改录像计划等待时间较长,是什么原因?
安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…...
EXCEL数据自动web网页查询----高效工作,做个监工
目的 自动将excel将数据填充到web网页,将反馈的数据粘贴到excel表 准备 24KB的鼠标连点器软件(文末附链接)、Excel 宏模块 优势 不需要编程、web验证、爬虫等风险提示。轻量、稳定、安全。 缺点 效率没那么快 演示 宏环境 ht…...
visual studio 2022换背景遇到的问题
如果要自定义背景图,则可以下载ClaudialIDE 1.在拓展->点击拓展管理->右上角搜索background->点击下载ClaudialIDE->加载完之后需要关闭vs界面进行下载,下载失败,弹出“由于出现以下错误 无法安装一个或多个扩展”。 解决&#x…...
MODBUS-TCP转Ethernet IP 网关连接空压机 配置案例
本案例是工业现场应用捷米特JM-EIP-TCP的Ethernet/IP转Modbus-TCP网关连接欧姆龙PLC与空压机的配置案例。使用设备:欧姆龙PLC,捷米特JM-EIP-TCP网关, ETHERNET/IP 的电气连接 ETHERNET/IP 采用标准的 T568B 接法,支持直连和交叉接…...
Go重写Redis中间件 - GO实现TCP服务器
GO实现TCP服务器 首先新建一个项目go-redis,将config和lib包放到项目中,config.go用来解析配置,比如端口、功能、DB数;lib包有两个文件夹,分别是logger和sync,其中logger.go是一个日志框架,sync包中的bool.go包装了atomic操作,因为atomic原生没有bool类型,所以将uint…...
使用Kmeans算法完成聚类任务
聚类任务 聚类任务是一种无监督学习任务,其目的是将一组数据点划分成若干个类别或簇,使得同一个簇内的数据点之间的相似度尽可能高,而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式,发现异常点和离…...
内网穿透技术 - 带你玩转NATAPP
前言 使用内网穿透工具,我们就可以在公网中直接访问在局域网内搭建的服务器网页,也可以直接远程连接到局域网内的机器。本文章主要介绍下NATAPP内网穿透工具的使用。 NATAPP使用教程 官网 在官网先注册,然后登录。登录后,会有一…...
SQL server 简介
SQL server 简介 学习目的 SQL Server 是由微软公司开发的一种关系型数据库管理系统(RDBMS),用于存储和检索数据。它提供了一个可扩展的、安全的和可靠的数据存储和管理解决方案。 SQL Server 主要用于构建企业级应用程序,支持…...
springboot 之以enable开头的注解
Spring 有很多 Enable 开头的注解,平时在使用的时候也没有注意过为什么会有这些注解 Enable 注解 首先我们先看一下有哪些常用的 Enable 开头的注解,以及都是干什么用的。 EnableRetry:开启Spring 的重试功能; EnableSch…...
#P1007. [NOIP2007提高组] 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mnm 的矩阵,矩阵中的每个元素 a_{i,j}ai,j 均为非负整数。游戏规则如下: 每次取数时须从每行各取走一个元素,共 nn 个。经过 mm 次后取完矩阵内所有元素&…...
TypeScript基础篇 - TS模块
目录 模块的概念 Export 语法(default) Export 语法(non-default) import 别名 Type Export语法【TS】 模块相关配置项:module【tsconfig.json】 模块相关配置项:moduleResolution 小节总结 模块的…...
安卓:Picasso——加载网络图片的库
目录 一、Picasso介绍及其优势 二、Picasso的使用方法 1、添加依赖: 2、Picasso常用方法: 1、加载图像: 2、图像显示: 3、图像处理: 4、图像占位符和错误处理: 5、缓存控制: 6、清除缓…...
1468-PIPI的魔咒
题目描述: 大魔术师PIPI有N个转换魔咒,每个转换魔咒可以将一个字符串变成另一个字符串。 比如说: “PIPI”->“POPO” “boy”->“girl” “boy”->“u” “isau”->“OJ” 那么对于字符串"PIPIisaboy",大魔术师PIPI可…...
3d激光slam建图与定位(1)_基于ndt算法定位
一.代码实现流程 二.ndt算法原理 一.该算法定位有三个进程文件 1.map_loader.cpp用于点云地图的读取,从文件中读取点云后对这个点云地图进行旋转平移后发布点云地图到ros #include "map_loader.h"MapLoader::MapLoader(ros::NodeHandle &nh){std::st…...
云安全攻防(二)之 云原生安全
云原生安全 什么是云原生安全?云原生安全包含两层含义:面向云原生环境的安全和具有云原生特征的安全 面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中的基础设施、编排系统和微服务系统的安全。这类安全机制不一定会具有云原生的…...
最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践
前言 知识点 定级:入门级GlusterFS 和 Heketi 简介GlusterFS 安装部署Heketi 安装部署Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100…...
笙默考试管理系统-MyExamTest(16)
笙默考试管理系统-MyExamTest(16) 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试管理系统-MyExa…...
初级算法-树
文章目录 二叉树的最大深度题意:解:代码: 验证二叉搜索树题意:解:代码: 对称二叉树题意:解:代码: 二叉树的层序遍历题意:解:代码: 将有…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...
【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...
