初始JavaEE篇 —— Maven相关配置

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程程(ಥ_ಥ)-CSDN博客

所属专栏:JavaEE

目录

介绍

创建第一个Maven项目

Maven的核心功能 

项目构建

依赖管理

添加依赖

依赖排除 

依赖调解

Maven仓库

配置本地仓库

Maven设置国内源


介绍

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

简单来说的话,就是 Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。

Maven最主要的核心功能是 项目构建 与 管理依赖。

创建第一个Maven项目

IDEA本身已经集成了Maven,无需去安装任何插件。

File -> New -> Project:

创建Maven与创建普通的项目并不太大的差别。Maven只是将 Build System 选项改成了 Maven。

创建成功的界面: 

Maven的核心功能 

接下来我们就来学习Maven的核心功能:

项目构建

Maven 提供了标准的跨平台(Linux、Windows、MacOS等)的自动化项目构建方式。

当我们在开发完一个项目之后,代码需要经过编译、测试、打包、发布逢流程,而每次代码的修改都需要经过上述流程,如果代码反复调试修改,上述流程就需要反复进行,导致这个过程十分麻烦,而Maven提供了一套简单的命令来完成项目的构建。

现阶段,我们并不需要知道上述全部的命令,只需了解下面几个:

1、clean:清理项目,通常会删除target目录下的所有文件(包括target目录),确保新的构建是从最原始开始的。简单理解就是为了避免上一次运行的结果对本次运行产生影响。

2、compile:编译项目的源代码。

3、package:将编译好的代码打包成可分发的格式。例如,jar、war文件。 

注意:

1、compile这里的编译将会去 编译src->main->java中的所有文件,并处理 src->main->resources中的所有文件。

2、打包是将编译生成的所有的 .class文件 全部放到一起,打包成jar包或者war包。那什么是jar包?什么又是war包呢?jar包其实就类似于一个文件夹,里面包含了各种文件,同理war包也是如此,只是针对这些文件夹起了个别名而已。而jar包与war包都是经过编译之后的文件组成,这些文件也是可以直接运行的,正所谓"write once,run anywhere"。war包通常应用于网站中。

效果演示:

clean:

注意:target目录是在编译之后就会自动生成的。 

有了上述这些命令之后,我们并不需要再去命令行中敲了,只需在IDEA中双击Maven命令即可完成上述相关的操作。

依赖管理

什么是依赖?依赖是指当前项目运行所需的jar包,正因为需要基于这些文件才能运行,因此这些文件就被称为依赖。

注意:这里可能有小伙伴有疑惑:之前不是说这些文件称为jar包吗?怎么现在又叫依赖呢?jar包是文件存在的一种方式,而依赖是具体的jar包中的文件。jar包代指的是文件的一种格式,而依赖是指项目所需的外部库或资源。

其实依赖我们并不是第一次见,C语言阶段所导入的头文件,Java阶段所导入的包,这些都是项目所需的外部库,也就是依赖。

添加依赖

我们前面在学习JDBC时,也手动导入了MySQL所需的依赖。

代码演示:

    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>
    </dependencies>

参数解析: 

组织ID一般是某个公司或者某个组织域名的倒写。这里就是 com.mysql。

项目ID就是指具体哪个项目。

版本号是指项目具体的版本。

以上三者可以确定一个唯一的依赖,或者说一个唯一的项目。

组织ID找到对应的公司或者组织,项目ID找到具体是哪个项目,版本号找到具体是哪个版本。

以上只是正确找到了所需的外部库,如果想要导入到我们的项目中,就得将这些外部库,也就是jar包下载到我们本地仓库中来。 

当我们修改pom文件之后,在文件的有上角会有一个刷新的小标志,我们只需要点击这个标志,然后观察右边是否出现了对应的依赖即可。 

如果没有找到右上角的刷新图标也没关系,我们可以直接去找 Maven 中的刷新:

每次修改pom文件之后,一定要记得及时刷新。 

这里还推荐一个插件:Maven Helper。

找到 File -> Settings -> Plugins:

下载好之后,重启一下IDEA即可。

在重启IDEA之后,就可以去查看 依赖的关系了:

早期我们没有使用Maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。比如A 依赖B,B依赖C,那么 A项目引入B 的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。 但使用maven的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。

上述JDBC所需的依赖是MySQL,但MySQL自身也是依赖于protobuf的,因此还得将导入protobuf,这里就是Maven自己完成了,而不需要我们手动导入。

JDBC是直接依赖于MySQL,间接依赖于protobuf的。 

依赖排除 

我们已经知道了,一个项目依赖的库有很多,但有些库是随着别的库一起导入的,且我们的项目中用不到该库,那我们就可以排除这些依赖。 

代码演示:

    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>

            <!-- 排除依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>com.google.protobuf</groupId>
                    <artifactId>protobuf-java</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

排除之后如果需要的话,也可以继续加上: 

    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>

            <!-- 排除依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>com.google.protobuf</groupId>
                    <artifactId>protobuf-java</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <!-- 加上依赖 -->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.25.1</version>
        </dependency>
    </dependencies>

除了使用代码排除之后,还可以手动排除:

当我们使用这种方式去排除依赖时,它会将我们代码中添加依赖的部分直接给删除。  

但是上面这种手动排除的方式不一定会成功。

例如,当我们把添加依赖的代码改成下面这样时:

    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>
    </dependencies>

 这里我们要排除的protobuf,就会失败,IDEA会有一个弹窗:

就是说使用Maven Helper插件去排除依赖时,被排除的依赖得是父依赖,即其自身没有父依赖。 

依赖调解

当我们导入依赖A时,会随之导入上述诸多依赖,但是会存在一个问题:依赖C有两个导入哪一个呢? Maven会采用最短路径优先的原则去选择依赖,这里A->B->C路径更短,所以会选择这条路,当然我们也可以选择指定某个依赖的版本,这就需要先去排除依赖C,然后再添加依赖C,并指定对应的版本。

Maven仓库

我们在添加依赖并刷新时,对应的依赖就会被下载到本地的Maven仓库。而下次我们再去添加依赖时,首先会在本地仓库中去寻找,如果没有再去中央仓库中下载到本地仓库。

在了解中央仓库之间,先了解仓库的分类,仓库分为两种:本地仓库 与 远程仓库。本地仓库是指本地硬盘上存储的,远程仓库是指,除本地仓库之外的所有仓库的统称,包括:中央仓库、私服、其他公共仓库。中央仓库是全球唯一的一份(超级巨大)、私服是公司或组织只开放给内部人使用的、其他公共仓库是指公司或组织为了更方便的访问,将公共仓库中的依赖拷贝到本地服务器了,对外提供开放的。

配置本地仓库

本地仓库一般都是在C盘的,而其中下载的依赖会很多,我们可以将路径改为D盘或者其他盘。

File -> Settings:

中央仓库的地址:Central Repository:

可以通过 https://mvnrepository.com/ 这个网站来查询(如果查询不到,再去中央仓库查询)。

Maven设置国内源

因为中央仓库在国外,所以下载起来会比较慢。因此咱们选择借助国内一些公开的远程仓库来下载资源。

首先得找到 C:\Users\jiume\.m2\settings.xml 并双击打开:

代码:

        <mirror>
          <id>aliyunmaven</id>
          <mirrorOf>*</mirrorOf>
          <name>阿里云公共仓库</name>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>

做完以上操作,Maven就已经设置好国内源了。 

1、配置当前项目:当前项目在配置本地仓库时,已经配置完了(User setting file)。

2、配置新项目:

与之前的操作一样。

好啦!初始JavaEE篇 —— Maven相关配置 的学习之旅 就到此结束啦!我们下一期再一起学习吧!

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

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

相关文章

Linux套接字通信学习

Linux套接字通信 代码源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/CThreadSocket 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层)&#xff0c;而底层的数据封装与解封装&#xff08;如TCP/IP协议栈的功能&#xff09;通常由操作系统、网络协…

职场常用Excel基础01-数据验证

大家好&#xff0c;excel在职场中使用非常频繁&#xff0c;今天和大家一起分享一下excel中数据验证相关的内容~ 在Excel中&#xff0c;数据验证&#xff08;Data Validation&#xff09;是一项非常有用的功能&#xff0c;它可以帮助用户限制输入到单元格中的数据类型和范围&am…

建造者设计模式学习

1.介绍 建造者模式是一种创建型设计模式&#xff0c;它将一个复杂对象的构建过程与它的表示分离&#xff0c;使得相同的构建过程可以创建不同的表示。通过分步骤地构建对象&#xff0c;建造者模式提供了更细粒度的控制和灵活性&#xff0c;特别适合需要灵活创建复杂对象的场景…

ROS2+OpenCV综合应用--10. AprilTag标签码追踪

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上&#xff0c;增加了小车摄像头云台运动的功能&#xff0c;摄像头会保持标签码在视觉中间而运动&#xff0c;根据这一特性&#xff0c;从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…

mysql乱码、mysql数据中文问号

网上排出此错误方法的很多&#xff0c;但是 都不简洁&#xff0c;找不到根本原因 主要排查两点&#xff1a; 1.代码中jdbc链接的编码规则 urljdbc:mysql://localhost:3306/title?useUnicodetrue&amp;characterEncodingutf8 将characterEncoding设置为utf8 2.设置mysq…

Presto-简单了解-230403

presto是什么了解一下&#xff1a; 秒级查询引擎&#xff08;不做存储&#xff09;&#xff0c;GB-PB级不依赖于yarn&#xff0c;有自己的资源管理和执行计划支持多种数据源&#xff1a;hive、redis、kafka presto架构 presto优缺点 presto优点 内存到内存的传输&#xff0…

openGauss连接是报org.opengauss.util.PSQLException: 尝试连线已失败

安装好高斯数据库后然后用java连接时报如下错误: 解决方法: 在openGauss数据库的安装路径下/opt/opengauss/data/single_node&#xff08;这个路径根据自己实际情况变化&#xff09;有个pg_hba.conf文件&#xff0c;修改里面host内容如下&#xff0c;我这里设置的是所有ip都能…

mybatis-plus自动填充时间的配置类实现

mybatis-plus自动填充时间的配置类实现 在实际操作过程中&#xff0c;我们并不希望创建时间、修改时间这些来手动进行&#xff0c;而是希望通过自动化来完成&#xff0c;而mybatis-plus则也提供了自动填充功能来实现这一操作&#xff0c;接下来&#xff0c;就来了解一下mybatis…

【Java项目】基于SpringBoot的【人职匹配推荐系统】

【Java项目】基于SpringBoot的【人职匹配推荐系统】 技术简介&#xff1a;本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;人职匹配推荐系统分为管理员和用户、企业三个权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个…

Flutter 调试环境下浏览器网络请求跨域问题解决方案

本篇文章主要讲解&#xff0c;Flutter调试环境情况下&#xff0c;浏览器调试报错跨域问题的解决方法&#xff0c;通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期&#xff1a;2024年12月28日 作者&#xff1a;任聪聪 报错现象&#xff1a; 报文信息&#xf…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation&#xff1f; 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability&#xff1b;在src/main/syscap.json(此文件需要手动创建&#xff09;中添加如下内容 {"devices": {"gen…

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具)

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果&#xff08;不借助三方工具&#xff09; 核心代码完整代码在线示例 地球中展示视频可以通过替换纹理的方式实现&#xff0c;但是随着摄像头和无人机的流行&#xff0c;需要视频和场景深度融合&#xff0c;简单的实现方…

【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型

1. 背景介绍 虽然现在大模型微调的文章很多&#xff0c;但纸上得来终觉浅&#xff0c;大模型微调的体感还是需要自己亲自上手实操过&#xff0c;才能有一些自己的感悟和直觉。这次我们选择使用llama_factory来微调chatglm-4-9B大模型。 之前微调我们是用两块3090GPU显卡&…

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

&#x1f389;【小程序上线第三天&#xff01;突破25用户大关&#xff01;】&#x1f389; 嘿&#xff0c;大家好&#xff01;今天是我们小程序上线的第三天&#xff0c;我们的用户量已经突破了25个&#xff01;昨天还是16个&#xff0c;今天一觉醒来竟然有25个&#xff01;这涨…

【工具变量】国际消费中心城市DID数据(2007年-2023年)

数据简介 国际消费中心城市的定位是一个国家乃至全球消费市场消费资源的集中地和关键枢纽&#xff0c;该城市特质不单顺应我国对外交流与开放的不断扩大的趋势&#xff0c;其培育和建设国际消费中心城市的一大意义在于&#xff0c;以地区地域资源中心定位&#xff0c;来推动周围…

如何修复 WordPress 中的“Error establishing a database connection”问题

如何修复 WordPress 中的“Error establishing a database connection”问题 在使用 WordPress 建站时&#xff0c;如果你看到“Error establishing a database connection”的提示&#xff0c;不要慌张。这通常意味着网站无法连接到数据库&#xff0c;因此无法显示内容。下面…

streamlit、shiny、gradio、fastapi四个web APP平台体验

streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是&#xff1a;web APP平台哪个好&#xff1f;该用哪个&#xff1f;刚开始只有用streamlit和shiny&#xff0c;最近体验了一下gradio和fastapi&#xff0c;今天根据自己的体会尝试着回答一下。 使用R语…

http报头解析

http报文 http报文主要有两类是常见的&#xff0c;第一类是请求报文&#xff0c;第二类是响应报文&#xff0c;每个报头除了第一行&#xff0c;都是采用键值对进行传输数据&#xff0c;请求报文的第一行主要包括http方法&#xff08;GET&#xff0c;PUT&#xff0c; POST&#…

Qwen-Agent

文章目录 一、关于 Qwen-Agent更新准备&#xff1a;模型服务免责声明 二、安装三、快速开发步骤 1&#xff1a;添加自定义工具步骤 2&#xff1a;配置 LLM步骤 3&#xff1a;创建智能体步骤 4&#xff1a;运行智能体 四、FAQ1、支持函数调用&#xff08;也称为工具调用&#xf…

flux文生图模型实践

flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools&#xff0c;这是一套模型全家桶&#xff0c;旨在为FLUX.1基础文本转图像模型添加控制和可操纵性&#xff0c;从而实现对真实图像和生成图像的修改和重新创建。FLU…