深度解析JDK和Maven究竟是什么,两者之间有什么联系

 更新时间:2025年08月22日 10:42:46   作者:℡余晖^  
JDK是Java开发基础工具包,负责编译、运行,Maven是项目管理工具,处理依赖和构建流程,二者协作支撑项目全生命周期,配置国内外镜像可优化依赖下载效率,本文主要给大家讲解JDK和Maven究竟是什么,两者之间有什么联系,感兴趣的朋友一起看看吧

本文主要是为了讲清楚JDK和Maven究竟是什么,两者之间有什么联系?

JDK(Java Development Kit)和Maven是Java开发中两个核心工具,但它们的定位和功能完全不同。我将从两者各自的作用,联系和常见误解三个维度来进行详细说明。

一、JDK 是什么?

JDK 是 ​​Java 开发工具包(Java Development Kit)​​,是 Java 生态中最基础的工具集,​​所有 Java 程序的开发、编译、运行都依赖 JDK​​。它包含以下核心组件:

组件作用
​JRE(Java Runtime Environment)​Java 运行时环境,包含 JVM(Java 虚拟机)和核心类库(如 java.lang),负责执行编译后的字节码(.class 文件)。
​javac 编译器​将 Java 源代码(.java 文件)编译为字节码(.class 文件)。
​jdb 调试工具​用于调试 Java 程序。
​jconsole/jvisualvm​监控 JVM 运行状态的工具(如内存、线程)。
​其他工具​如 jar(打包工具)、jps(查看进程)等。

​关键结论​​:没有 JDK,就无法编写、编译或运行任何 Java 程序(即使是简单的 HelloWorld)。

二、Maven 是什么?

Maven 是 ​​Java 项目的构建与依赖管理工具​​(也可用于其他语言,但主要服务于 Java),核心解决两大问题:

1. ​​依赖管理​​

传统 Java 项目需要手动下载第三方库(如 SpringMyBatis),并处理版本冲突、依赖传递(A 依赖 B,B 依赖 C,自动传递 C)等问题。Maven 通过 ​pom.xml(项目对象模型)​​ 声明依赖,自动从 ​​远程仓库(如 Maven 中央仓库)​​ 下载所需库,并存储到 ​​本地仓库​​(本地缓存),避免重复下载。

2. ​​项目构建​​

提供标准化的 ​​生命周期(Lifecycle)​​,自动化完成编译、测试、打包(如生成 JAR/WAR)、部署等流程。例如执行 mvn clean package 会自动:

  • 清理旧编译文件(clean)→ 编译源代码(compile)→ 运行单元测试(test)→ 打包为 JARpackage)。

​关键结论​​:Maven 不负责 Java 程序的编译或运行(这由 JDK 完成),而是简化项目管理和依赖处理。

三、JDK 和 Maven 的联系

两者在 Java 开发中​​协作但分工明确​​,共同支撑项目的完整生命周期:

1. 依赖编译需要 JDK

当 Maven 下载完项目依赖(如 spring-core-5.3.0.jar)后,执行 mvn compile 时,Maven 会调用 JDK 中的 javac 编译器,将项目的 .java 源文件编译为 .class 字节码。​​没有 JDK,Maven 无法完成编译步骤​​。

2. 依赖运行需要 JDK

项目打包后的 .jar 文件(字节码)最终需要运行在 JVM 上(JDK 的一部分)。例如通过 java -jar app.jar 启动程序时,本质是 JVM(JDK 提供)加载并执行字节码。​​没有 JDK,编译后的代码无法运行​​。

3. 版本兼容性要求

Maven 本身不限制 JDK 版本,但项目中声明的依赖(如 Spring Boot 3.0+ 要求 JDK 17+)需要与本地安装的 JDK 版本匹配。例如:

  • 若项目依赖 Java 11 的特性(如 var 关键字),但本地 JDK 是 8,则编译会报错。
  • 因此,JDK 版本需满足项目依赖的最低要求(由 pom.xml 或文档指定)。

四、常见误解澄清

误解 1:“Maven 是本地依赖仓库”

​错误​​。Maven 的 ​​本地仓库​​ 是它管理的一个目录(默认在 ~/.m2/repository),用于缓存从远程仓库下载的依赖。Maven 本身是工具,本地仓库是它的“缓存区”。

误解 2:“有了 Maven 就不需要 JDK”

​错误​​。Maven 只是管理依赖和构建流程,Java 程序的编译和运行必须依赖 JDK(尤其是 javac 和 JVM)。

误解 3:“JDK 包含 Maven”

​错误​​。JDK 是 Java 开发工具包,Maven 是独立的项目管理工具(需单独安装),两者无包含关系。

总结

  • ​JDK​​:Java 开发的“地基”,负责源代码编译、字节码运行。
  • ​Maven​​:Java 项目的“管家”,负责依赖管理和构建流程自动化。
  • ​联系​​:Maven 依赖 JDK 完成编译和运行,JDK 为 Maven 处理的代码提供运行环境,二者共同支撑 Java 项目的全生命周期。

最后顺便提一下如何更新Maven仓库的镜像地址,提高依赖的下载速度?

在国内使用 Maven 时,由于默认的中央仓库(https://repo.maven.apache.org/maven2)服务器位于国外,下载依赖速度较慢甚至超时。通过更换为​​国内镜像仓库​​(如阿里云、华为云、清华大学镜像站等),可以显著提升依赖下载速度。以下是详细的操作步骤和常用镜像源推荐:

Maven 的镜像配置通过 settings.xml 文件完成,该文件有两种位置:

  • ​全局配置​​:Maven 安装目录下的 conf/settings.xml(所有项目共享)。
  • ​项目级配置​​:项目根目录下的 pom.xml 或 .mvn/maven.config(仅当前项目生效,优先级高于全局)。

​推荐修改全局配置​​,避免每个项目重复设置。

​​二、更换镜像的具体步骤​​

1. 找到settings.xml文件

  • 全局路径示例(Windows):C:\Program Files\apache-maven-3.8.6\conf\settings.xml
  • 全局路径示例(macOS/Linux):/usr/local/apache-maven-3.8.6/conf/settings.xml

2. 编辑<mirrors>标签添加镜像配置

在 settings.xml 中找到 <mirrors> 节点(若不存在则手动创建),添加镜像规则。每个镜像需指定以下属性:

  • <id>:镜像的唯一标识(自定义,不可重复)。
  • <name>:镜像的描述(可选)。
  • <url>:镜像仓库的地址(核心)。
  • <mirrorOf>:指定该镜像替代的原仓库(关键策略)。

​​三、常用国内镜像源推荐​​

以下是国内常用的 Maven 镜像源,覆盖主流需求:

镜像源名称镜像地址特点
​阿里云镜像​https://maven.aliyun.com/repository/public国内最常用,覆盖几乎所有 Maven 中央仓库的依赖,更新及时。
​清华大学镜像站​https://mirrors.tuna.tsinghua.edu.cn/maven/清华大学开源软件镜像站,同步官方仓库,稳定性高。
​华为云镜像​https://repo.huaweicloud.com/javaee/华为云提供,适合对网络稳定性要求高的场景。
​网易镜像​http://maven.net.cn/content/groups/public/较早的国内镜像,部分旧依赖可能更友好。

​​四、配置示例(以阿里云镜像为例)​​

在 settings.xml 的 <mirrors> 标签内添加以下内容(覆盖中央仓库的所有请求):

<mirrors>
  <!-- 阿里云公共仓库镜像 -->
  <mirror>
    <id>aliyun-maven</id>
    <name>Aliyun Maven Repository</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <!-- mirrorOf="*" 表示替代所有远程仓库的请求(推荐) -->
    <!-- mirrorOf="central" 表示仅替代中央仓库的请求 -->
    <mirrorOf>*</mirrorOf>
  </mirror>
</mirrors>

关键参数说明:

  • <mirrorOf>*</mirrorOf>* 是通配符,表示​​替代所有远程仓库的请求​​(包括中央仓库和其他第三方仓库)。
  • <mirrorOf>central</mirrorOf>:仅替代 Maven 中央仓库(central 是中央仓库的默认 ID)的请求。
    (如果项目中显式声明了其他第三方仓库,如 https://repo.example.com,则需要额外配置 <mirrorOf>example-repo-id</mirrorOf>。)

​​五、验证镜像是否生效​​

修改 settings.xml 后,执行 Maven 构建命令(如 mvn clean install),观察控制台输出的下载日志:

[INFO] Downloading from aliyun-maven: https://maven.aliyun.com/repository/public/.../spring-core-5.3.0.jar

若日志中出现镜像地址(如 aliyun-maven 对应的 URL),说明配置成功。

​​六、常见问题与注意事项​​

  • ​镜像冲突​​:若多个镜像配置了相同的 <mirrorOf>,Maven 会按 <mirrors> 标签中的顺序选择第一个匹配的镜像。建议只保留一个常用镜像。
  • ​私有仓库兼容​​:如果项目使用私有仓库(如 Nexus),需在 <mirrors> 中排除私有仓库的 ID(例如 <mirrorOf>*,!my-private-repo</mirrorOf>),否则会被镜像覆盖。
  • ​HTTPS 与 HTTP​​:国内镜像通常支持 HTTPS,推荐使用 HTTPS 地址(避免网络拦截)。
  • ​缓存更新​​:Maven 本地仓库(默认 ~/.m2/repository)可能缓存了旧版本的依赖,若镜像源中依赖版本更新,需手动删除本地旧文件后重新下载。

​​总结​​

通过修改 Maven 的 settings.xml 配置文件,添加国内镜像源(如阿里云),可以快速解决依赖下载慢的问题。核心是在 <mirrors> 标签中指定镜像地址和覆盖策略(mirrorOf),并验证配置是否生效。

最关键的是在idea中修改默认的配置文件和仓库地址。(默认会下载在C盘,时间久了占用太多空间。)

注:上面的Maven home_path是Maven的安装路径,User settings_file是自定义的settings.xml文件(全局生效) Local repository是本地仓库路径(所有依赖的的存储位置)

另外,还有一个问题就是,我发现每次导入别人的项目,都需要手动进行修改,但是为了更加方便,同样也是有方法解决的。(有时忘记修改配置,也是很头疼)

1.进入Flie->New Projects Setup -> Settings for New Projects(Windows/Linux)

  • Mac用户是 IntelliJ IDEA → Preferences → Build, Execution, Deployment → Build Tools → Maven

然后就可以对默认的Maven配置进行修改了。(修改完以后可以新建一个新项目测试一下是否配置成功。如果没有成功可以清理一下缓存或重启idea。)

点击顶部菜单 File > Invalidate Caches / Restart(或使用快捷键 Ctrl + Shift + A 搜索 Invalidate Caches

  • ​常规缓存清理​​:勾选 ​​Invalidate and Restart​​(默认不勾选其他选项),适合解决 IDE 卡顿、索引缓慢等问题。
  • ​本地历史问题​​:若需清除本地修改记录(谨慎操作),勾选第 1 项。
  • ​VCS 操作缓慢​​:勾选第 2 项,重建 VCS 索引(可能耗时较久)。
  • ​共享索引异常​​:勾选第 3 项,强制更新共享索引(需联网)。
  • ​网页内容异常​​:勾选第 4 项,修复内置浏览器显示问题。

到此这篇关于深度解析JDK和Maven究竟是什么,两者之间有什么联系的文章就介绍到这了,更多相关jdk maven联系内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中如何获取mysql连接的3种方法总结

    Java中如何获取mysql连接的3种方法总结

    最近工作中需要用到mysql连接,发现实现的方法不止一个,所以就来总结下,下面这篇文章主要给大家介绍了关于Java中如何获取mysql连接的3种方法,需要的朋友可以参考借鉴,感兴趣的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • IDEA连接mysql数据库报错的解决方法

    IDEA连接mysql数据库报错的解决方法

    这篇文章主要介绍了IDEA连接mysql数据库报错的解决方法,文中有非常详细的图文示例,对出现Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ prope报错的小伙伴们很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • Java利用endorsed如何覆盖jdk提供的类详解

    Java利用endorsed如何覆盖jdk提供的类详解

    这篇文章主要给大家介绍了关于Java利用endorsed如何覆盖jdk提供的类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • SpringBoot中的拦截器细节解析

    SpringBoot中的拦截器细节解析

    这篇文章主要介绍了SpringBoot中的拦截器细节解析,拦截器的概念、作用、实现方式、执行顺序、生命周期以及高级应用,最后,我们还将探讨拦截器的性能优化策略和常见问题,需要的朋友可以参考下
    2023-09-09
  • Java使用EasyExcel动态添加自增序号列

    Java使用EasyExcel动态添加自增序号列

    本文将介绍如何通过使用EasyExcel自定义拦截器实现在最终的Excel文件中新增一列自增的序号列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 使用Spring Boot轻松实现流式AI输出的步骤

    使用Spring Boot轻松实现流式AI输出的步骤

    本文介绍了如何使用Spring Boot和WebFlux实现流式AI输出,通过非阻塞I/O、反应式编程和函数式路由等技术,优化了AI应用的响应速度,提升了用户体验,感兴趣的朋友一起看看吧
    2025-02-02
  • Java Web Axios实现前后端数据异步交互实例代码

    Java Web Axios实现前后端数据异步交互实例代码

    Axios作为一个流行的前端 HTTP 通信库,可以极大地简化前端与后端之间的数据交互,这篇文章主要介绍了Java Web Axios实现前后端数据异步交互的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • Maven修改运行环境配置代码实例

    Maven修改运行环境配置代码实例

    这篇文章主要介绍了Maven修改运行环境配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java实现自定义table宽高的示例代码

    Java实现自定义table宽高的示例代码

    在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而 Java Swing 的 JTable 默认行高和列宽均采用系统或 L&F 的默认值,所以本文给大家介绍了Java实现自定义table宽高
    2025-06-06
  • Spring Bean获取方式的实例化方式详解

    Spring Bean获取方式的实例化方式详解

    工作中需要对一个原本加载属性文件的工具类修改成对数据库的操作当然,ado层已经写好,但是需要从Spring中获取bean,然而,工具类并没有交给Spring来管理,所以需要通过方法获取所需要的bean。于是整理了Spring获取bean的几种方法
    2023-03-03

最新评论