JavaEE-Maven

maven

Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包。

maven简单, ⽅便, 提⾼我们的开发效率, 减少我们的开发Bug。

IDEA本⾝已经集成了Maven, 我们可以直接使⽤, ⽆需安装。

创建maven项目

name是项目名

location是项目路径

在build system选择maven create创建就行。

依赖的添加和管理都在pom文件里

项目构建

当我们开发了⼀个项⽬之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进⾏, 就显得特别⿇烦,, ⽽Maven 给我们提供了⼀套简单的命令来完成项⽬的构建.

在右边m点开就是maven的一些操作。

lifecycle是maven的生命周期,一些命令功能

package是打包

plugins是插件

打包就是把所有的class⽂件, 全部放在⼀起, 打成jar包或者war包

jar包和war包都是⼀种压缩⽂件

jar包就是把开发⼈员已经写好的⼀些代码进⾏打包. 打好的jar包就可以引⼊到其他项⽬中, 也可以直接使⽤这些jar包中的类和属性. 另外也可以打成可执⾏jar包, 这样的包就可以通过java -jar命令来执⾏

war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西, 通常⽤于⽹站.

依赖管理

Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包

获取的jar包, 其实就是依赖.

pom.xml 就是maven 的配置⽂件,⽤以描述项⽬的各种信息

依赖: 指当前项⽬运⾏所需要的jar包.

如果不适用maven,那么就需要手动将jar包引入到项目中,有了maven,只需要添加对应的依赖就可以将jar包自动引入。

每次修改pom文件都需要通过maven刷新

添加依赖后自动引入了对应的jar包,这个jar包是从本地仓库取出来的,如果本地仓库没有,那么就会先从远端仓库下载到本地仓库,在从本地仓库取出来。

依赖传递

⽐如 A 依赖B, B依赖C, 那么 A项⽬引⼊B 的同时, 也需要引⼊C, 如果我们⼿动管理这个依赖, 这个过程就会⽐较⿇烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的

但使⽤maven的话, 就可以避免管理所需依赖的关系。我们只需要在pom⽂件中, 定义直接依赖就可以了, 由于maven的依赖具有传递性,所以会⾃动把所依赖的其他jar包也⼀起导⼊

如上图, 项⽬A 通过Maven 引⼊ Jar A 时, 会⾃动引⼊ Jar B 和Jar C.

Jar A 和项⽬B就是项⽬A的直接依赖.

Jar B, Jar C是间接依赖.

直接依赖:在当前项⽬中通过依赖配置建⽴的依赖关系间接依赖:被依赖的资源如果依赖其他资源,当前项⽬间接依赖其他资源

依赖排除

当前阶段我们需要依赖的库并不多, 但随着项⽬的越来越复杂, 库之间的依赖关系也会变得越来越复杂.

如上图中, 如果项⽬A不需要Jar B,也可以通过排除依赖的⽅式来实现.

排除依赖:

指主动断开依赖的资源。(被排除的资源⽆需指定版本)

可以看到mysql另外依赖着一个protobuf。

右键点击protobuf使用exclude就可以排除这个依赖。

这就是排除依赖的格式,本来是要自己写这个排除依赖的,这里是下载了一个叫maven help的插件,所以能够通过上面的界面点击exclude来自动生成排除依赖的语句。

插件下载

打开setting进入plugins,marketpiace查找下载插件,installed是已下载插件。

本地仓库

本地仓库: ⾃⼰计算机上的⼀个⽬录(⽤来存储jar包)

当项⽬中引⼊对应依赖jar包后,⾸先会查找本地仓库中是否有对应的jar包,如果有,则在项⽬直接引⽤

如果没有,则去中央仓库中下载对应的jar包到本地仓库

打开setting当中的maven,Local repository是本地仓库的路径

默认选这个,不行再选另一个

本地仓库存储路径修改

打上勾

复制路径,进入到本地仓库

找到.m2文件,复制。

之后在想要作为新本地仓库路径的地址新建一个目录,将.m2复制进去。

修改本地仓库路径

apply设置就可以了。

中央仓库

中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联⽹. 由 Maven 团队

这个仓库就是管理着jar包的仓库

维护,全球唯⼀.

仓库地址:中央仓库

可以通过https://mvnrepository.com 这个⽹站来查询依赖并通过maven下载jar包

我们可以把⾃⼰写好的Jar包上传到中央仓库(具备⼀定的要求), 也可以从中央仓库下载Jar包

查找jar包的坐标

首先访问 https://mvnrepository.com/

进⾏查找, ⽐如mysql

选择要添加的jar包

查看jar包的坐标,将坐标复制到pom.xml里面添加依赖就会自动下载

grouid是组织id,通常标识哪个组织,哪个公司开发的

第二个artifactID是项目id,到底是怎样的一个jar包

第三个version是版本。

修改镜像源

默认jar包的下载是去中央仓库下载的,但是下载速度可能会慢一些,所以可以设置国内的镜像源,加快下载的速度。

打上勾,去网上下载镜像源,我这里用的是阿里的,将镜像源下载到本地仓库的.m2文件里

apply就好了。

基本上所有的配置都要修改两次,一个是当前配置,一个是之后所有的项目配置。

 

一样的再修改一次。

私有服务器

私服: ⼀般由公司团队搭建的私有仓库,不对外开放,只对公司内部进行开放使用。

私服属于某个公司,或者某个部⻔, 往往需要⼀定权限.

有了私服之后, Maven依赖下载的顺序⼜发⽣了变化

当Maven需要下载资源的时候1. 先从本地仓库获取, 本地仓库存在, 则直接返回

如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回

如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了...

 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库⾥, 再为Maven的下载请求提供服务

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

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

相关文章

使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画

使用 C/OpenCV 实时播放火柴人爱心舞蹈动画 本文将介绍如何使用 C/OpenCV 库实时创建一个动画窗口:一个火柴人捧着爱心跳舞,同时另一个爱心从远处飞来并逐渐变大。动画会实时在 OpenCV 窗口中播放,直到用户按下按键退出。 准备工作 确保你…

复现论文报错解决

文章目录 一、 The detected CUDA version (12.9) mismatches the version that was used to compile PyTorch (11.8)二、error -- unsupported GNU version! gcc versions later than 11 are not supported!三、Unknown encoder libx264四、下载速度太慢、无法递归下载项目 一…

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …

MPMA:Preference Manipulation Attack Against Model Context Protocol

概要 MCP作为提供给LLM作为工具调用的标准化协议被广泛应用,但是MCP在安全方面还比较脆弱。本文提出了一种MPMA攻击方法通过在工具的名字或描述中插入具有操控性的文字、短语来操控LLM选择MCP server的过程。 不了解MCP的具体细节可以看看我写的这篇文章MCP 场景…

Vim 替换命令完整学习笔记

Vim 替换命令完整学习笔记 文章目录 Vim 替换命令完整学习笔记1. 核心概念2. 替换命令基本语法2.1 基本格式2.2 分隔符选择2.3 范围指定 3. 替换标志详解3.1 基础标志3.2 高级标志3.3 标志组合 4. 正则表达式在替换中的应用4.1 基础正则表达式4.2 字符类和量词4.3 分组和引用 5…

@RequestBody和@ResponseBody注解的作用是什么

@RequestBody和@ResponseBody注解的作用是什么 文章目录 @RequestBody和@ResponseBody注解的作用是什么@RequestBody和@ResponseBody注解的作用是什么SpringMVC的请求与响应模型1. 请求的处理流程1.1 DispatcherServlet作为入口1.2 Handler处理器与Controller1.3 HandlerAdapte…

质因数分解_java

什么是质因数? 说的通俗一点就是,这个数既是因数,又是质数。但是1不是质因数(不是质数)。然后比如122*2*3,里边的2,3都是质数,并且也是12的因数,所以2、3就是12的质因数。 因为本人很菜&#xf…

SpringDoc集成到Springboot

1.Maven引入jar包 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency> 2.新建OpenApiConfig文件&#xff0c;代码如下 package com.elan…

Memory Repair (五)

Compression Algorithm and Fuse Box Organization 通常情况下&#xff0c;这部分信息对于实现BISR&#xff08;内置自修复&#xff09;并非必需&#xff0c;但对于诊断问题可能有所帮助。 Compression and Fuse Box Organization Overview BISR controller采用的压缩算法基于两…

双系统(win+linux)根目录扩容(不掉GPU驱动)

先看效果&#xff0c;原来的根目录仅50G&#xff0c;从/home节点分出扩容后变为250GB&#xff1b; 因为根分区是系统当前运行的文件系统&#xff0c;Linux系统启动后会锁定根分区&#xff0c;防止对其进行修改。这时使用系统内的工具&#xff08;如gparted&#xff09;调整根分…

oracle 23ai对象注释新特性ANNOTATIONS

我们知道以前数据库版本注释方式是用COMMENT&#xff0c;如下 COMMENT ON COLUMN 表名.字段名 IS 字段注释; oracle 23ai对象注释有新增了ANNOTATIONS&#xff0c;比如创建如下表&#xff1a; SQL> create table test.t_user( id number, name varchar(200) ANNOTATIONS …

VMware 虚拟机开机自启动配置指南

方法一&#xff1a;通过启动文件夹设置&#xff08;简单版&#xff09; 打开启动文件夹&#xff1a; 按下 Win R 快捷键输入 shell:startup 并回车 创建启动脚本&#xff1a; 在打开的文件夹中右键新建一个文本文件命名为 vm_start.bat输入以下内容&#xff1a; echo off &…

2025pmx文件怎么打开blender和虚幻

pmx文件怎么打开blender 前言 一坑接一坑。 意思很简单&#xff0c;就是给Blender、3dsmax装插件&#xff0c;然后就可以打开了。但是报错就要多走很多错路。 记录一下。 内容 参考文章&#xff1a;https://blog.csdn.net/c858845275/article/details/144180555 我的Ble…

Kotlin基础语法五

继承与重载的open关键字 KT所有的类&#xff0c;默认是final修饰的&#xff0c;不能被继承&#xff0c;和Java相反 open&#xff1a;移除final修饰 类型转换 open class Person2(private val name: String) {fun showName() "父类 的姓名是【$name】"// KT所有的…

MySQL数据库:关系型数据库的基石

文章目录 每日一句正能量前言一、MySQL简介&#xff08;一&#xff09;什么是MySQL&#xff1f;&#xff08;二&#xff09;MySQL的历史 二、MySQL的特点&#xff08;一&#xff09;开源与免费&#xff08;二&#xff09;高性能&#xff08;三&#xff09;跨平台支持&#xff0…

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收扫描任务信息通过调用masscan启动探测任务,获取进度和结果信息,…

ARM 和 x86_64是什么关系

什么是 ARM 和 x86_64&#xff1f; 它们都是 CPU 指令集架构&#xff08;ISA&#xff09; 指令集架构&#xff08;Instruction Set Architecture&#xff09;就是&#xff1a; CPU 能够理解和执行的“语言”和“命令格式”。 类比解释&#xff1a;指令集就像“语言” 类比对…

nginx配置中有无‘‘/’’的区别

在Nginx配置中&#xff0c;location指令末尾的斜杠/和proxy_pass目标地址末尾的斜杠/组合使用会产生显著差异。以下是四种组合的区别详解&#xff1a; ​​核心区别对比表​​ 配置方案匹配规则请求URI传递逻辑实际转发效果示例location /api/ proxy_pass ...701/仅匹配/api/…

系统安全之身份认证

本篇我们对常用的身份认证协议做简要的梳理&#xff0c;包括主流的 HTTP 相关认证协议以及证书密钥对、新兴的 WebAuthn 认证。 HTTP 协议认证 RFC 7235 中定义了 HTTP 协议的认证框架&#xff0c;要求在支持 HTTP 协议的服务器&#xff0c;如果访问服务的身份验证失败&#…

部署http服务

使用flask搭建一个http服务&#xff0c;能够通过本地的另外一个终端访问对应接口&#xff0c;拿到服务端的计算结果 服务端&#xff1a; 创建一个test_http_dtw.py并运行 from flask import Flask, request, jsonifyapp Flask(__name__)# 示例分析函数 def analysis(data):…