Maven 3.8下载安装配置全攻略:版本选择、阿里云镜像与IDEA避坑
简介Maven 3.8 是 Java 项目常用的构建与依赖管理工具也是 Java 生态中广泛使用的标准化构建方案适合需要在 Windows、Linux 或 macOS 上搭建本地 Maven 环境的开发者解决依赖下载繁琐、构建过程手动管理成本高的问题。压缩包共 85 个文件约 9.2MB其中 43 个 jar 为 Maven 运行核心库21 个 license 为依赖组件许可声明另有 2 个 cmd 启动脚本、2 个 xml 配置文件和跨平台的 dll/so/jnilib 动态库覆盖常见操作系统使用需求包内 bin/conf/lib 目录划分清晰便于按需查看。目前已有 2364 人下载学习。解压后可直接使用 bin 目录下的 mvn 命令执行 clean、compile、test、package 等生命周期操作并通过 conf/settings.xml 设定本地仓库和远程镜像lib 目录内聚了全部运行依赖配合 README 和模板文件可减少环境配置时间同时借助 POM 模型可声明项目依赖、自动解析版本冲突。对于刚接触 Maven 或需要离线安装包的开发者该包提供了开箱即用的完整工具链省去逐一下载依赖与配置环境的重复劳动。1. maven3.8下载包在讲什么从下载到能用只差这几件事很多团队的构建问题最后都会归结为一个动作换一个干净的 Maven 3.8。你在 IDEA 里新建工程报“依赖找不到”或者项目里全是.lastUpdated后缀的坏文件时问题往往不在代码而在构建工具的版本和配置。maven3.8下载包指的就是从 Apache 官方归档地址获取 3.8.x 的二进制分发包并完成环境变量、settings.xml、镜像仓库这三项落地配置。这篇文章按我从零配置一台开发机的顺序来写覆盖 Windows、macOS、Linux 三套系统把下载、安装、阿里云镜像、IDEA 接入和常见报错一次讲完。适合刚知道 Maven 这个词、需要马上在本地把项目跑起来的人也适合被依赖问题折腾了一下午、想确认自己有没有配错的老手。2. 为什么锁在 3.8 而不是 3.9 或 4.x版本线背后的现实选择先回答一个绕不开的问题现在 Apache Maven 官网首页已经推荐 3.9.x 了为什么还要写 maven3.8下载因为团队的老项目、私有仓库和 CI 脚本很多仍然跑在 3.8 这条版本线上。下载一个不是最新的版本不是保守是让构建系统先稳定下来。2.1 3.8.x 是 JDK 8 时代的最后稳定线Maven 3.8.x 对 JDK 的兼容范围非常宽。它要求运行环境至少是 JDK 8同时也能在 JDK 11、17 上正常工作我甚至见过有人拿 JDK 21 跑 3.8.8除了几个反射警告之外没有大问题。这一点对国内开发团队特别重要因为大量存量项目的 JDK 还锁在 1.8。你在这样的环境里装 Maven 3.9 虽然也能跑但 Maven 3.9 对 JDK 版本和 TLS 协议的默认行为更激进老私服、老插件可能会冒出一些在 3.8 下根本不存在的兼容性问题。另一个原因是“换构建工具版本”这件事情的收益在小项目上几乎看不到。Maven 3.8 和 3.9 对普通clean install的构建速度差别可以忽略不计真正影响速度的是依赖下载和插件执行。对一个只做日常开发、编译、打包的人来说升级版本带来的风险是实打实的收益却只是一种“我在用新版”的心理满足感。所以我在大多数项目里默认锁 3.8。2.2 3.8.x 内部版本怎么选3.8.1 的坑与 3.8.8 的稳3.8 这条版本线内部也有差异。3.8.1 是这条线上被讨论最多的版本也是踩坑重灾区因为它默认阻断了 HTTP 协议的远程仓库访问导致很多还在用 HTTP 内网私服的团队一升级就报错。从 3.8.2 开始Maven 团队对这个问题做了更多兼容性处理但如果你不需要那些新特性直接绕开 3.8.1 会更省心。我一般会建议直接用 3.8.8它是 3.8 线的最后一个版本相当于这条线的“补完版”。之前版本里出现过的一些边缘问题比如部分插件在特定 JDK 下的警告、Windows 下路径解析的异常在 3.8.8 里都收敛了很多。另外几行热搜里有人搜“maven 3.7下载”这里说一句Maven 3.7 这个版本号在 Apache 官方归档里没有正式发布网上能搜到的基本都是第三方二次打包不建议使用。搜索引擎里 3.6.3 的教程最多但 3.6.3 比较老了和 3.8.8 的配置方式完全一样没必要回头用旧版。下面是一个简单的版本选择表供你直接抄版本适合场景不建议的原因3.8.1无阻断 HTTP 仓库内网私服极易报错3.8.5已有 3.8.x 环境、不想动没有必须升级的理由3.8.8新装环境、老项目、JDK 8推荐本文全篇按它写3.9.x纯新项目、私服是 HTTPS插件兼容性需重新验证2.3 3.9 与 4.x 的差异点为什么暂不追新Maven 4.x 不是 Maven 3 的小版本升级它改动了构建核心的很多默认行为目前还处在预览阶段绝大多数公司的插件体系没有跟上。3.9.x 则是一个相对平稳的过渡版本它在 3.8 的基础上清理了一些废弃特性也加强了仓库访问的安全校验。对新建的、完全不受历史包袱影响的工程用 3.9 没问题。但如果你今天拿着一个 Spring Boot 2.x 项目、一个 JDK 8 环境和一台内网私服为了少出事maven3.8下载包才是稳妥的选择。说白了选版本看的不是新不新而是你的依赖树、插件集合、私服协议这些现状能不能承接得住。3.8.8 几乎是所有现状的“最大公约数”教程多、坑都被人踩过了、IDEA 里配置资料齐全。这一条理由对一线开发来说比任何版本新特性都有说服力。3. 把 3.8 装到三套系统下载、环境变量、镜像三件事这一章直接动手。下载 Maven 3.8 不是去官网首页点一个按钮那么简单因为官网默认展示的是最新版本要拿 3.8.8 需要去 Apache 的归档目录。你需要的只有三样东西二进制压缩包、一个正确的 JAVA_HOME、一份改好的settings.xml。3.1 从 Apache 归档地址下载认准二进制包而不是源码包Apache 的 Maven 下载页面会提供两种文件apache-maven-3.8.8-bin.tar.gz或.zip和apache-maven-3.8.8-src.tar.gz。绝大多数人应该拿bin包这是编译好的可执行版本src包是源码给想自己构建 Maven 的人用的下载后无法直接运行。你可以在 Apache 的归档目录archive.apache.org/dist/maven/maven-3/3.8.8/binaries/下找到对应的bin包。Windows 用户下载.zipmacOS 和 Linux 用户下载.tar.gz。有一点值得留意归档目录的文件名里带有校验文件比如.sha512下载后建议顺手校验一下尤其在 Windows 上通过一些下载工具拉文件时。校验命令可以这样写# Windows PowerShell 里 Get-FileHash .\apache-maven-3.8.8-bin.zip -Algorithm SHA512 # macOS / Linux 里 shasum -a 512 apache-maven-3.8.8-bin.tar.gz你不需要背下哈希值只需要把官网旁边那个.sha512文件打开对比一下脚本输出的内容就行。这一步能过滤掉绝大多数下载损坏导致的解压失败问题属于装任何开发工具都通用的动作。3.2 Windows 安装环境变量与 JAVA_HOME 的一次性配置在 Windows 上我习惯把 Maven 解压到一个纯英文、无空格的路径比如D:\dev\apache-maven-3.8.8。放在带空格的路径下比如Program Files不是不能用但偶尔会有脚本因为路径解析出问题没必要给自己埋雷。解压后确认目录结构里有bin、boot、conf、lib这四个文件夹缺任何一个都说明包不完整。然后配置三个系统环境变量。这里的核心是把MAVEN_HOME和JAVA_HOME分开避免以后换版本时东改一个西漏一个# 系统变量里新增 MAVEN_HOMED:\dev\apache-maven-3.8.8 # Path 变量里追加 %MAVEN_HOME%\bin # JAVA_HOME 必须存在且指向 JDK JAVA_HOMEC:\Program Files\Java\jdk1.8.0_202配置完成后不要直接在当前窗口测因为环境变量的改动不会实时同步到已打开的终端。新开一个 CMD 或 PowerShell执行mvn -v看到类似Apache Maven 3.8.8的输出就成功了。如果提示“不是内部或外部命令”优先检查 Path 里有没有%MAVEN_HOME%\bin以及 JAVA_HOME 是不是被配到了 JRE 的安装目录。JRE 目录下没有javacMaven 启动时会直接报错。3.3 macOS 与 Linuxtar 解压与 profile 配置macOS 和 Linux 的做法非常接近。很多教程会让你用sudo把 Maven 移到/usr/local我强烈不建议这么做因为后续会遇到普通用户无权限执行的问题。更省心的做法是把 Maven 放在用户目录下比如~/maven-3.8.8这样不需要 root 权限环境变量也只需要写进自己的 shell 配置里。cd ~ curl -LO https://archive.apache.org/dist/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz tar -xzf apache-maven-3.8.8-bin.tar.gz mv apache-maven-3.8.8 ~/maven-3.8.8接下来配置环境变量。macOS 用户如果用的是 zsh就写入~/.zshrc如果是老版本系统上的 bash写~/.bash_profile。Linux 桌面用户统一写~/.bashrc就好export MAVEN_HOME~/maven-3.8.8 export PATH$MAVEN_HOME/bin:$PATH写完后执行source ~/.zshrc或对应的文件再跑mvn -v。如果输出正常顺手执行一句which mvn确认它指向的是你自己解压的路径而不是系统自带的某个旧版本。这一步在 macOS 上尤其容易出错因为一些开发工具会自带 Maven 并抢先加入 PATH。3.4 配置阿里云镜像settings.xml 里的两个必改项Maven 装好之后如果不改settings.xml默认从 Maven 中央仓库下载依赖速度在国内环境下不太理想。这里需要改两个地方本地仓库路径和镜像地址。配置文件在 Maven 安装目录的conf/settings.xml但更推荐的做法是复制一份到用户目录~/.m2/settings.xml。用户级配置文件会覆盖全局配置以后升级 Maven 版本时配置还能保留这是我会优先推荐它的原因。下面是一份最小可用的配置解决了本地仓库和阿里云镜像两个问题settings localRepositoryD:/dev/maven-repo/localRepository mirrors mirror idaliyun/id mirrorOf*/mirrorOf namealiyun public/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors /settingslocalRepository是你本地存放 jar 包的路径Windows 上建议写成D:/dev/maven-repo这样的正斜杠格式不要写D:\dev\maven-repo反斜杠在某些场景下会被当成转义字符。macOS 和 Linux 用户直接写/Users/yourname/.m2/repository或~/maven-repo都可以。mirrorOf*/mirrorOf表示所有仓库请求都走这个镜像包括插件仓库这能最大程度减少下载失败。如果你只需要让中央仓库走镜像可以写成mirrorOfcentral/mirrorOf但从实际效果看大多数项目直接配*更省事。把settings.xml放好后随便进入一个项目目录执行mvn clean compile观察日志里下载依赖时的 URL。如果看到maven.aliyun.com说明镜像配置生效了。很多人的镜像配置没生效是因为把settings.xml放到了 Maven 安装目录的conf下而 IDEA 或其他工具读取了用户目录下的另一个文件两边不一致导致白配。建议在文章开头就把规矩立好配置文件只维护~/.m2/settings.xml这一份。4. 在 IDEA 里把 Maven 3.8 用起来三个配置点一个都不能少命令行能跑通只是第一步。绝大多数开发者日常是在 IDEA 里点按钮构建的IDEA 有自己内置的 Maven 版本也会读取默认的配置路径。如果不做显式指定你很可能在命令行构建成功IDEA 里却报一堆红色错误。这一章的三个配置点是按顺序做的少一个都会出问题。4.1 让 IDEA 使用自己的 Maven 而不是捆绑版本IDEA 自带的 Maven 版本通常比 3.8 新而且它位于 IDEA 安装目录内部升级 IDEA 时版本可能被替换。我在配置新环境时会在Settings→Build, Execution, Deployment→Build Tools→Maven里把Maven home path显式指向自己解压的目录比如D:\dev\apache-maven-3.8.8。这个路径选对之后IDEA 会自动读取该版本对应的一些默认行为。很多人在这一步会忽略一个小地方IDEA 里有两个 Maven 配置入口一个在Maven页面一个在Maven下面的Runner。Runner 页面可以设置 JVM 参数和代理如果你的项目依赖下载特别慢或者内网需要走代理问题往往出在这里而不在 Maven 主页面。配置mvn命令行能成功但 IDEA Build 失败时优先去看 Runner 页面的环境和 VM 选项。4.2 全局 settings.xml 与本地仓库路径在同一个设置页面里往下拉能看到User settings file和Local repository两项。User settings file一定要勾选Override然后指向~/.m2/settings.xml。如果你不覆盖IDEA 会先读自己默认的用户配置而默认路径在不同系统上有差异很容易出现“IDEA 看不到阿里云镜像”的现象。Local repository会自动根据 settings.xml 里的localRepository带出来你只需要核对它和你命令行里执行mvn help:evaluate -Dexpressionsettings.localRepository输出的路径一致。两个路径不一致的典型症状是命令行构建时依赖下了一遍IDEA 又另起炉灶重新下了一遍磁盘里出现两个仓库而且常常有一个是不完整的。我处理过不少“IDEA 里依赖报错命令行却没事”的问题最后都是因为 IDEA 读的是它内置的默认 settings而不是用户配置。把这里覆盖成同一份文件后问题基本消失。4.3 常用命令与 JDK 版本的 profile 绑定IDEA 配置完成后下一步是验证命令链路。我在 IDEA 的 Terminal 里执行的第一条命令是mvn clean install -DskipTests。这个命令会清掉target目录、重新编译、打包并跳过测试执行。跳过测试不代表不编译测试代码-DskipTests只是不运行测试用例测试类仍然会被编译。如果你连测试代码编译都想省掉用-Dmaven.test.skiptrue它会跳过测试代码的编译和运行。这里还要提一个和老项目相关的小细节有些项目的pom.xml里用maven.compiler.source和maven.compiler.target指定了 JDK 版本如果你在 IDEA 里设置的 Project SDK 是 JDK 17而 pom 里写的是 1.8构建时经常出现“无效的目标发行号”之类的报错。常见做法是在settings.xml里放一个 activation 条件为 JDK 的 profile让不同 JDK 环境自动切换编译参数。但更直接的办法是把 pom 里的编译参数和当前机器的 JDK 对齐。Maven 3.8.8 在这里的优势是它对 JDK 8 的兼容非常干净不会出现 3.9 在 JDK 8 下的一些 TLS 警告。下面命令用来确认当前构建环境的关键信息是配置完的第二个检查动作# 查看 Maven 版本和 Java 版本 mvn -v # 查看生效的 settings.xml 路径 mvn help:effective-settingsmvn help:effective-settings会输出一份“合并了全局配置、用户配置、项目配置之后真正生效的 settings”。这个命令比直接看文件直观得多我每次怀疑“配置没生效”时都会先跑它。如果输出里的镜像 URL 是你期望的值说明 IDEA 和命令行都已对齐如果输出里还带着中央仓库的默认地址说明你改的那份 settings.xml 根本没被当前 Maven 读取。5. 避坑3.8 最常见的 5 个翻车现场Maven 3.8 的配置本身不复杂但日常使用中翻车点非常集中。下面几条是我在给别人处理问题时遇到最多的情况每一条都按照“现象 → 原因 → 解决”的顺序写你可以直接对照排查。5.1 下载后 mvn -v 提示“不是内部或外部命令”这个现象几乎每个人刚装的时候都会遇到一次。现象是在终端执行mvn -v系统告诉你找不到命令。原因有几种Path 环境变量没配上配上了但当前终端窗口是在配置之前打开的不会自动刷新或者你配的是M2_HOME而不是MAVEN_HOMEMaven 3.8 的启动脚本已经放弃了对M2_HOME的读取。解决办法是先在“系统设置”里确认MAVEN_HOME和 Path 的值存在然后新开一个终端窗口再试。如果在 CMD 里执行echo %MAVEN_HOME%有输出但mvn -v仍然报错把%MAVEN_HOME%\bin加到 Path 里注意优先级要放在其他可能包含mvn的目录前面。macOS 和 Linux 下同理执行echo $PATH看有没有$MAVEN_HOME/bin没有就重新 source 一下配置文件。5.2 3.8.1 报错 Blocked mirror for repository这个坑和 3.8.1 强相关。现象是构建日志里出现类似Blocked mirror for repository的红色错误依赖无法下载。原因是 Maven 3.8.1 加强了安全策略默认阻止对外部 HTTP 协议的仓库访问。如果你的阿里云镜像地址写的是http://maven.aliyun.com/...或者内网私服是 HTTP 协议就会撞上这个拦截。解决办法是把镜像地址全部改成 HTTPS阿里云镜像本身就支持 HTTPS所以最常见的修复就是把settings.xml里的 URL 换一下。如果你依赖的是公司内网 HTTP 私服有两个方向一是联系私服管理员开启 HTTPS 支持二是换用 3.8.2 之后的版本或者降回 3.6.3避开这个安全策略。考虑到内网私服升级 HTTPS 往往牵扯到证书和防火墙我在处理这类问题时通常会结合私服情况判断不会简单地让用户去改版本。5.3 依赖下载一半失败本地仓库出现 lastUpdated现象是构建报某个依赖找不到你进~/.m2/repository能看到一堆名字以.lastUpdated结尾的文件。原因很直接Maven 下载 jar 包时网络中断或镜像超时它会在本地留下一个失败标记文件并且在一段时间内默认可能是一天认为该依赖“已经尝试过了”不会重新下载。这个机制本意是避免反复请求副作用就是偶尔网络一抖动项目就卡死半天。解决办法分两步。第一步删除所有失败标记文件find ~/.m2/repository -type f -name *.lastUpdated -delete第二步在构建时加-U参数强制刷新比如mvn clean install -U。-U的全称是--update-snapshots它的作用是强制更新快照版本依赖和本地缓存。虽然这个参数原本是针对快照包的但实践中它能有效绕过已经存在的失败缓存。我的习惯是连续构建失败两次后先清.lastUpdated再上-U不要一上来就删整个仓库目录。删整个仓库是很多人最常犯的冲动操作代价是要重新下载几百兆的依赖实际上没必要。5.4 IDEA 里引用的依赖版本和命令行不一致现象是同一份代码IDEA Build 时依赖的 jar 版本和命令行mvn dependency:tree输出的不一致有时候 IDEA 能用但命令行报错有时候反过来。原因指向了一个核心IDEA 和命令行使用了不同的settings.xml。IDEA 默认会读它自己认定的用户配置文件命令行则读~/.m2/settings.xml两边若各有各的镜像或 profile解析出来的依赖树就会不同。解决办法是强制执行“单文件策略”即只维护~/.m2/settings.xml然后在 IDEA 设置里的User settings file后面勾选Override并指向这一份。改完后重启一下 IDEA 的 Maven 项目点 Maven 面板里的刷新按钮再对比一下mvn help:effective-settings的输出和 IDEA 的 Maven settings 窗口显示的内容。只要输出一致这个问题就算彻底解决了。这个坑对 IDE 和命令行并用的开发者尤其常见本质是没搞清楚 IDEA 不会自动读取你改动过的文件。5.5 Mac/Linux 下 sudo 装完普通用户找不到 mvn现象是你在终端用sudo装完 Maven当时执行mvn -v一切正常但切换回普通用户后命令找不到或者提示权限不够。原因是sudo安装时把环境变量写进了 root 的 profile或者解压出来的文件只有 root 有读取权限。普通用户的 shell 启动时不会读取 root 的配置自然找不到 mvn。解决办法是不要在安装环节使用sudo。把 Maven 解压到自己的用户目录比如~/maven-3.8.8环境变量写进~/.bashrc或~/.zshrc权限问题从根源上消除。如果你已经装到了/usr/local且权限不对执行sudo chown -R 你的用户名 /usr/local/apache-maven-3.8.8把属主改回来同时把环境变量从/etc/profile挪到用户级配置里。这个问题的教训很简单开发工具装到用户目录比装到系统目录省心得多。6. 把 Maven 3.8 用得再顺一点三个日常高频技巧这一章不写大而全的教程只放三个我几乎每周都会用到的操作。第一个是把本地 jar 打入仓库。公司内部经常有不在中央仓库的 jar比如老版本的驱动这时用install-file是最快的方式mvn install:install-file \ -Dfile./ojdbc8.jar \ -DgroupIdcom.oracle \ -DartifactIdojdbc8 \ -Dversion12.2.0.1 \ -Dpackagingjar这条命令里的四个参数分别定义了 jar 文件的坐标。-Dfile是 jar 的实际路径-DgroupId、-DartifactId、-Dversion组成的坐标决定了它在本地仓库里的目录位置比如上面的命令会生成路径com/oracle/ojdbc8/12.2.0.1/。如果你希望这台机器上的所有项目都能引用它在执行时需要确保当前生效的 settings 里localRepository是你希望存放的仓库。第二个是快速核对当前生效的 Maven 配置。我前面提过mvn help:effective-settings这里再强调一遍因为大多数“配了没生效”的问题都能用这个命令一锤定音。mvn help:effective-settings第三个是日常开发里最省时间的组合先mvn clean compile只验证编译确认代码没有语法问题后再mvn install避免每次改动都跑完整流程。我自己的习惯是涉及依赖变动的次数不多时用mvn clean install -DskipTests但反复调代码阶段一定用mvn compile就收手。Maven 3.8 这套东西说到底是“版本选对、配置统一、坏文件及时清”三件事。版本选 3.8.8配置只维护用户级 settings.xml遇到下载失败先清.lastUpdated再上-U这三条记住之后你踩的坑会比大多数人少一大半。希望帮到你。本文还有配套的精品资源点击获取