本文纲要一、Maven概述1.1 标准化的项目结构1.2 标准化的构建流程1.3 依赖管理机制1.4 市场占比二、Maven核心概念2.1 项目对象模型(POM)2.2 坐标2.3 仓库三、Maven安装与配置3.1 下载与解压3.2 目录结构3.3 配置环境变量3.4 配置本地仓库3.5 配置阿里云镜像四、Maven基本使用4.1 项目结构示例4.2 常用命令4.3 生命周期五、在IDEA中使用Maven5.1 配置Maven环境5.2 了解坐标5.3 创建Maven项目5.4 导入Maven项目5.5Maven Helper插件六、依赖管理6.1 在pom.xml中引入依赖6.2 自动刷新配置6.3 快捷键导入依赖七、依赖范围(Scope)7.1 六种依赖范围7.2 示例provided范围效果Maven概述Maven是 Apache 旗下的一款专门用于 管理和构建Java项目 的工具。它主要提供三大功能标准化项目结构标准化构建流程依赖管理机制1 ) 标准化的项目结构不同IDE如Eclipse、MyEclipse、IntelliJ IDEA创建的项目结构往往不同导致项目不可通用。Maven定义了一套固定的目录布局所有IDE使用Maven创建的项目结构完全一致可以无缝跨IDE导入和运行。标准Maven项目结构如下project-name ├── pom.xml ├── src │ ├── main │ │ ├── java # 主程序源代码 │ │ ├── resources # 主程序资源文件 │ │ └── webapp # Web项目目录Java项目可选 │ └── test │ ├── java # 测试代码 │ └── resources # 测试资源文件src/main/java存放项目核心Java源文件。src/main/resources存放项目配置文件等资源。src/test/java存放单元测试代码。src/test/resources存放测试相关的资源文件。pom.xmlMaven项目的核心配置文件管理依赖、构建等。2 ) 标准化的构建流程一个Java项目从源码到可运行包通常需要经历 编译 → 测试 → 打包 → 部署/安装 等环节。手工执行这些步骤繁琐且容易出错尤其是在多模块大型项目中。Maven提供了一组简单的命令来自动化完成整个构建流程例如mvn compile编译mvn test运行测试mvn package打包JAR/WARmvn install安装到本地仓库通过Maven的这些命令开发者无需手动敲 javac 或打包指令一键即可完成构建。3 ) 依赖管理机制项目通常需要依赖第三方库JAR包例如MySQL驱动、连接池等。传统方式需要手动下载JAR、复制到项目、添加到构建路径过程繁琐且版本管理困难。Maven通过坐标GAV来唯一标识一个依赖只需在 pom.xml 中配置依赖坐标Maven会自动从仓库下载并添加到项目中大大简化了依赖管理。下面是一段典型的Maven依赖配置!-- pom.xml片段 --dependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.32/version/dependency/dependencies配置后刷新项目Maven就会自动将mysql-connector-java-5.1.32.jar引入工程4 ) 市场占比下图展示了主流构建工具的市场份额64%25%6%5%项目构建工具市场占比MavenGradleAnt其他Maven凭借其稳定、丰富的插件生态和广泛的社区支持至今仍是Java项目构建的首选工具。Maven核心概念1 项目对象模型(POM)Maven基于 项目对象模型Project Object Model 的概念核心配置均写在 pom.xml 文件中。POM描述了项目的坐标、依赖、构建插件等信息。正是这个模型让依赖管理和标准化构建成为可能。2 坐标Maven使用 坐标 唯一标识每一个工件JAR、WAR等。坐标由三部分组成元素说明示例groupId组织或公司域名反写com.alibabaartifactId模块名称druidversion版本号1.1.12定义项目自身坐标groupIdcom.wb/groupIdartifactIdmaven-project/artifactIdversion1.0-SNAPSHOT/version引入其他依赖坐标dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.32/version/dependency3 ) 仓库Maven中存储构件JAR包、插件等的地方称为 仓库分为三种本地仓库用户计算机上的一个目录首次使用时Maven会将从远程下载的依赖存储在此。中央仓库由Maven团队维护的全球唯一仓库存放绝大多数开源构件。远程仓库私服企业或团队自行搭建的仓库一般用于加速下载或托管私有构件。依赖查找流程存在不存在是否找到未找到找到项目声明依赖查找本地仓库直接引用是否配置私服?查找私服查找中央仓库下载并缓存到本地仓库首次引入依赖时Maven会先检查本地仓库若没有则去远程仓库私服或中央仓库下载并保存在本地仓库中后续其它项目可直接复用。Maven安装与配置1 ) 下载与解压Maven是绿色软件只需解压即可使用。以apache-maven-3.6.1-bin.zip为例将其解压到指定目录如D:\software\apache-maven-3.6.1。2 ) 目录结构解压后的Maven目录结构apache-maven-3.6.1├── bin # 可执行命令mvn等├── boot # Maven自身的类加载器框架├── conf # 配置文件settings.xml等└── lib # Maven运行依赖的库3 ) 配置环境变量新增系统变量MAVEN_HOME值为Maven的解压目录如D:\software\apache-maven-3.6.1。在 Path 变量中添加%MAVEN_HOME%\bin。命令行执行mvn -version显示版本信息即配置成功。4 ) 配置本地仓库默认本地仓库位于C:\Users\用户名\.m2\repository为避免占用C盘空间可自定义路径。编辑conf/settings.xml找到localRepository标签修改为自定义目录例如localRepositoryD:/software/apache-maven-3.6.1/mvn_repo/localRepository注意目录需提前创建5 ) 配置阿里云镜像中央仓库位于国外下载速度较慢。配置阿里云镜像可大幅提升下载速度。在settings.xml的mirrors标签内添加mirroridalimaven/idmirrorOfcentral/mirrorOfnamealiyun maven/nameurlhttps://maven.aliyun.com/repository/public/url/mirror保存后即可享受国内高速下载。Maven基本使用1 ) 项目结构示例以maven-project为例目录树如下maven-project ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── wb │ │ │ └── HelloWorld.java │ │ └── resources │ └── test │ ├── java │ │ └── com │ │ └── wb │ │ └── TestMaven.java │ └── resources核心代码 HelloWorld.javapackagecom.wb;publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println(Hello Maven~);}}测试代码 TestMaven.javapackagecom.wb;importorg.junit.Test;publicclassTestMaven{Testpublicvoidtest(){System.out.println(maven test );}}pom.xml 引入依赖?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.wb/groupIdartifactIdmaven-project/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/properties!-- 导入 mysql 驱动jar包--dependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.32/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.12/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13/versionscopetest/scope/dependency/dependencies/project2 ) 常用命令在项目根目录pom.xml所在目录下打开命令行执行以下命令命令功能输出物mvn compile编译主代码target/classes下的字节码文件mvn clean清理删除 target 目录—mvn test执行测试测试报告并运行TestMavenmvn package打包成 JAR/WARtarget/maven-project-1.0-SNAPSHOT.jarmvn install安装到本地仓库本地仓库中对应坐标目录下的 JAR首次执行时会自动下载所需插件之后可直接复用。3 ) 生命周期Maven定义了三套独立的生命周期clean生命周期清理项目。default生命周期核心工作包括编译、测试、打包、安装、部署等。site生命周期生成项目站点文档较少使用。重要特性在同一套生命周期内执行后面的命令会自动触发前面的命令。例如执行 mvn install 实际会依次执行 compile → test → package → install。mermaidflowchart LRA[compile] -- B[test] -- C[package] -- D[install]这意味着一条mvn install即可完成编译、测试、打包、安装的全部工作极大地简化了构建操作在IDEA中使用Maven1 ) 配置Maven环境IntelliJ IDEA 内置了Maven但建议配置为本地安装的版本以确保仓库和镜像设置生效。打开File → Settings或Preferences搜索 Maven。设置Maven home path选择本地Maven安装目录。设置User settings file勾选Override选择自定义的settings.xml例如conf/settings.xml此时Local repository会自动识别。点击Apply。2 ) 了解坐标Maven坐标的组成已在2.2节介绍。在IDEA中创建项目或引入依赖时需要填写groupId、artifactId、version。3 ) 创建Maven项目新建 Module选择左侧Maven勾选Create from archetype简单项目可不勾选。填写项目名称同时也会作为artifactId。填写 GroupId例如com.wb。确认项目路径和版本点击Finish。生成的项目结构符合Maven标准可直接编写代码。4 ) 导入Maven项目将项目文件夹复制到工作区避免中文路径。在IDEA右侧打开Maven工具窗口若未显示通过View → Tool Windows → Maven打开。点击号Add Maven Projects选择项目的pom.xml项目即被导入。5 ) Maven Helper插件推荐安装Maven Helper插件File → Settings → Plugins搜索Maven Helper点击Install。安装后重启IDE。该插件在pom.xml右键菜单增加Run Maven和Debug Maven选项可快速执行Maven命令同时提供依赖分析等功能。依赖管理1 ) 在pom.xml中引入依赖在dependencies标签内添加dependency配置groupId、artifactId、version即可。手动编写示例dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.12/version/dependency配置完成后需点击Maven工具窗口的 刷新 按钮或快捷键CtrlShiftO使依赖生效。若未刷新依赖将不会下载IDEA仍显示红色。搜索依赖坐标直接访问https://mvnrepository.com搜索所需库复制其dependency片段即可。2 ) 自动刷新配置若希望pom.xml修改后自动同步依赖可设置File → Settings → Build, Execution, Deployment → Build Tools将Reload project after changes设置为Any changes。此后每次保存 pom.xml 都会自动更新依赖。3 ) 快捷键导入依赖在pom.xml中输入dependencies然后按Alt Insert或对应快捷键选择Dependency直接搜索本地仓库已有的依赖一键添加。此方式适用于本地仓库已有缓存的构件。依赖范围(Scope)依赖范围scope控制在编译、测试、运行三种 classpath 下依赖 JAR 是否可见。1 ) 六种依赖范围scope编译 classpath测试 classpath运行 classpath说明compile(默认)✔✔✔全能大部分依赖都使用此范围test✖✔✖仅测试代码可用如 junitprovided✔✔✖编译和测试可用但运行时由容器提供如 servlet-apiruntime✖✔✔编译不需要运行时才需要如 JDBC 驱动实现system✔✔✖与 provided 类似但必须显式指定本地路径不常用import———高级用法在 中导入其他 POM 的依赖管理最常用的范围是compile、test和provided。2 ) 示例provided范围效果创建一个 Web 项目的pom.xml引入servlet-apidependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency在src/main/java中编写Servlet编译通过编译有效。在src/test/java中测试也可引用测试有效。执行mvn package打包成 WAR 后WEB-INF/lib中不会包含该 JAR因为 Tomcat 等容器会提供避免冲突。类似地mysql-connector-java如果只用在运行时如通过 DriverManager 加载可设置为runtime编译阶段不会污染代码提示。但通常不建议随意更改默认compile。总结本文作为 JavaWeb 快速入门的开篇系统介绍了 Maven 的核心功能、原理及使用方法。掌握 Maven 可以显著提升 Java 项目的开发效率和可维护性。在后续的 JavaWeb 学习中所有项目都将以 Maven 为基础进行构建和管理。