当前位置: 首页 > news >正文

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翻译为"专家"、“内行”&#xff0c;是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念&#xff0c;Maven利用一…...

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)

疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 &#xff08;1&#xff09;疲…...

安防监控视频汇聚EasyCVR修改录像计划等待时间较长,是什么原因?

安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…...

EXCEL数据自动web网页查询----高效工作,做个监工

目的 自动将excel将数据填充到web网页&#xff0c;将反馈的数据粘贴到excel表 准备 24KB的鼠标连点器软件&#xff08;文末附链接&#xff09;、Excel 宏模块 优势 不需要编程、web验证、爬虫等风险提示。轻量、稳定、安全。 缺点 效率没那么快 演示 宏环境 ht…...

visual studio 2022换背景遇到的问题

如果要自定义背景图&#xff0c;则可以下载ClaudialIDE 1.在拓展->点击拓展管理->右上角搜索background->点击下载ClaudialIDE->加载完之后需要关闭vs界面进行下载&#xff0c;下载失败&#xff0c;弹出“由于出现以下错误 无法安装一个或多个扩展”。 解决&#x…...

MODBUS-TCP转Ethernet IP 网关连接空压机 配置案例

本案例是工业现场应用捷米特JM-EIP-TCP的Ethernet/IP转Modbus-TCP网关连接欧姆龙PLC与空压机的配置案例。使用设备&#xff1a;欧姆龙PLC&#xff0c;捷米特JM-EIP-TCP网关&#xff0c; ETHERNET/IP 的电气连接 ETHERNET/IP 采用标准的 T568B 接法&#xff0c;支持直连和交叉接…...

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算法完成聚类任务

聚类任务 聚类任务是一种无监督学习任务&#xff0c;其目的是将一组数据点划分成若干个类别或簇&#xff0c;使得同一个簇内的数据点之间的相似度尽可能高&#xff0c;而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式&#xff0c;发现异常点和离…...

内网穿透技术 - 带你玩转NATAPP

前言 使用内网穿透工具&#xff0c;我们就可以在公网中直接访问在局域网内搭建的服务器网页&#xff0c;也可以直接远程连接到局域网内的机器。本文章主要介绍下NATAPP内网穿透工具的使用。 NATAPP使用教程 官网 在官网先注册&#xff0c;然后登录。登录后&#xff0c;会有一…...

SQL server 简介

SQL server 简介 学习目的 SQL Server 是由微软公司开发的一种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;用于存储和检索数据。它提供了一个可扩展的、安全的和可靠的数据存储和管理解决方案。 SQL Server 主要用于构建企业级应用程序&#xff0c;支持…...

springboot 之以enable开头的注解

Spring​ 有很多 Enable 开头的注解&#xff0c;平时在使用的时候也没有注意过为什么会有这些注解 Enable 注解 首先我们先看一下有哪些常用的 Enable 开头的注解&#xff0c;以及都是干什么用的。 EnableRetry​&#xff1a;开启Spring 的重试功能&#xff1b; EnableSch…...

#P1007. [NOIP2007提高组] 矩阵取数游戏

题目描述 帅帅经常跟同学玩一个矩阵取数游戏&#xff1a;对于一个给定的 n \times mnm 的矩阵&#xff0c;矩阵中的每个元素 a_{i,j}ai,j​ 均为非负整数。游戏规则如下&#xff1a; 每次取数时须从每行各取走一个元素&#xff0c;共 nn 个。经过 mm 次后取完矩阵内所有元素&…...

TypeScript基础篇 - TS模块

目录 模块的概念 Export 语法&#xff08;default&#xff09; Export 语法&#xff08;non-default&#xff09; import 别名 Type Export语法【TS】 模块相关配置项&#xff1a;module【tsconfig.json】 模块相关配置项&#xff1a;moduleResolution 小节总结 模块的…...

安卓:Picasso——加载网络图片的库

目录 一、Picasso介绍及其优势 二、Picasso的使用方法 1、添加依赖&#xff1a; 2、Picasso常用方法&#xff1a; 1、加载图像&#xff1a; 2、图像显示&#xff1a; 3、图像处理&#xff1a; 4、图像占位符和错误处理&#xff1a; 5、缓存控制&#xff1a; 6、清除缓…...

1468-PIPI的魔咒

题目描述: 大魔术师PIPI有N个转换魔咒&#xff0c;每个转换魔咒可以将一个字符串变成另一个字符串。 比如说&#xff1a; “PIPI”->“POPO” “boy”->“girl” “boy”->“u” “isau”->“OJ” 那么对于字符串"PIPIisaboy"&#xff0c;大魔术师PIPI可…...

3d激光slam建图与定位(1)_基于ndt算法定位

一.代码实现流程 二.ndt算法原理 一.该算法定位有三个进程文件 1.map_loader.cpp用于点云地图的读取&#xff0c;从文件中读取点云后对这个点云地图进行旋转平移后发布点云地图到ros #include "map_loader.h"MapLoader::MapLoader(ros::NodeHandle &nh){std::st…...

云安全攻防(二)之 云原生安全

云原生安全 什么是云原生安全&#xff1f;云原生安全包含两层含义&#xff1a;面向云原生环境的安全和具有云原生特征的安全 面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中的基础设施、编排系统和微服务系统的安全。这类安全机制不一定会具有云原生的…...

最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践

前言 知识点 定级&#xff1a;入门级GlusterFS 和 Heketi 简介GlusterFS 安装部署Heketi 安装部署Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100…...

笙默考试管理系统-MyExamTest(16)

笙默考试管理系统-MyExamTest&#xff08;16&#xff09; 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试管理系统-MyExa…...

初级算法-树

文章目录 二叉树的最大深度题意&#xff1a;解&#xff1a;代码&#xff1a; 验证二叉搜索树题意&#xff1a;解&#xff1a;代码&#xff1a; 对称二叉树题意&#xff1a;解&#xff1a;代码&#xff1a; 二叉树的层序遍历题意&#xff1a;解&#xff1a;代码&#xff1a; 将有…...

Harbor Failed to start docker.service: Unit docker.service not found.

有可能是修改配置文件导致了问题&#xff0c;最近肯定修改过某个配置文件 本文只针对配置Harbor过程中遇到该问题&#xff0c;很有是deamon.json的 insecure-registries和docker.service的 ExecStart/usr/bin/dockerd --insecure-registry冲突了&#xff0c;删掉一个就好 我使…...

网络安全/信息安全(黑客技术)自学笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…...

ADB 命令结合 monkey 的简单使用,超详细

一&#xff1a;ADB简介 1&#xff0c;什么是adb&#xff1a; ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。ADB 也是 Android SDK 中的一个工具&…...

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…...

如何在3ds max中创建可用于真人场景的巨型机器人:第 5 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. After Effects 中的项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 我有真人版 我在After Effects中导入的素材。这是将 用作与机器人动画合成的背景素材。 实景镜头 步骤 3 有背景 选定的素材…...

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测 高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中&#xff0c;它们的参数通常由最大似然和EM算法确定。关键思想是使用高斯混合模型对数据&#xff08;包括输入和输出&#xff09;的联合概率…...

Mnist分类与气温预测任务

目录 传统机器学习与深度学习的特征工程特征向量pytorch实现minist代码解析归一化损失函数计算图Mnist分类获取Mnist数据集&#xff0c;预处理&#xff0c;输出一张图像面向工具包编程使用TensorDataset和DataLoader来简化数据预处理计算验证集准确率 气温预测回归构建神经网络…...

Pytorch深度学习-----神经网络的卷积操作

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…...

微信小程序转抖音小程序的坑:The component <xxx> used in pages/xxx/xxx is undefined

微信小程序组件定义在根目录的 app.json 中了&#xff0c;在抖音小程序中出现找不到的情况。 在需要用到组件的 pages 目录中页面文件夹的 json "usingComponents": {} 大括号中添加页面使用的组件&#xff0c;即可使用......

Vue+element Ui的el-select同时获取value和label的方法总结

1.通过ref的形式&#xff08;推荐) <template><div class"root"><el-selectref"optionRef"change"handleChange"v-model"value"placeholder"请选择"style"width: 250px"><el-optionv-for&q…...