ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows 10下Maven 3.9.5安装配置全攻略:从环境变量到项目构建

Windows 10下Maven 3.9.5安装配置全攻略:从环境变量到项目构建 1. 项目概述与环境准备最近在帮几个刚入行的朋友配置Java开发环境发现很多人卡在了Maven的安装和配置上。明明跟着教程一步步来最后mvn -v命令一敲还是报“不是内部或外部命令”。这其实不是教程有问题而是Windows系统环境变量配置和一些细节操作上存在几个非常隐蔽的“坑”。今天我就以最新的Maven 3.9.5版本在Windows 10下的安装为例从头到尾拆解一遍不仅告诉你每一步怎么做更重要的是解释清楚每一步背后的原理以及那些教程里通常不会写的“翻车点”。无论你是完全的Java新手还是之前配置失败过想彻底搞明白的老手这篇都能让你一次成功把Maven这个项目构建和依赖管理的利器稳稳当当地跑起来。Maven是什么简单说它是一个项目管理和构建自动化工具。想象一下你做一个Java项目需要用到几十个第三方库Jar包比如处理JSON的Jackson、连接数据库的MySQL Connector。如果没有Maven你得手动去各个官网下载对应版本的Jar包然后放进项目的lib目录还得处理这些Jar包之间的依赖关系非常繁琐且容易出错。Maven的核心功能就是依赖管理和项目构建。你只需要在一个叫pom.xml的配置文件里声明你需要什么库Maven就会自动从中央仓库可以理解为一个巨大的网上软件商店下载这些库及其依赖放到本地仓库你电脑上的一个文件夹里。构建过程比如编译、测试、打包也都可以通过简单的Maven命令如mvn clean package一键完成标准化且高效。为什么选择3.9.5版本这是目前撰写本文时Apache官网上稳定的最新版本。它修复了之前版本的一些安全漏洞和Bug性能也有提升。对于新项目直接上最新稳定版是明智的选择。当然如果你的公司或团队有严格的版本规定请遵循规定。但学习安装和配置用最新版理解通用流程是完全没问题的。在开始之前你需要确保两样东西已经就绪。第一是一台运行Windows 10的电脑。第二也是最重要的是已经正确安装了Java开发工具包JDK。Maven本身是用Java写的所以它必须在JDK的基础上运行。很多安装失败的根本原因就是JDK没装好或者环境变量不对。1.1 JDK检查与确认在安装Maven之前我们必须先确保JDK已经正确安装并配置。这是整个流程的基石绝对不能跳过。打开你的命令提示符CMD或者PowerShell输入命令java -version。如果看到类似下面的输出并且版本是1.8即JDK 8或以上那么恭喜你第一步基础是好的。java version 1.8.0_381 Java(TM) SE Runtime Environment (build 1.8.0_381-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)注意这里显示的是JREJava运行时环境信息。我们还需要确认JDK开发工具包也安装了。再输入javac -version。如果能看到版本号比如javac 1.8.0_381那就说明JDK的编译器也安装好了可以进行Java开发。注意如果你只看到java -version有输出而javac -version报错说明你可能只安装了JRE而没有安装完整的JDK。你需要去Oracle官网或Adoptium等网站下载并安装JDK而不仅仅是JRE。如果两个命令都报“不是内部或外部命令”那就说明JDK没有安装或者环境变量JAVA_HOME和Path没有配置正确。这时你需要先解决JDK的安装问题。假设你已经安装了JDK例如安装在了C:\Program Files\Java\jdk1.8.0_381那么你需要设置两个系统环境变量JAVA_HOME这个变量指向你的JDK安装根目录。它的作用是告诉系统和其他程序比如Maven、TomcatJava开发工具包在哪里。值设置为C:\Program Files\Java\jdk1.8.0_381请替换为你自己的实际路径。Path在Path变量的值中添加%JAVA_HOME%\bin。这样当你在命令行输入java或javac时系统才能在这个路径下找到可执行文件。配置完成后务必重新打开一个新的命令提示符窗口再执行上述检查命令。因为环境变量的修改只对新打开的终端生效。1.2 Maven安装包获取与验证确认JDK没问题后我们就可以着手准备Maven了。获取Maven安装包的首选也是唯一推荐渠道是Apache Maven项目的官方网站。直接搜索“Apache Maven”找到官网进入“Download”页面。在下载页面你会看到两个主要版本Binary zip archive和Source zip archive。我们需要的是二进制发行版也就是Binary zip archive。源代码版是给需要研究或修改Maven源码的人准备的我们直接用编译好的就行。找到Files部分选择apache-maven-3.9.5-bin.zip这个文件进行下载。这是Windows下最通用的格式。为什么不下载.exe安装程序因为.zip压缩包更干净解压即用没有多余的安装步骤也方便后续管理和迁移。下载完成后强烈建议你校验一下文件的完整性。尤其是从开源镜像站下载时文件可能在传输过程中损坏。官网提供了.sha512校验文件。你可以使用Windows PowerShell来校验。打开PowerShell切换到下载文件所在的目录执行以下命令Get-FileHash .\apache-maven-3.9.5-bin.zip -Algorithm SHA512将命令输出的哈希值一长串字符与官网下载页面提供的apache-maven-3.9.5-bin.zip.sha512文件内容进行比对。如果完全一致说明文件完好无损。这一步虽然有点技术性但能避免因文件损坏导致的各种诡异安装失败养成这个好习惯受益无穷。2. 核心安装步骤与配置详解拿到完整的安装包后我们就可以开始正式的安装和配置了。这个过程的核心可以概括为三步解压、配置环境变量、验证。但每一步里都有不少细节决定成败。2.1 解压与目录规划将下载好的apache-maven-3.9.5-bin.zip解压到你认为合适的目录。这里有一个非常重要的实操心得不要解压到带有中文或空格的路径下虽然新版本的软件对路径的支持越来越好但为了避免任何潜在的、难以排查的编码问题请始终为开发工具选择纯英文、无空格的路径。例如以下都是不好的选择C:\Users\张三\开发工具\Maven(包含中文)C:\Program Files\apache-maven(包含空格)D:\My Tools\Maven 3.9.5(包含空格)我个人的习惯是在某个盘的根目录下创建一个专门的文件夹比如D:\DevTools然后把所有开发相关的软件都放进去清晰又安全。所以我会把Maven解压到D:\DevTools\apache-maven-3.9.5。解压后进入这个目录你会看到类似这样的结构D:\DevTools\apache-maven-3.9.5\ ├── bin\ # 包含mvn等可执行脚本 ├── boot\ # 包含类加载器框架 ├── conf\ # 配置文件目录最重要的settings.xml就在这里 ├── lib\ # Maven运行时依赖的库 └── LICENSE、NOTICE、README.txt 等说明文件请记下这个完整的、不带中文和空格的路径下一步配置环境变量时需要用到。2.2 环境变量配置的底层原理环境变量是操作系统提供给应用程序的一套全局“通讯录”。M2_HOME和MAVEN_HOME这两个变量本质上都是用来告诉系统“Maven的家在哪里”。历史上M2_HOME是Maven 2时代使用的MAVEN_HOME是更通用的名称。现在两者基本通用很多教程会教你设其中一个。但为了兼容性我建议两个都设置并且指向同一个目录即你的Maven解压目录例如D:\DevTools\apache-maven-3.9.5。这能避免某些老旧脚本或工具因为只认其中一个变量名而报错。配置方法如下在Windows搜索框输入“环境变量”选择“编辑系统环境变量”。点击下方的“环境变量(N)...”按钮。在“系统变量”区域点击“新建”。变量名M2_HOME变量值D:\DevTools\apache-maven-3.9.5(你的实际路径)再次点击“新建”。变量名MAVEN_HOME变量值D:\DevTools\apache-maven-3.9.5(与M2_HOME相同)找到系统变量中的Path变量选中后点击“编辑”。点击“新建”然后添加一行%M2_HOME%\bin。也可以添加%MAVEN_HOME%\bin效果一样因为两个变量值相同。%M2_HOME%是一个引用系统会自动将其替换为M2_HOME变量的值。这样做的好处是如果以后你升级Maven只需要修改M2_HOME和MAVEN_HOME的值为新路径Path里的设置会自动生效无需再改。这里有一个巨坑点击“编辑”Path变量时Windows 10可能会展示两种界面。一种是旧式的分号分隔的字符串另一种是新式的列表。如果你看到的是列表推荐就按上述“新建”方式添加。如果是旧式字符串你需要在字符串的末尾先添加一个英文分号;然后加上%M2_HOME%\bin。千万注意不要误删原有的其他路径。配置完成后必须、一定、务必要点击所有打开窗口的“确定”按钮来保存然后关闭。光点“X”是没用的。2.3 安装验证与版本信息解读环境变量配置好后最关键的一步来了验证。很多人在这一步失败问题就出在验证的姿势不对。正确的验证姿势是完全关闭你之前打开的所有命令提示符CMD或PowerShell窗口然后重新打开一个新的。这是因为新的环境变量只对新启动的进程生效。如果你不关掉旧的窗口它里面还是旧的、没有Maven路径的环境。在新打开的CMD或PowerShell中输入命令mvn -v或者mvn --version如果安装和配置一切正确你将看到类似下面的输出Apache Maven 3.9.5 (57804ffe21d7201b294b6d7df6f6c9a1c40ef19e) Maven home: D:\DevTools\apache-maven-3.9.5 Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_381\jre Default locale: zh_CN, platform encoding: GBK OS name: windows 10, version: 10.0, arch: amd64, family: windows让我们解读一下这个输出它能告诉你很多信息Apache Maven 3.9.5: 确认安装的Maven版本说明命令找到了。Maven home: ...: 显示Maven的安装目录这应该和你设置的M2_HOME一致。如果不一致说明环境变量没生效或生效错了。Java version: 1.8.0_381: 显示Maven运行时使用的Java版本。这必须是JDK版本而不能只是JRE。如果这里显示的是类似java version “1.8.0”但没有javac相关的vendor信息可能有问题。Default locale: zh_CN, platform encoding: GBK: 显示默认区域和平台编码。这里的GBK编码在后续开发中可能会引起乱码问题我们可以在Maven配置文件中进行优化。OS信息确认你的操作系统。如果输入mvn -v后提示“mvn不是内部或外部命令也不是可运行的程序或批处理文件。”那说明配置失败了。请按以下顺序排查检查路径确认M2_HOME和MAVEN_HOME变量值是否完全正确末尾有无多余空格或分号。检查Path在CMD中输入echo %Path%查看输出的路径列表中是否包含D:\DevTools\apache-maven-3.9.5\bin或你的路径。如果没有说明Path没加对。重启终端确认你是否是在配置环境变量后新打开的CMD窗口。检查JDK再次用java -version和javac -version确认JDK无误。3. 核心配置优化与本地仓库设置Maven安装成功只是第一步让它更好地为你工作还需要进行一些核心配置。最主要的配置文件位于Maven安装目录的conf文件夹下名为settings.xml。这个文件控制着Maven的全局行为比如本地仓库位置、镜像服务器、网络代理等。我们一般不直接修改conf下的原文件而是将其复制到用户目录下的.m2文件夹中进行个性化修改。这样做的好处是即使未来升级Maven你的个人配置也不会被覆盖。3.1 本地仓库路径自定义本地仓库Local Repository是Maven在你电脑磁盘上创建的一个目录默认位于用户主目录下的.m2/repository文件夹例如C:\Users\你的用户名\.m2\repository。所有从远程仓库下载的依赖Jar包都会存储在这里。项目构建时Maven会优先从这里查找依赖。默认位置在C盘有两个问题一是可能占用系统盘空间二是重装系统时仓库会丢失。因此自定义本地仓库路径是一个好习惯。操作步骤在你想存放仓库的位置创建一个文件夹例如D:\Maven-Repository。路径依然要避免中文和空格。找到D:\DevTools\apache-maven-3.9.5\conf\settings.xml用文本编辑器如VS Code、Notepad打开。找到被注释掉的 标签。它大概长这样!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository localRepository/path/to/local/repo/localRepository --我们需要取消注释并修改它。将上面这段修改为localRepositoryD:\Maven-Repository/localRepository注意标签是成对出现的 修改时一定要保持标签的完整性不要破坏XML结构。路径中的斜杠/或反斜杠\在XML中通常都接受但为了保险可以使用/或\。3.2 镜像仓库配置加速下载Maven默认从中央仓库位于国外下载依赖在国内速度可能很慢甚至无法连接。配置国内镜像仓库可以极大提升下载速度。阿里云的Maven镜像在国内开发者中广泛使用。在settings.xml文件中找到标签。在这个标签内部添加一个子标签mirrors mirror idaliyunmaven/id name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url mirrorOfcentral/mirrorOf /mirror /mirrors这段配置的意思是将所有对central中央仓库的请求镜像重定向到阿里云的仓库地址。mirrorOfcentral/mirrorOf是关键它指定了镜像覆盖的范围。你也可以用*来镜像所有仓库但有时可能会和公司私服冲突所以通常只镜像central就足够了。3.3 JDK版本全局配置虽然我们系统环境变量已经设置了JDK但Maven编译项目时使用的JDK版本可以通过settings.xml中的profile来全局指定这可以确保所有项目使用统一的编译环境。在settings.xml中找到 标签在里面添加如下profile配置profiles profile idjdk-1.8/id activation activeByDefaulttrue/activeByDefault jdk1.8/jdk /activation properties maven.compiler.source1.8/maven.compiler.source maven.compiler.target1.8/maven.compiler.target maven.compiler.compilerVersion1.8/maven.compiler.compilerVersion project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties /profile /profiles这个配置做了几件事当检测到JDK版本为1.8时自动激活此配置。默认激活即使没有明确指定。设置源代码编译版本为1.8。设置生成的字节码目标版本为1.8。设置编译器版本。设置项目构建的源文件编码为UTF-8这是解决中文乱码问题的关键一步。完成以上settings.xml的修改后保存文件。然后将这个修改好的settings.xml文件复制到你的用户目录下的.m2文件夹中例如C:\Users\你的用户名\.m2\。如果.m2文件夹不存在可以手动创建。Maven启动时会优先使用用户目录下的settings.xml如果找不到才会使用全局的conf/settings.xml。4. 实战测试与第一个Maven项目配置完成后我们需要通过一个实际的操作来验证Maven是否真的能正常工作。最好的测试方法就是让Maven创建一个标准的项目骨架并尝试进行编译。4.1 使用Archetype快速生成项目Maven提供了一个叫maven-archetype-quickstart的模板可以快速生成一个简单的Java项目结构。我们通过命令行来生成。打开命令提示符切换到你希望创建项目的目录例如D:\Projects。然后执行以下命令mvn archetype:generate -DgroupIdcom.mycompany -DartifactIdmy-first-app -DarchetypeArtifactIdmaven-archetype-quickstart -DarchetypeVersion1.4 -DinteractiveModefalse这个命令有点长我们来拆解一下mvn archetype:generate调用Maven的generate目标使用原型模板创建项目。-DgroupIdcom.mycompany定义项目的组织或公司唯一标识符通常使用反转的域名。这是Maven坐标的一部分。-DartifactIdmy-first-app定义项目名称模块名。这将是生成的项目文件夹名。-DarchetypeArtifactIdmaven-archetype-quickstart指定使用的原型模板ID这里是最基础的快速开始模板。-DarchetypeVersion1.4指定原型的版本。-DinteractiveModefalse关闭交互模式。如果设为trueMaven会在过程中询问你一些参数我们这里直接通过-D参数提供所以关闭交互。执行这个命令后Maven会开始工作。你会看到控制台开始滚动输出它首先会从配置的仓库我们配的是阿里云镜像下载生成项目所需的各种插件和依赖。第一次运行会下载很多东西时间会比较长这是正常的因为Maven正在填充你的本地仓库。请确保网络连接正常。当看到BUILD SUCCESS字样时说明项目创建成功了。此时在当前目录下会生成一个名为my-first-app的文件夹这就是你的第一个Maven项目。4.2 项目结构解析与核心POM文件进入my-first-app目录你会看到如下结构my-first-app/ ├── pom.xml # 项目对象模型文件Maven的核心配置文件 └── src/ ├── main/ │ └── java/ │ └── com/ │ └── mycompany/ │ └── App.java # 自动生成的主类 └── test/ └── java/ └── com/ └── mycompany/ └── AppTest.java # 自动生成的测试类这就是Maven约定的标准目录结构Convention Over Configuration。你不需要手动创建这些目录Maven插件知道去哪里找源代码、资源文件和测试代码。这个约定大大简化了项目配置。核心中的核心是pom.xml文件。用编辑器打开它内容大致如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.mycompany/groupId artifactIdmy-first-app/artifactId version1.0-SNAPSHOT/version packagingjar/packaging namemy-first-app/name urlhttp://www.example.com/url properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding maven.compiler.source1.8/maven.compiler.source maven.compiler.target1.8/maven.compiler.target /properties dependencies dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.11/version scopetest/scope /dependency /dependencies /projectgroupId,artifactId,version这三个元素构成了项目的坐标GAV在Maven世界中唯一标识一个项目或依赖。packaging项目打包方式jar表示打包成JAR文件。properties定义了一些属性这里覆盖了我们之前在settings.xml中设置的编码和JDK版本项目级的优先级更高。dependencies依赖管理部分。这里声明了项目需要junit库且作用域scope为test意味着它只在运行测试时需要不会被打进最终的生产包。4.3 执行构建生命周期与常用命令现在让我们在项目根目录即pom.xml所在目录打开命令行执行Maven的构建命令。最常用的命令是mvn clean compileclean清理生命周期阶段会删除之前构建生成的target目录。compile默认生命周期阶段编译主源代码src/main/java下的文件。执行后Maven会下载编译所需的插件如maven-compiler-plugin和依赖然后进行编译。成功后你会在项目下看到一个新增的target文件夹里面classes目录就是编译好的.class文件。另一个非常重要的命令是打包mvn clean package这个命令会依次执行clean、compile、test运行测试、package打包等阶段。最终在target目录下生成一个以artifactId和version命名的JAR文件例如my-first-app-1.0-SNAPSHOT.jar。你可以运行这个JAR包来验证java -cp target/my-first-app-1.0-SNAPSHOT.jar com.mycompany.App如果看到输出Hello World!那么恭喜你一个完整的Maven项目从创建、编译、打包到运行全部成功了5. 高级配置、问题排查与效能提升基础功能跑通后我们还需要了解一些高级配置和常见问题的解决方法这能让你的Maven使用体验更上一层楼。5.1 配置IDE集成以IntelliJ IDEA为例在实际开发中我们很少直接用命令行操作Maven而是通过集成开发环境IDE。这里以IntelliJ IDEA为例说明如何配置。打开或导入项目在IDEA中选择“Open”或“Import Project”导航到你的my-first-app文件夹选择其中的pom.xml文件打开。IDEA会自动识别为Maven项目。检查Maven配置打开File - Settings - Build, Execution, Deployment - Build Tools - Maven。Maven home path这里应该自动检测到你的Maven安装路径即M2_HOME。如果没有手动指向D:\DevTools\apache-maven-3.9.5。User settings file这里应该显示为你用户目录下的.m2/settings.xml文件路径。这确保了IDEA使用你自定义的镜像和仓库设置。Local repository这里应该显示为你自定义的本地仓库路径如D:\Maven-Repository。确认无误。启用自动导入在Maven设置面板的右上方有一个“Importing”标签页。勾选“Import Maven projects automatically”。这样当你修改pom.xml文件时IDEA会自动下载新的依赖非常方便。使用Maven工具窗口IDEA右侧边栏有一个“Maven”工具窗口按钮或通过View - Tool Windows - Maven打开。在这里你可以看到项目的生命周期Lifecycle、插件Plugins、依赖Dependencies。双击clean、compile、package等即可执行对应命令无需手动输入命令行。5.2 网络问题与代理配置如果你在公司内网可能需要配置代理才能访问外部仓库如阿里云镜像。这时需要修改settings.xml文件。在settings.xml中找到 标签如果没有就创建一个添加代理配置proxies proxy idmy-proxy/id activetrue/active protocolhttp/protocol hostproxy.mycompany.com/host port8080/port !-- 如果代理需要认证 -- usernameproxyuser/username passwordproxypass/password !-- 哪些主机不走代理本地和内部仓库通常排除 -- nonProxyHostslocalhost|127.0.0.1|*.mycompany.com/nonProxyHosts /proxy /proxies你需要将host、port、username、password替换为你公司网络代理的实际信息。nonProxyHosts用于指定哪些主机名不通过代理访问用竖线|分隔。5.3 依赖下载失败与仓库清理在使用Maven过程中最常遇到的问题就是依赖下载失败导致构建报错。这通常表现为控制台输出中有Could not transfer artifact ...或Could not resolve dependencies等错误信息并伴随一堆“Downloading...”的提示卡住或报错。排查思路与解决方案检查网络与镜像配置首先确认网络连接正常。然后检查你的settings.xml中的镜像配置阿里云是否正确无误。可以尝试在浏览器中直接打开镜像地址https://maven.aliyun.com/repository/public看是否能访问。清理未完成的下载有时网络中断会导致依赖包下载不完整形成一个以.lastUpdated结尾的临时文件Maven会认为这个依赖已存在但损坏不再重新下载。这时需要清理本地仓库。找到你的本地仓库目录如D:\Maven-Repository。在仓库根目录下搜索所有以.lastUpdated结尾的文件将其全部删除。你可以写一个简单的批处理脚本.bat来做这件事echo off rem 请将下面的路径替换为你自己的本地仓库路径 set REPOSITORY_PATHD:\Maven-Repository for /f delims %%i in (dir /b /s %REPOSITORY_PATH%\*.lastUpdated) do ( echo Deleting %%i del %%i ) pause删除后重新执行Maven命令如mvn clean compileMaven会重新下载这些依赖。强制更新快照依赖如果你的项目依赖了版本号带-SNAPSHOT的构件快照版本Maven默认每天只会检查一次更新。如果你想强制更新到最新的快照可以使用-U参数mvn clean compile -U离线模式与依赖排查如果网络实在不通但你有完整的本地仓库可以尝试离线模式让Maven只从本地仓库查找依赖mvn clean compile -o使用mvn dependency:tree命令可以打印出项目的完整依赖树帮助你分析哪些依赖引入了冲突或找不到。5.4 效能提升技巧与最佳实践使用更快的镜像除了阿里云也可以尝试腾讯云、华为云等提供的镜像选择网络延迟最低的那个。可以在settings.xml中配置多个mirror但注意mirrorOf不要冲突。调整Maven运行参数默认Maven运行内存可能较小处理大项目时容易内存溢出。可以设置环境变量MAVEN_OPTS来调整JVM参数。例如在系统环境变量中新建变量名MAVEN_OPTS变量值-Xms512m -Xmx1024m -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue这里设置了堆内存初始512M最大1024M并忽略了一些SSL证书检查在某些内部环境下可能需要。IDE与Maven版本匹配确保你使用的IDE版本与其内置或推荐的Maven版本兼容。过旧的IDE可能无法完全支持Maven 3.9.5的新特性虽然大部分情况没问题但遇到奇怪问题时可以考虑降级Maven版本如3.6.3试试。保持pom.xml简洁只声明你项目直接需要的依赖。Maven的传递性依赖机制会自动引入间接依赖。使用mvn dependency:tree定期检查依赖移除无用或重复的依赖声明。理解SNAPSHOT与RELEASE在团队开发中正在活跃开发的模块版本号可以使用-SNAPSHOT后缀如1.0-SNAPSHOTMaven会定期检查更新。用于发布的稳定版本则应该使用不带后缀的RELEASE版本如1.0。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进