简介:这份下载包提供 Apache Maven 3.8 完整安装文件,面向使用命令行构建与管理 Java 项目的开发者。Maven 通过 POM 配置自动解析依赖,并执行编译、测试、打包等生命周期任务,是 Java 工程中不可或缺的基础工具。包体共 85 个文件,约 9.2MB,核心是 lib 目录下的 43 个 jar 运行库,另有 mvn、mvnDebug 启动脚本,conf 下的 settings.xml、toolchains.xml 配置模板,以及 license 和说明文件。解压后配置 PATH 即可使用,适合快速搭建本地构建环境。已有 2347 人学习下载。除核心组件外,还包含常用插件与依赖库,并附 README 和许可信息,便于离线安装、核对版本与合规使用。对于需要统一构建工具版本、减少联网拉取依赖时间的团队,这款安装包也能作为内部环境配置的参考。
1. 为什么是3.8:下载包之前先看版本和发行说明
我见过太多人一上来就搜"maven3.8下载包",从某个博客给的链接随手下载了一个压缩包,解压一跑mvn -v直接报错,然后就开始怀疑人生。实际上Maven 3.8的下载坑不在下载本身,而在版本选择和环境配套。Maven这个大版本用了接近十年才迭代到3.9,说明它的生态沉淀相当厚重,社区里有大量项目至今仍钉在3.8系列上,所以围绕"下载包—装环境—配仓库—接IDEA"这条链路的问题,几乎每个搞Java开发的人都至少完整踩过一遍。
1.1 3.8.x和3.9.x、4.0.x怎么选
Maven 3.8.8是3.8系列最后一个维护版本,发布于2023年初,之后官方维护重心移到了3.9.x分支。新项目我建议直接用3.9.x,但很多老项目、内网环境、课程教材都还钉在3.8,如果你是要跟着历史教程走,那3.8.x完全够用,尤其3.8.8这个版本,JDK 8到JDK 17都能正常跑。我这边验证过的组合是:3.8.8配合JDK 8、JDK 11都没问题,配合JDK 17跑绝大多数Spring Boot项目也没问题。
可能有人会问,4.0.x都出来了为什么不用最新的?Maven 4.0对构建生命周期、插件机制有比较大的调整,很多企业在用的插件没有跟进适配,贸然切上去,clean install全绿的老项目可能直接翻车。选构建工具的第一原则永远是跟随团队和项目现状,而不是跟随最新版本。如果想要"能长期用、资料多、踩坑经验好搜",3.8.x就是那个稳妥答案。
1.2 官网下载页里的文件到底选哪个
Maven官网下载页(maven.apache.org/download.cgi)会列出多个文件格式,这一步就能筛掉一批新手。
| 文件 | 用途 | 该不该下载 |
|---|---|---|
| Binary tar.gz | Linux/macOS解压安装 | 推荐 |
| Binary zip | Windows解压安装 | 推荐 |
| Source tar.gz / zip | 源码包,需要自己编译 | 不推荐 |
不要看到Source就顺手下了。源码包要预先装好JDK才能构建,对普通使用者来说纯粹是给自己找事。另外一定要确认下载的是apache-maven-3.8.8-bin.tar.gz或apache-maven-3.8.8-bin.zip,别下成带src后缀的文件。如果你在公司内网,官网访问慢,可以用国内CDN镜像或公司私有制品库,优先选择官方校验过的源。下载完最好核对一下官方给出的SHA-512校验值,这个习惯在安装任何构建工具时都值得保留。
2. 安装包落地:JDK版本、目录规划和三平台环境变量
下载包不是重点,安装配置才是真正拉开差距的地方。很多人卡在"明明下载了Maven却用不了"的尴尬境地,多数不是下载错,而是环境变量没配全,或者JAVA_HOME指向有问题。
2.1 JAVA_HOME是Maven能跑的绝对前提
Maven本质上是跑在JVM上的Java程序,所以第一步不是配Maven环境变量,而是保证本机有JDK,并且JAVA_HOME指到了正确的JDK安装目录。
Maven 3.8.x要求JDK 7以上,但实际开发中至少用JDK 8。JDK版本过低时,Maven会直接拒绝启动,报错信息里会明确提示UnsupportedClassVersionError或类似问题,但很多人看到这个报错第一反应是去重装Maven,实际上该去检查JDK。
在macOS上我推荐直接用Homebrew装OpenJDK,然后用/usr/libexec/java_home -V查看本机JDK路径。Windows下注意一个细节:安装JDK时尽量避开带空格的路径,C:\Program Files\Java\jdk-17这种路径虽然技术上能用,但后续在cmd脚本和配置文件里很容易被空格坑到,建议规划成C:\Java\jdk-17这种短路径。这个习惯在Linux上类似,路径里不要有中文和空格。
2.2 目录规划:统一放,别拆太散
我见过有人把Maven解压到桌面、下载目录、甚至随意一个中文路径,都能跑,但后面配置settings.xml、在IDEA里指定Maven home、命令行全局使用,都会遇到路径引用问题。建议所有机器统一目录结构:
D:\tools\apache-maven-3.8.8 # Windows示例 ~/tools/apache-maven-3.8.8 # macOS/Linux示例本地仓库目录也不要使用默认的~/.m2/repository,而是单独规划一个容易找、方便清理的目录,比如D:\maven-repo或/Users/你的用户名/maven-repo。原因很简单:默认仓库在系统盘,依赖一多能占好几个GB,后续磁盘告急时清理怕误删;独立目录可以随时整体搬迁,重装系统也不丢依赖缓存。我总是建议别人把maven-repo想象成"外卖柜"——所有依赖jar包都堆在固定的柜子里,哪天柜子坏了直接换一个地方,而不是让外卖在大学宿舍楼里到处乱放。
2.3 环境变量配置速查
以Windows为例,配置MAVEN_HOME或M2_HOME都可以,但真正被官方脚本识别的是MAVEN_HOME,建议两个都配上,兼容性更好。
| 变量 | 值 | 作用 |
|---|---|---|
| JAVA_HOME | C:\Java\jdk-17 | Maven启动依赖 |
| MAVEN_HOME | D:\tools\apache-maven-3.8.8 | Maven安装根目录 |
| PATH追加 | %MAVEN_HOME%\bin | 让mvn命令全局可用 |
macOS/Linux下在~/.bashrc或~/.zshrc里export JAVA_HOME、export MAVEN_HOME,再把$MAVEN_HOME/bin追加到PATH。配置完新开一个终端窗口,执行mvn -v,能正常输出版本、Java版本和系统信息,就说明安装成功了。注意必须新开窗口,当前终端不会自动刷新环境变量,这个细节每次都会有人踩,自己装过一次就长记性了。
3. settings.xml是灵魂:本地仓库、镜像加速和JDK编译等级
很多教程把settings.xml一笔带过,但超过一半的Maven使用问题都出在这个文件上。Maven的settings.xml分为全局和用户两级,全局在%MAVEN_HOME%\conf\settings.xml,用户级在~/.m2/settings.xml。用户级配置会覆盖全局配置,所以日常只改用户级的就够了。
3.1 本地仓库路径必须改
打开settings.xml,localRepository节点默认是注释掉的,指向${user.home}/.m2/repository。我强烈建议改成独立的绝对路径:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/maven-repo</localRepository> </settings>注意路径分隔符在Windows下建议直接用正斜杠,反斜杠在某些XML解析场景里会被当成转义字符,属于经典暗坑。这个配置项决定Maven会把所有依赖jar包存在哪里,配置错误最直接的表现是:IDEA里反复提示resolving不动、依赖找不到。因为IDEA读的是这个路径下的jar,路径不对等于依赖不存在,后续所有构建都是空谈。
3.2 mirror和mirrorOf多镜像的排列逻辑
搜索热词里反复出现"配置阿里云仓库""配置多个镜像仓库",说明大家对下载慢和镜像切换的需求非常强烈。Maven的mirror节点功能是拦截某个远程仓库地址的请求,转到更快或允许访问的地址。最基础的阿里云镜像配置:
<mirrors> <mirror> <id>aliyun-public</id> <name>aliyun public</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>mirrorOf的值决定了这个镜像替谁拦截请求。central表示只拦截默认中央仓库;如果写*,会拦截所有远程仓库请求,这种配置在只有一个镜像时很方便,但一旦有多个镜像就会导致"全部依赖走同一个镜像"的问题,某些只在特定私服存在的jar反而拉不到,因为请求全被拦截走了。
多个镜像时,建议按用途拆分,不要所有mirrorOf全写*。比如公司私服只管自己发布的内部组件,就写成:
<mirror> <id>nexus-internal</id> <url>http://nexus.example.com/repository/maven-public/</url> <mirrorOf>nexus-internal</mirrorOf> </mirror>同时让阿里云镜像管central,这样既可以用私服上的公司组件,又不影响公共依赖的下行速度。配置完多个镜像后,resolving时间过长的问题基本能缓解一大半,因为请求不会再傻等一个遥远的中央仓库超时。
3.3 编译版本和插件版本固定
用Maven构建Java项目时,最容易出现"代码在本机编译好好的,到CI上就报错"的情况,根源往往是pom.xml里没有显式声明编译版本,导致Maven使用当前JDK的默认行为。强烈建议在pom.xml里固定:
<properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>这句配置的作用是告诉Maven编译器插件,按Java 11语法编译并生成Java 11的字节码。不写的话,Maven会用当前JVM的默认版本,如果开发机是JDK 17、CI是JDK 8,两边编译出来的东西对不上,跑起来就是各种UnsupportedClassVersionError。这个问题我自己被坑过两次,后来所有项目pom里都固定这三个属性,再没波动过。
4. IDEA集成Maven:Maven home、settings文件与resolving耗时的真相
IDEA内置了Bundled Maven,很多新手创建Maven项目时直接选默认,用完发现仓库在C盘、依赖下载慢、settings配置不生效,然后又到处找原因。其实IDEA里只需要在Settings那把三个路径指对,问题就解决大半。
4.1 创建Maven项目前先做三件事
打开Settings(macOS是Preferences,下同),进入Build Tools > Maven:
- Maven home path:选择你解压的
apache-maven-3.8.8目录,不要选Bundled Maven - User settings file:勾选Override,指定
~/.m2/settings.xml - Local repository:它会根据settings自动读取,如果没有自动识别,就手动指定
这一步是"IDEA配置Maven"这个搜索词对应的核心逻辑。IDEA自带的Maven版本可能和你的项目预期不一致,用你下载的3.8.8并指定settings.xml之后,IDEA加载项目依赖、执行clean install时才会走你配置的阿里云镜像和独立本地仓库。如果你在IDEA里发现改了settings.xml但行为没变化,十有八九是没勾Override,IDEA还在读自己默认的配置目录。
4.2 resolving Maven时间很长,到底是谁在下载
"idea resolving maven时间很长"是一个高频搜索词。这个"长"通常有三个来源:
- Maven第一次下载依赖jar包,数据量本身大,如果镜像没配好,下载就是几十秒到几分钟级别
- IDEA的Maven Reimport会刷新依赖扫描,工程越大、多模块项目越多,越慢
- IDEA需要索引本地Maven仓库,Windows下尤其慢,因为要扫描几万个jar文件的元数据
我处理这种问题的顺序是:先确认本地仓库里是不是积攒了很多.lastUpdated文件,那是上次下载失败的标志,来源多半是镜像没生效或者网络中断。清掉这些失败残留和对应依赖目录,重新配置阿里云镜像后再reimport,速度会有明显改善。如果项目还是慢,可以在Maven Runner里勾选Skip tests,甚至把IDEA的"Auto-reload"改成手动触发,避免每次改个pom就全量刷新。
4.3 多模块项目的依赖关系怎么理清
很多人在IDEA里碰到的"模块服务依赖关系"问题,本质上是没搞懂Maven模块之间如何通信。多模块Maven项目用<parent>和<dependencyManagement>管理版本,IDEA里每个模块会识别成一个子树。最重要的一个操作是:如果你改了父pom的<version>或某个模块的依赖坐标,不要只点一次Reload All Maven Projects,先执行mvn clean install -DskipTests把改动模块安装到本地仓库,再回到IDEA刷新。
因为Maven模块之间依赖的是本地仓库里的jar,不是IDE内存里的模型。这一步不做,最常见的表现就是模块间依赖红波浪线,或者运行时NoClassDefFoundError。团队协作时尤其明显——别人推了代码,你pull下来如果只是点reimport,有时还是旧依赖,必须让Maven重新install一遍才能对得上。
5. 命令行构建与报错排查:clean install、validate失败和NoClassDefFoundError
Maven学习过程中,命令行是对IDEA隐藏逻辑的最好验证方式。IDEA里可能帮你兜底很多错误,命令行暴露得更直接。想弄清楚"IDEA能跑为什么命令行跑不了",多半是IDEA里偷偷用了自己的Maven,命令行用的是你全局配置的另一套,两套版本不一致。
5.1 日常命令三件套
最常用的几个命令:
mvn -v # 查看Maven和Java版本 mvn clean install # 清理target再编译、测试、打包、安装到本地仓库 mvn clean install -DskipTests # 跳过测试,适合本地快速构建 mvn validate # 校验项目信息是否正确mvn validate是构建生命周期里最早的一个阶段,主要校验项目信息是否正确。"maven validate失败"的常见原因是pom.xml的parent、dependency版本号写错,或者本地仓库对应版本缺失。这种错误IDEA不一定会在界面上标红,但命令行一跑立刻暴露。所以排查Maven问题,第一反应应该是开终端执行mvn clean install,看报错比在IDE里瞎点有效一百倍。
5.2 NoClassDefFoundError: org/apache/maven/shared/filtering/MavenFilteringException排查链路
这是Maven使用过程中最有代表性的一个报错,我把排查链路完整捋一遍:
- 先用
mvn -v确认当前命令行Maven版本 - 再用
mvn clean install在命令行复现报错 - 如果命令行正常而IDEA报错,那就是IDEA里Maven home配置问题,回到Settings检查Maven路径是不是指向3.8.8
- 如果命令行同样报错,检查本地仓库
org/apache/maven/shared/maven-filtering目录,把版本目录里不完整的jar和所有.lastUpdated删掉 - 仍然报错的话,换一个官方3.8.8发行包,别再用来路不明的压缩包
这个报错的本质是Maven在filtering资源文件时找不到对应类,大多是Maven版本与maven-resources-plugin等插件不兼容,或者本地仓库缓存了损坏的jar。我帮同事处理过一次,最后发现他用的所谓"Maven 3.8"是从某个技术论坛下载的打包版,里面混了旧版本组件,一删换官方版就好了。这个排查思路几乎能覆盖Maven领域所有NoClassDefFoundError,核心就是"先确认版本、再清残留、最后换官方包"。
5.3 依赖下载慢的终端级备选方案
如果settings.xml配好镜像后还是慢,可以在settings.xml里启用<offline>配合已有本地仓库,或者直接用mvn dependency:go-offline把项目全量依赖一次性拉到本地,后续构建全部走offline模式。这样首次虽然慢,但之后基本上秒开,省去大量等待时间。
不过要注意,一旦有新依赖加入,必须切回online让它重新拉新包,否则会报"找不到依赖"。我自己会维护一个简单的脚本,平时用offline构建,发布或拉新依赖时切回online,两边平衡下来效率高很多。
根据我的实际使用经验,Maven 3.8下载包这件事,真正决定成败的从来不是下载本身,而是后续这五个环节的设置。很多教程把重点放在压缩包链接上,但源码开放、镜像也开放,真正稀缺的是这套配置逻辑和经验排错能力。希望这篇内容能帮你在Maven配置的路上少踩几个我踩过的坑。
本文还有配套的精品资源,点击获取