用Maven构建项目和管理依赖

news2024/9/26 1:18:25

运行本篇中的代码:idea专业版或者idea社区版本(2021.1~2022.1.4)

用Maven构建项目和管理依赖

  • 1. 初见maven
  • 2. maven在网站项目中的应用
  • 3. maven和idea的关系
  • 4. maven的使用
    • 4.1 项目构建
      • 4.11 在idea创建maven项目
      • 4.12 利用maven命令打包项目
    • 4.2 依赖管理
      • 4.21导入依赖
      • 4.22 管理依赖:
        • 依赖传递
        • 用Maven Helper插件查看依赖关系
  • 5. maven仓库
    • 5.1 本地仓库
      • 5.11 如何查看maven本地仓库的位置?
      • 5.12 如何查找依赖在本地仓库中的位置?
    • 5.2 远程仓库
      • 5.21 中央仓库
        • 在中央仓库中查找依赖坐标
      • 5.22 国内源
        • 设置国内源
      • 5.23 私服
  • 6 再看用maven导入依赖并解决报错:Dependency '依赖:依赖坐标' not found


1. 初见maven

maven的官方网站:https://maven.apache.org/index.html
maven的官方描述:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

大白话理解官方描述就是:Apache Maven是一个软件项目管理工具。基于项目对象模型(POM)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档

2. maven在网站项目中的应用

我们写个网站,只用到jdk里面的基础类库是远远不够的,还会用到各种各样的第三方库等等。想要在代码中直接调用第三方库的功能接口,就需要在项目中导入第三库包的依赖。

什么依赖?在一个开发过程项目中,需要用到的所有的外部资源都是依赖。

在一个网站项目中使用maven,maven可以助我们构建,打包项目;简化导依赖的过程;并且帮我们管理依赖
(ps:maven在网站项目中主要有以上作用,maven在其他场景中还有很多其他功能!)

任何一个java程序,都可以用maven来管理!

3. maven和idea的关系

maven和idea是两个独立的东西,但是idea里面集成了maven
什么意思呢,我们都用12306订过车票吧,12306是一个订车票系统,但是现在在12306里面还能点外卖。idea里面集成了maven,就相当于12306里面集成了一个外卖系统。

4. maven的使用

在网站项目开发中,maven有两个核心功能,分别是项目构建和管理依赖。

4.1 项目构建

4.11 在idea创建maven项目

由于idea社区版本(2021.1~2022.1.4)在创建maven项目的时候,存在一个不稳定复现的bug,也就是直接通过new创建maven项目,idea可能会卡死:
在这里插入图片描述
所以我们通过先Close Project->再New Project的方式创建maven项目。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述项目创建成功后,idea的右侧会出现一个maven选项。
在这里插入图片描述项目创建后,如果没有在idea右侧看到maven选项,先鼠标右键->然后在弹出的选择列表中选中AFS->OK
在这里插入图片描述在这里插入图片描述

maven项目创建成功后,会生成一系列的目录结构:
在这里插入图片描述

4.12 利用maven命令打包项目

当我们开发了一个项目后,代码需要经过编译,测试,打包,发布等流程。麻烦的是,只要修改代码,都要把上述流程再经历一遍,如果代码反复调试修改,这个流程也要反复进行。但是maven给我们提供了一套简单的命令来帮助我们进行上述流程。

以下都是maven命令:
在这里插入图片描述clean命令:删除target 目录及内容
package命令:打包
install命令:发布包到本地
deploy命令:发布包到远程仓库

maven的package命令:打包。把java工程打成jar包,把web工程打成war包。

什么是jar包?什么是war包?jar包和war包都是一种压缩文件。打成jar包是把项目中的一些代码进行打包,打好的jar包可以引入到其他项目中,直接使用jar包中的类和属性。也可以打成可执行jar包,可执行jar包可以通过java -jar命令执行。打成war包是把项目中的所有东西进行打包,统称用于网站项目。

例如:把maven_demo1项目中的所有class文件打成jar包。
在这里插入图片描述
在这里插入图片描述maven的clean命令:删除target 目录及内容。
在这里插入图片描述

4.2 依赖管理

依赖通常就是一个jar包。maven的主要功能就是帮我们简化导依赖的过程,并且帮我们管理依赖。

4.21导入依赖

在项目中导入依赖,如果不用maven的话,我们需要先下载jar包->然后手动添加jar包到项目中。

如何用maven导入依赖?
用maven构建项目后,项目中有一个pom.xml文件。pom.xml是Maven的配置文件,用于描述项目的各种信息。
在这里插入图片描述

用maven导入依赖,可以通过修改pom.xml文件的配置直接获取到jar包,然后自动下载到本地,并添加搭配项目中。所以我们只做一件事:根据具体需要,修改pom.xml文件的配置即可

如何根据具体需要,修改pom.xml文件的配置项?导入哪个依赖,就在pom.xml文件内的dependencies双标签内添加该依赖的坐标。

什么是依赖的坐标?依赖在maven仓库中的位置。

不知道依赖坐标的情况下,如何得到要导入的依赖坐标?到maven中央仓库查询界面中搜索寻找该依赖->进一步得到依赖坐标。maven中央仓库查询界面:https://mvnrepository.com/。

<!-- pom.xml文件内没有看到dependencies双标签,就自己写一个--> 
<dependencies>
 <!--⾥⾯放置项⽬的依赖坐标, 可为多个 --> 
</dependencies>

总结:如何用maven在项目中导入依赖?先在pom.xml文件内的dependencies双标签内添加具体的依赖坐标 ->然后点击刷新按钮

例如,用maven在项目中导入mysql8.0依赖:
在这里插入图片描述
在这里插入图片描述

4.22 管理依赖:

用maven在项目中导入所需的依赖后,maven是如何帮我们管理依赖的呢?

依赖传递

在上面导mysql8.0.30依赖的时候,我们只在pom.xml文件中添加了mysql依赖的坐标,但是实际导入到项目中的依赖却有两个:
在这里插入图片描述这是因为mysql依赖中还用到了protobuf依赖,maven帮我们导入mysql8.0.30依赖的时候,会自动把mysql.0.30依赖中用到的依赖也帮我们导入到项目中。
如果我们手动导入mysql依赖,意味着我们必须要清楚mysql依赖中用到了哪些依赖,这些依赖版本间又有什么联系,然后再把它们依次手动导入到项目中,显然这是非常麻烦的。
但是由于maven的依赖具有传递性,我们只需要导入直接依赖就行了。

什么是直接依赖?如图,项目A通过maven引入了两个依赖,分别是项目B和JarA。此时,项目B和JarA就是项目A的直接依赖。引入JarA依赖的时候,因为依赖传递,又自动引入了JarB和JarC,JarB和JarC就是项目A的间接依赖。
在这里插入图片描述

用Maven Helper插件查看依赖关系

什么是插件:一个插拔式的工具。这个工具把具体某个辅助功能集成在一起。用的时候通过连接就能用,不用的时候断开连接就用不了。比如耳机,U盘,一段代码等都可以理解成一个插件。

下载Maven Helper插件:
在这里插入图片描述在这里插入图片描述

插件下载好以后点击ok,然后重启idea。

然后在pom.xml文件的Dependency Analyzer页就可以看到项目的依赖关系了。
在这里插入图片描述

5. maven仓库

maven仓库分为本地仓库和远程仓库,远程仓库又分为中央仓库,私有仓库(私服)和其他公开开库。

5.1 本地仓库

maven会在本地创建一个目录,这个目录就是本地仓库的位置。当我们用maven成功把jar包导入到项目中后,意味着在本地下载了这个jar包,并把它保存到在maven本地仓库中

maven本地仓库本来是空的,随着maven的使用,该仓库下文件会越来越多。

5.11 如何查看maven本地仓库的位置?

在这里插入图片描述

在这里插入图片描述

5.12 如何查找依赖在本地仓库中的位置?

如果把仓库比喻成菜鸟驿站,那么仓库里存放的依赖就是包裹,依赖坐标就是包裹的取件码。
在这里插入图片描述在这里插入图片描述

5.2 远程仓库

远程仓库中包括中央仓库,私有仓库(私服),其他公开库。

5.21 中央仓库

中央仓库中存放着最全的我们在开发过程中可能需要的依赖。maven中央仓库全球只有一个,由maven团队统一维护,服务于整个互联网。
maven中央仓库地址:https:/repo1.maven.org/maven2
maven中央仓库查询界面:https://mvnrepository.com/
查询界面中的依赖虽然具有一定的滞后性,但我们通常还是从查询界面中查询依赖坐标并下载依赖。

在中央仓库中查找依赖坐标

以查找mysql为例:
进入maven中央仓库查询界面:https://mvnrepository.com/,进行搜索查找
在这里插入图片描述选择要添加的jar包版本
在这里插入图片描述查看jar包对应坐标
在这里插入图片描述

5.22 国内源

国内源属于一种公开库。因为maven中央仓库在国外,国内访问时比较慢,为了在国内也能快速访问到资源,所以国内有些人/团队就搞了国内版本的中央仓库,内容和maven中央仓库几乎一样,而且也公开,这就是国内源。常见的国内源有阿里云仓库,华为仓库等。

设置国内源

如何使用国内源?为当前项目配置国内源->为新项目配置国内源。

国内源的配置文件是settings.xml,所以我们要在本地maven中找到这个文件。

以下是为我本机的当前项目配置阿里云仓库:
在idea中查找settings.xml文件在本机的位置,不同电脑中settings.xml文件路径不同,以我本机为例:
在这里插入图片描述在这里插入图片描述在文件资源管理器打开settings.xml文件,在mirrors节点上,添加内容如下:

<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>central</mirrorOf>
 <name>阿⾥云公共仓库</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>

如果在文件资源管理器对应路径下没有找到settings.xml文件,可以把别人已经配置好国内源的settings.xml文件直接cv到本机路径下。
在这里插入图片描述以上完成了为本机的当前项目配置阿里云仓库。在之后的项目中,如果依然需要使用阿里云仓库,在新项目中确认一下settings文件的路径即可。
在这里插入图片描述

5.23 私服

一般由公司团队搭建的私有仓库。私服属于某个公司,或者某个部⻔,使用时往往需要⼀定权限。

如何使用私服,同使用国内源一样,也是通过settings.xml文件进行配置的。

6 再看用maven导入依赖并解决报错:Dependency ‘依赖:依赖坐标’ not found

从上文可以得知如何用maven在项目中导入依赖:先在pom.xml文件内的dependencies双标签内添加具体的依赖坐标 ->然后点击刷新按钮。

如果机器上能访问本地仓库,中央仓库(国内源),点击刷新按钮后,
maven会(自动)先去本地仓库中查找是否有依赖坐标对应的jar包,如果有,则(自动)导入到项目中。如果没有,则(自动)去中央仓库(/国内源)中下载对应的jar包到本地仓库,然后再(自动)导入到项目中。

在这里插入图片描述

如果机器上不但能访问本地仓库,中央仓库(国内源)还能访问私服的话,点击刷新按钮后,
maven会(自动)先去本地仓库中查找是否有依赖坐标对应的jar包,如果有,则(自动)导入到项目中。**如果本地仓库没有,就从私服请求,私服存在该资源,则(自动)导入到项目中
**如果私服上不存在该资源,则从中央仓库(/国内源)下载,中央仓库不存在,就报错了。
如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,最后再为Maven的下载请求提供服务

所以,当用maven导入依赖时,出现报错:Dependency ‘mysql:mysql-connector-java:8.0.32’ not found 的原因是,maven本地仓库(/私服)中不存在依赖mysql:mysql-connector-java:8.0.32,此时短暂的报错意味着maven正在从中央仓库中(或国内源)下载这个依赖到本地仓库,等待片刻后下载完成,报错也会自动消失。

在这里插入图片描述
等待片刻后,依赖mysql:mysql-connector-java:8.0.32成功导入到项目中。
在这里插入图片描述

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

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

相关文章

“QtGraphicalEffects“ is not installed

【1】问题&#xff1a;qml项目报 module "QtGraphicalEffects" is not installed 【2】解决方法&#xff1a;将qml目录中的"QtGraphicalEffects" 拷贝到工程release目录

3种 Ajax 方式:原生、jQuery、axios

毋庸多言&#xff0c;Ajax 技术在网页中是划时代的进步。学会它&#xff0c;可以说掌握了一招半式&#xff0c;不再是门外汉了。 这里将 3 种 Ajax 方式一并呈上。 感谢 https://run.uv.cc/ 平台&#xff0c;以及 /api 接口 https://andi.cn/page/621639.html https://andi…

用Java手写jvm之模拟类加载器加载class

写在前面 本文来尝试模拟类加载器加载class的过程。 1&#xff1a;程序 首先来定义类加载器类&#xff1a; /*** 类加载器* 正常应该有bootstrap&#xff0c;ext&#xff0c;app三个类加载器&#xff0c;这里简单起见&#xff0c;只用一个来模拟了*/ public class ClassLoa…

入门 PyQt6 看过来(案例)20~ 动态树

​ 1 QTreeWidget树类 QTreeWidget类可以呈现数组、数列等数据&#xff0c;并且可以进行交互&#xff0c;它使用标准的数据模型&#xff0c;其单元格数据通过QTableWidgetItem对象来实现。 QTreeWidget继承自QTreeView&#xff0c;是封装了默认Model的QTreeView&#xff0c;其…

C++ | Leetcode C++题解之第312题戳气球

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxCoins(vector<int>& nums) {int n nums.size();vector<vector<int>> rec(n 2, vector<int>(n 2));vector<int> val(n 2);val[0] val[n 1] 1;for (int i 1; i &l…

ElasticSearch入门(六)SpringBoot2

private String author; Field(name “word_count”, type FieldType.Integer) private Integer wordCount; /** Jackson日期时间序列化问题&#xff1a; Cannot deserialize value of type java.time.LocalDateTime from String “2020-06-04 15:07:54”: Failed to des…

Django文件上传

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介…

【计算机网络】IP地址和子网掩码(子网掩码篇)

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言什么是子网掩码?子网掩码的组成组成规则表示方法子网掩码的分类标准(默认)子网掩码:变长子网掩码(VLSM):全零和全一子网掩码:子网掩码的计算确定IP地址类别及默认子网掩码计算子网掩码根据子网数…

橙单中台化低代码生成器

​橙单中台化低代码生成器 在当今快速发展的软件开发领域&#xff0c;橙单中台化低代码生成器凭借其强大的功能和灵活的架构&#xff0c;成为了开发者不可或缺的利器。本文将介绍橙单的基本信息、特点以及如何快速部署和使用。 软件简介 橙单中台化低代码生成器是一款开源的低…

被华为的AI扩图震惊到,超自然超好看!

美颜、P图对大家来说都不陌生&#xff0c;但是近期在互联网实火的各种AI扩图你了解多少&#xff1f;它既能满足图片构图时进行延伸美化&#xff0c;又能在未知的创意里无限探索。 近期&#xff0c;华为Pura 70系列手机获推HarmonyOS 4.2.0.172 更新&#xff0c;华为Pura 70 Pr…

事务性邮件API的功能优势?考虑哪些指标?

事务性邮件API的性能如何优化&#xff1f;怎么选择邮件API接口&#xff1f; 在当今数字化时代&#xff0c;企业需要一种高效、可靠的方法与客户沟通。事务性邮件API成为解决这一需求的重要工具。AokSend将探讨事务性邮件API的功能优势及考虑的关键指标。 事务性邮件API&#…

如何在 Kubernetes 中使用 ClickHouse 和 JuiceFS

ClickHouse 结合 JuiceFS 一直是一个热门的组合&#xff0c;社区中有多篇实践案例。今天的文章来自美国公司 Altinity&#xff0c;一家提供 ClickHouse 商业服务的企业&#xff0c;作者是 Vitaliy Zakaznikov&#xff0c;他尝试了这个组合并公开了过程中使用的代码。原文有两篇…

基于DreamBooth的“妙鸭相机”——一次不太成功的实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

Encoder-Decoder:Seq2seq

目录 一、编码器解码器架构&#xff1a;1.定义&#xff1a;2.在CNN中的体现&#xff1a;3.在RNN中的体现&#xff1a;4.代码&#xff1a; 二、Seq2seq&#xff1a;1.模型架构&#xff1a;1.1编码器&#xff1a;1.2解码器&#xff1a; 2.架构细节&#xff1a;3.模型评估指标BLEU…

C# Unity 补全计划 泛型

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 1.什么是泛型 泛型&#xff08;Generics&#xff09;是C#中的一个强大特性&#xff0c;允许你编写可以适用于多种数据类型的可重用代码&#xff0c;而不需要重复编写…

第二证券:刚刚!亚太股市,跌麻了!

今天早盘&#xff0c;亚太股市全线崩跌。日经225指数在大幅低开之后快速下行&#xff0c;最大跌幅近5%&#xff1b;韩国、澳大利亚股指亦迎来逾越2%以上的暴降。那么&#xff0c;毕竟发生了什么&#xff1f; 剖析人士认为&#xff0c;或许仍是与日元套息有关。从前史来看&…

Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules。Android studio纯java代码报错

我使用java代码 构建项目&#xff0c;初始代码运行就会报错。我使用的是Android Studio Giraffe&#xff08;Adroid-studio-2022.3.1.18-windows&#xff09;。我在网上找的解决办法是删除重复的类&#xff0c;但这操作起来真的太麻烦了。 这是全部报错代码&#xff1a; Dupli…

mysql环境的部署安装及数据库的操作(twenty day)

一、centos7 中安装 mysql 8.x 1、下载安装包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2、解压 tar -zxvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 3、卸载mariodb yum remove -y *mariadb* 4、依次安装依赖包…

SC215TA是C型/ PD和DPDM快速充电控制器,集成了内部反馈补偿PD3.0快充

SC215TA是C型/ PD和DPDM快速充电控制器&#xff0c;集成了内部反馈补偿。它符合最新的C型和PD 3.0标准&#xff0c;并支持专有的高压快速充电协议与DPDM接口。它的目标是旅行适配器的应用程序。SC215TA通过集成USB PD基带PHY、Type-C检测、DPDM PHY、VBUS放电路径、VCONN电源、…

旧衣回收小程序,旧衣回收行业新态势

进入网络时代后&#xff0c;互联网改变了大众的生活&#xff0c;传统的回收模式逐渐被淘汰&#xff0c;新兴的互联网旧衣回收受到了大众的关注&#xff01;通过技术创新为行业带来新模式&#xff0c;不断优化回收流程&#xff0c;提高回收效率&#xff0c;提升居民的回收体验&a…