Maven 项目构建与依赖管理第一章.Maven 基础1.1 Maven 的介绍1.Maven: 一款 Java 项目构建和依赖管理工具。 2.核心能力: a.依赖管理 b.项目构建 3.核心配置文件: pom.xml开发者编写 pom.xml ↓ Maven 读取配置 ↓ 下载依赖、编译代码、运行测试、打包项目1.2 Maven 解决的问题问题没有 Maven使用 Mavenjar 包管理手动下载、复制、容易缺依赖在pom.xml写坐标自动下载依赖传递需要人工找依赖的依赖自动处理传递依赖项目结构每个人目录习惯不同统一标准目录构建过程IDE 点按钮或手动操作使用统一命令团队协作jar 包和版本不一致统一依赖版本1.3 Maven 工作原理pom.xml ↓ Maven 根据坐标查找依赖 ↓ 先查本地仓库 ↓ 本地没有再查远程仓库或中央仓库 ↓ 下载依赖到本地仓库 ↓ 执行生命周期中的编译、测试、打包等任务1.pom.xml: 描述项目、依赖、插件和构建规则。 2.本地仓库: 保存下载过的依赖。 3.远程仓库: 团队或公司维护的依赖仓库。 4.中央仓库: Maven 官方默认公共仓库。第二章.Maven 坐标和项目结构2.1 GAVP 坐标1.GAV: Maven 项目的唯一身份标识。 2.GAVP: GroupId ArtifactId Version Packaging 3.GroupId、ArtifactId、Version 必填。 4.Packaging 可选,默认 jar。属性作用是否必填示例groupId组织、公司、业务线是com.exampleartifactId项目名或模块名是student-serviceversion项目版本是1.0.0packaging打包方式否jar、war、pom2.2 坐标命名建议1.groupId: 通常使用公司域名反写 业务线。 例如: com.alibaba.sourcing 2.artifactId: 通常使用产品线名-模块名。 例如: bookstore-api 3.version: 通常使用 主版本.次版本.修订号。 例如: 1.0.0版本变化含义示例主版本号不兼容的大改动1.0.0-2.0.0次版本号兼容的新功能1.0.0-1.1.0修订号Bug 修复或小优化1.0.0-1.0.12.3 Packaging 打包方式类型说明常见场景jar默认值打包成.jar普通 Java 工程、工具模块war打包成.warJava Web 工程pom不生成业务包父工程、聚合工程2.4 Maven 标准项目结构student-score-project ├── pom.xml └── src ├── main │ ├── java │ │ └── com/example │ │ ├── controller │ │ ├── service │ │ ├── dao │ │ └── model │ └── resources │ ├── jdbc.properties │ └── log4j.properties └── test ├── java │ └── com/example └── resources目录作用pom.xmlMaven 项目配置文件src/main/java正式 Java 源代码src/main/resources正式资源文件src/test/java测试 Java 源代码src/test/resources测试资源文件targetMaven 构建输出目录第三章.POM 文件3.1 最小 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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIdstudent-score-project/artifactId version1.0.0/version packagingjar/packaging /project3.2 常用 POM 标签标签作用modelVersionPOM 模型版本通常固定为4.0.0groupId项目组标识artifactId项目名或模块名version项目版本packaging打包方式properties统一配置变量dependencies声明项目依赖build配置构建行为3.3 properties 统一配置properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target junit.version5.10.2/junit.version mysql.version8.0.33/mysql.version /properties1.统一管理 JDK 版本。 2.统一管理编码。 3.统一管理第三方依赖版本。 4.后续修改版本时,只改一处。第四章.依赖管理4.1 依赖的介绍1.依赖: 当前项目需要使用的第三方 jar 包或其他 Maven 模块。 2.Maven 依赖管理: 在 pom.xml 中声明依赖坐标, Maven 自动下载并加入项目。 3.依赖声明位置: dependencies dependency.../dependency /dependencies4.2 添加依赖dependencies dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version${mysql.version}/version /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version${junit.version}/version scopetest/scope /dependency /dependencies4.3 依赖查询方式1.Maven 仓库网站: https://mvnrepository.com/ 2.IDEA Maven 搜索功能。 3.官方文档提供的依赖坐标。依赖版本要确认存在如果groupId、artifactId或version写错Maven 会提示找不到对应依赖。第五章.依赖范围 scope5.1 scope 的作用1.scope: 控制依赖在哪些阶段生效。 2.常见阶段: 编译 main 编译 test 测试运行 项目运行 打包5.2 常见 scopescopemain 编译test 编译测试运行运行打包常见依赖compile是是是是是普通工具包provided是是是否否Servlet APIruntime否是是是是JDBC 驱动test否是是否否JUnitdependency groupIdjakarta.servlet/groupId artifactIdjakarta.servlet-api/artifactId version6.0.0/version scopeprovided/scope /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.10.2/version scopetest/scope /dependency1.compile: 默认范围,不写 scope 就是 compile。 2.provided: 编译需要,运行由服务器提供。 3.runtime: 编译时不直接用,运行时需要。 4.test: 只在测试代码中使用。第六章.依赖传递和依赖冲突6.1 依赖传递1.依赖传递: A 依赖 B,B 依赖 C, 那么 A 可能也会间接依赖 C。 2.例子: 项目依赖 jackson-databind。 jackson-databind 会传递引入 jackson-core 和 jackson-annotations。dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.15.0/version /dependency当前项目 ↓ jackson-databind ├── jackson-core └── jackson-annotations6.2 依赖传递范围1.compile 范围通常可以传递。 2.test 范围通常不传递到主项目。 3.provided 范围通常不参与最终运行打包传递。6.3 依赖冲突1.依赖冲突: 项目中直接或间接出现同一个 jar 的不同版本。 2.Maven 会按规则自动选择一个版本。 3.冲突可能导致: a.编译报错 b.运行时找不到方法 c.版本行为不一致6.4 冲突解决规则规则说明最短路径优先谁离当前项目更近使用谁先声明优先路径一样长时谁先声明使用谁A - B - C - X:1.0 A - F - X:2.0 最终使用 X:2.0,因为路径更短。A - B - X:1.0 A - F - X:2.0 路径一样长时,谁先声明谁优先。6.5 手动排除依赖dependency groupIdcom.example/groupId artifactIddemo-service/artifactId version1.0.0/version exclusions exclusion groupIdcommons-logging/groupId artifactIdcommons-logging/artifactId /exclusion /exclusions /dependency排除依赖要谨慎排除传递依赖前要确认当前项目确实不需要它否则可能导致运行时缺类。第七章.Maven 生命周期和常用命令7.1 构建的介绍1.项目构建: 把源代码、配置文件、资源文件和依赖转换成可运行或可部署结果。 2.常见构建过程: 清理 编译 测试 打包 安装到本地仓库 部署到远程仓库7.2 常用命令命令作用mvn clean删除target目录mvn compile编译src/main/javamvn test编译并运行测试mvn package打包项目生成 jar 或 warmvn install打包并安装到本地仓库mvn deploy发布到远程仓库或私服mvn site生成项目站点报告mvn clean package执行 mvn clean package 时: 1.先删除 target。 2.编译正式代码。 3.编译测试代码。 4.运行测试。 5.生成 jar 或 war。命令执行位置Maven 命令通常要在pom.xml所在目录执行。7.3 生命周期的顺序性1.Maven 生命周期有顺序。 2.执行后面的阶段,会自动执行前面的阶段。 3.例如执行 package,会先执行 compile 和 test。validate - compile - test - package - verify - install - deploy7.4 跳过测试mvn package -DskipTests1.-DskipTests: 跳过测试执行,但仍可能编译测试代码。 2.-Dmaven.test.skiptrue: 跳过测试编译和测试执行。 3.一般优先使用 -DskipTests。第八章.build 和插件配置8.1 build 的作用1.build: 配置 Maven 构建行为。 2.常见用途: a.指定最终打包名称 b.配置资源文件打包规则 c.配置插件 d.配置 JDK 编译版本8.2 自定义打包名称build finalNamestudent-score/finalName /build默认打包名称: artifactId-version.打包方式 自定义后: finalName.打包方式8.3 resources 资源打包1.src/main/resources: 默认会打包到 classes 目录。 2.src/main/java: 默认只编译 .java 文件。 3.如果把 XML 放在 src/main/java 下: 默认可能不会被打包。build resources resource directorysrc/main/resources/directory includes include**/*.xml/include include**/*.properties/include /includes /resource /resources /build8.4 插件和依赖的区别类型配置位置作用依赖 dependencydependencies项目代码编译或运行需要的 jar插件 pluginbuildpluginsMaven 构建过程需要的工具8.5 配置编译插件build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source17/source target17/target encodingUTF-8/encoding /configuration /plugin /plugins /build8.6 配置 war 插件build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId version3.3.2/version /plugin /plugins /build常见场景: JDK 版本较高时,低版本 war 插件可能不兼容。 此时可以显式升级 maven-war-plugin 版本。第九章.Maven 仓库9.1 仓库类型仓库说明常见位置本地仓库本机缓存依赖和插件~/.m2/repository中央仓库Maven 官方公共仓库https://repo.maven.apache.org/maven2远程仓库公司私服或第三方仓库Nexus、阿里云镜像等9.2 查找依赖顺序本地仓库 ↓ 没有 远程仓库或镜像仓库 ↓ 没有 中央仓库只要本地仓库已经有依赖, Maven 通常会直接使用本地依赖, 不会每次都重新下载。9.3 settings.xml 常见配置settings.xml 通常用于配置: 1.本地仓库位置。 2.镜像仓库。 3.私服账号。 4.代理。本地仓库位置localRepositoryD:/maven/repository/localRepository镜像仓库mirrors mirror idaliyunmaven/id mirrorOfcentral/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors9.4 依赖下载失败处理常见原因: 1.网络异常。 2.远程仓库不可用。 3.依赖坐标或版本写错。 4.本地仓库存在下载失败缓存。常见报错: Could not find artifact ... failed to transfer ... Remote host terminated the handshake处理顺序: 1.确认网络正常。 2.确认依赖坐标和版本存在。 3.刷新 Maven。 4.删除对应依赖目录中的 .lastUpdated 文件。 5.重新执行 Maven 命令。不要随意清空整个本地仓库优先按依赖的groupId/artifactId/version定位目录只删除出问题依赖的缓存文件避免大量依赖重新下载。第十章.Maven 继承10.1 继承的介绍1.Maven 继承: 子工程继承父工程的配置。 2.作用: a.统一依赖版本 b.统一插件版本 c.统一编码和 JDK 版本 d.减少重复配置 3.父工程 packaging: 必须是 pom。10.2 父工程配置groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version packagingpom/packaging properties spring.version6.0.6/spring.version jackson.version2.15.0/jackson.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties10.3 子工程继承父工程parent groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version /parent artifactIduser-service/artifactId packagingjar/packaging如果子工程的 groupId 和 version 与父工程一致, 子工程可以省略自己的 groupId 和 version。10.4 dependencyManagement1.dependencyManagement: 只管理依赖版本,不会真正引入依赖。 2.子工程需要使用依赖时: 仍然要在 dependencies 中声明依赖。 3.好处: 子工程不用写 version,版本由父工程统一决定。父工程统一管理版本dependencyManagement dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version${jackson.version}/version /dependency /dependencies /dependencyManagement子工程引用依赖dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependency /dependencies10.5 父工程 dependencies 的影响1.父工程 dependencies: 会让子工程直接继承依赖。 2.父工程 dependencyManagement: 只统一版本,子工程按需引入。 3.推荐: 父工程优先使用 dependencyManagement 管理版本。第十一章.Maven 聚合11.1 聚合的介绍1.Maven 聚合: 用一个父项目统一管理多个子模块的构建。 2.作用: a.一个命令构建多个模块 b.自动计算模块构建顺序 c.统一管理相关工程 3.父工程 packaging: 通常是 pom。11.2 modules 配置project groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version packagingpom/packaging modules modulecommon-service/module moduleuser-service/module moduleorder-service/module /modules /project11.3 继承和聚合的区别概念解决问题关键标签继承子工程复用父工程配置子工程parent聚合父工程统一构建多个子模块父工程modules1.继承强调配置复用。 2.聚合强调统一构建。 3.实际多模块项目中,父工程通常同时承担继承和聚合两个角色。第十二章.多模块项目案例案例目标搭建一个micro-shop父工程下面包含common-service、user-service、order-service三个子模块。12.1 项目结构micro-shop ├── pom.xml ├── common-service │ └── pom.xml ├── user-service │ └── pom.xml └── order-service └── pom.xml12.2 父工程 micro-shop?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version packagingpom/packaging modules modulecommon-service/module moduleuser-service/module moduleorder-service/module /modules properties spring.version6.0.6/spring.version jackson.version2.15.0/jackson.version commons-io.version2.11.0/commons-io.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencyManagement dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version${jackson.version}/version /dependency dependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId version${commons-io.version}/version /dependency /dependencies /dependencyManagement /project12.3 common-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIdcommon-service/artifactId packagingjar/packaging dependencies dependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId /dependency /dependencies /project12.4 user-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIduser-service/artifactId packagingwar/packaging dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependency /dependencies /project12.5 order-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIdorder-service/artifactId packagingwar/packaging dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.example/groupId artifactIdcommon-service/artifactId version1.0.0/version /dependency /dependencies /project12.6 构建多模块项目mvn clean install在父工程 micro-shop 目录执行命令: 1.Maven 会读取 modules。 2.自动分析模块依赖关系。 3.按正确顺序构建 common-service、user-service、order-service。 4.构建结果安装到本地仓库。
11 Maven
发布时间:2026/7/15 3:08:24
Maven 项目构建与依赖管理第一章.Maven 基础1.1 Maven 的介绍1.Maven: 一款 Java 项目构建和依赖管理工具。 2.核心能力: a.依赖管理 b.项目构建 3.核心配置文件: pom.xml开发者编写 pom.xml ↓ Maven 读取配置 ↓ 下载依赖、编译代码、运行测试、打包项目1.2 Maven 解决的问题问题没有 Maven使用 Mavenjar 包管理手动下载、复制、容易缺依赖在pom.xml写坐标自动下载依赖传递需要人工找依赖的依赖自动处理传递依赖项目结构每个人目录习惯不同统一标准目录构建过程IDE 点按钮或手动操作使用统一命令团队协作jar 包和版本不一致统一依赖版本1.3 Maven 工作原理pom.xml ↓ Maven 根据坐标查找依赖 ↓ 先查本地仓库 ↓ 本地没有再查远程仓库或中央仓库 ↓ 下载依赖到本地仓库 ↓ 执行生命周期中的编译、测试、打包等任务1.pom.xml: 描述项目、依赖、插件和构建规则。 2.本地仓库: 保存下载过的依赖。 3.远程仓库: 团队或公司维护的依赖仓库。 4.中央仓库: Maven 官方默认公共仓库。第二章.Maven 坐标和项目结构2.1 GAVP 坐标1.GAV: Maven 项目的唯一身份标识。 2.GAVP: GroupId ArtifactId Version Packaging 3.GroupId、ArtifactId、Version 必填。 4.Packaging 可选,默认 jar。属性作用是否必填示例groupId组织、公司、业务线是com.exampleartifactId项目名或模块名是student-serviceversion项目版本是1.0.0packaging打包方式否jar、war、pom2.2 坐标命名建议1.groupId: 通常使用公司域名反写 业务线。 例如: com.alibaba.sourcing 2.artifactId: 通常使用产品线名-模块名。 例如: bookstore-api 3.version: 通常使用 主版本.次版本.修订号。 例如: 1.0.0版本变化含义示例主版本号不兼容的大改动1.0.0-2.0.0次版本号兼容的新功能1.0.0-1.1.0修订号Bug 修复或小优化1.0.0-1.0.12.3 Packaging 打包方式类型说明常见场景jar默认值打包成.jar普通 Java 工程、工具模块war打包成.warJava Web 工程pom不生成业务包父工程、聚合工程2.4 Maven 标准项目结构student-score-project ├── pom.xml └── src ├── main │ ├── java │ │ └── com/example │ │ ├── controller │ │ ├── service │ │ ├── dao │ │ └── model │ └── resources │ ├── jdbc.properties │ └── log4j.properties └── test ├── java │ └── com/example └── resources目录作用pom.xmlMaven 项目配置文件src/main/java正式 Java 源代码src/main/resources正式资源文件src/test/java测试 Java 源代码src/test/resources测试资源文件targetMaven 构建输出目录第三章.POM 文件3.1 最小 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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIdstudent-score-project/artifactId version1.0.0/version packagingjar/packaging /project3.2 常用 POM 标签标签作用modelVersionPOM 模型版本通常固定为4.0.0groupId项目组标识artifactId项目名或模块名version项目版本packaging打包方式properties统一配置变量dependencies声明项目依赖build配置构建行为3.3 properties 统一配置properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target junit.version5.10.2/junit.version mysql.version8.0.33/mysql.version /properties1.统一管理 JDK 版本。 2.统一管理编码。 3.统一管理第三方依赖版本。 4.后续修改版本时,只改一处。第四章.依赖管理4.1 依赖的介绍1.依赖: 当前项目需要使用的第三方 jar 包或其他 Maven 模块。 2.Maven 依赖管理: 在 pom.xml 中声明依赖坐标, Maven 自动下载并加入项目。 3.依赖声明位置: dependencies dependency.../dependency /dependencies4.2 添加依赖dependencies dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version${mysql.version}/version /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version${junit.version}/version scopetest/scope /dependency /dependencies4.3 依赖查询方式1.Maven 仓库网站: https://mvnrepository.com/ 2.IDEA Maven 搜索功能。 3.官方文档提供的依赖坐标。依赖版本要确认存在如果groupId、artifactId或version写错Maven 会提示找不到对应依赖。第五章.依赖范围 scope5.1 scope 的作用1.scope: 控制依赖在哪些阶段生效。 2.常见阶段: 编译 main 编译 test 测试运行 项目运行 打包5.2 常见 scopescopemain 编译test 编译测试运行运行打包常见依赖compile是是是是是普通工具包provided是是是否否Servlet APIruntime否是是是是JDBC 驱动test否是是否否JUnitdependency groupIdjakarta.servlet/groupId artifactIdjakarta.servlet-api/artifactId version6.0.0/version scopeprovided/scope /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.10.2/version scopetest/scope /dependency1.compile: 默认范围,不写 scope 就是 compile。 2.provided: 编译需要,运行由服务器提供。 3.runtime: 编译时不直接用,运行时需要。 4.test: 只在测试代码中使用。第六章.依赖传递和依赖冲突6.1 依赖传递1.依赖传递: A 依赖 B,B 依赖 C, 那么 A 可能也会间接依赖 C。 2.例子: 项目依赖 jackson-databind。 jackson-databind 会传递引入 jackson-core 和 jackson-annotations。dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.15.0/version /dependency当前项目 ↓ jackson-databind ├── jackson-core └── jackson-annotations6.2 依赖传递范围1.compile 范围通常可以传递。 2.test 范围通常不传递到主项目。 3.provided 范围通常不参与最终运行打包传递。6.3 依赖冲突1.依赖冲突: 项目中直接或间接出现同一个 jar 的不同版本。 2.Maven 会按规则自动选择一个版本。 3.冲突可能导致: a.编译报错 b.运行时找不到方法 c.版本行为不一致6.4 冲突解决规则规则说明最短路径优先谁离当前项目更近使用谁先声明优先路径一样长时谁先声明使用谁A - B - C - X:1.0 A - F - X:2.0 最终使用 X:2.0,因为路径更短。A - B - X:1.0 A - F - X:2.0 路径一样长时,谁先声明谁优先。6.5 手动排除依赖dependency groupIdcom.example/groupId artifactIddemo-service/artifactId version1.0.0/version exclusions exclusion groupIdcommons-logging/groupId artifactIdcommons-logging/artifactId /exclusion /exclusions /dependency排除依赖要谨慎排除传递依赖前要确认当前项目确实不需要它否则可能导致运行时缺类。第七章.Maven 生命周期和常用命令7.1 构建的介绍1.项目构建: 把源代码、配置文件、资源文件和依赖转换成可运行或可部署结果。 2.常见构建过程: 清理 编译 测试 打包 安装到本地仓库 部署到远程仓库7.2 常用命令命令作用mvn clean删除target目录mvn compile编译src/main/javamvn test编译并运行测试mvn package打包项目生成 jar 或 warmvn install打包并安装到本地仓库mvn deploy发布到远程仓库或私服mvn site生成项目站点报告mvn clean package执行 mvn clean package 时: 1.先删除 target。 2.编译正式代码。 3.编译测试代码。 4.运行测试。 5.生成 jar 或 war。命令执行位置Maven 命令通常要在pom.xml所在目录执行。7.3 生命周期的顺序性1.Maven 生命周期有顺序。 2.执行后面的阶段,会自动执行前面的阶段。 3.例如执行 package,会先执行 compile 和 test。validate - compile - test - package - verify - install - deploy7.4 跳过测试mvn package -DskipTests1.-DskipTests: 跳过测试执行,但仍可能编译测试代码。 2.-Dmaven.test.skiptrue: 跳过测试编译和测试执行。 3.一般优先使用 -DskipTests。第八章.build 和插件配置8.1 build 的作用1.build: 配置 Maven 构建行为。 2.常见用途: a.指定最终打包名称 b.配置资源文件打包规则 c.配置插件 d.配置 JDK 编译版本8.2 自定义打包名称build finalNamestudent-score/finalName /build默认打包名称: artifactId-version.打包方式 自定义后: finalName.打包方式8.3 resources 资源打包1.src/main/resources: 默认会打包到 classes 目录。 2.src/main/java: 默认只编译 .java 文件。 3.如果把 XML 放在 src/main/java 下: 默认可能不会被打包。build resources resource directorysrc/main/resources/directory includes include**/*.xml/include include**/*.properties/include /includes /resource /resources /build8.4 插件和依赖的区别类型配置位置作用依赖 dependencydependencies项目代码编译或运行需要的 jar插件 pluginbuildpluginsMaven 构建过程需要的工具8.5 配置编译插件build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source17/source target17/target encodingUTF-8/encoding /configuration /plugin /plugins /build8.6 配置 war 插件build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId version3.3.2/version /plugin /plugins /build常见场景: JDK 版本较高时,低版本 war 插件可能不兼容。 此时可以显式升级 maven-war-plugin 版本。第九章.Maven 仓库9.1 仓库类型仓库说明常见位置本地仓库本机缓存依赖和插件~/.m2/repository中央仓库Maven 官方公共仓库https://repo.maven.apache.org/maven2远程仓库公司私服或第三方仓库Nexus、阿里云镜像等9.2 查找依赖顺序本地仓库 ↓ 没有 远程仓库或镜像仓库 ↓ 没有 中央仓库只要本地仓库已经有依赖, Maven 通常会直接使用本地依赖, 不会每次都重新下载。9.3 settings.xml 常见配置settings.xml 通常用于配置: 1.本地仓库位置。 2.镜像仓库。 3.私服账号。 4.代理。本地仓库位置localRepositoryD:/maven/repository/localRepository镜像仓库mirrors mirror idaliyunmaven/id mirrorOfcentral/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors9.4 依赖下载失败处理常见原因: 1.网络异常。 2.远程仓库不可用。 3.依赖坐标或版本写错。 4.本地仓库存在下载失败缓存。常见报错: Could not find artifact ... failed to transfer ... Remote host terminated the handshake处理顺序: 1.确认网络正常。 2.确认依赖坐标和版本存在。 3.刷新 Maven。 4.删除对应依赖目录中的 .lastUpdated 文件。 5.重新执行 Maven 命令。不要随意清空整个本地仓库优先按依赖的groupId/artifactId/version定位目录只删除出问题依赖的缓存文件避免大量依赖重新下载。第十章.Maven 继承10.1 继承的介绍1.Maven 继承: 子工程继承父工程的配置。 2.作用: a.统一依赖版本 b.统一插件版本 c.统一编码和 JDK 版本 d.减少重复配置 3.父工程 packaging: 必须是 pom。10.2 父工程配置groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version packagingpom/packaging properties spring.version6.0.6/spring.version jackson.version2.15.0/jackson.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties10.3 子工程继承父工程parent groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version /parent artifactIduser-service/artifactId packagingjar/packaging如果子工程的 groupId 和 version 与父工程一致, 子工程可以省略自己的 groupId 和 version。10.4 dependencyManagement1.dependencyManagement: 只管理依赖版本,不会真正引入依赖。 2.子工程需要使用依赖时: 仍然要在 dependencies 中声明依赖。 3.好处: 子工程不用写 version,版本由父工程统一决定。父工程统一管理版本dependencyManagement dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version${jackson.version}/version /dependency /dependencies /dependencyManagement子工程引用依赖dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependency /dependencies10.5 父工程 dependencies 的影响1.父工程 dependencies: 会让子工程直接继承依赖。 2.父工程 dependencyManagement: 只统一版本,子工程按需引入。 3.推荐: 父工程优先使用 dependencyManagement 管理版本。第十一章.Maven 聚合11.1 聚合的介绍1.Maven 聚合: 用一个父项目统一管理多个子模块的构建。 2.作用: a.一个命令构建多个模块 b.自动计算模块构建顺序 c.统一管理相关工程 3.父工程 packaging: 通常是 pom。11.2 modules 配置project groupIdcom.example/groupId artifactIdshop-parent/artifactId version1.0.0/version packagingpom/packaging modules modulecommon-service/module moduleuser-service/module moduleorder-service/module /modules /project11.3 继承和聚合的区别概念解决问题关键标签继承子工程复用父工程配置子工程parent聚合父工程统一构建多个子模块父工程modules1.继承强调配置复用。 2.聚合强调统一构建。 3.实际多模块项目中,父工程通常同时承担继承和聚合两个角色。第十二章.多模块项目案例案例目标搭建一个micro-shop父工程下面包含common-service、user-service、order-service三个子模块。12.1 项目结构micro-shop ├── pom.xml ├── common-service │ └── pom.xml ├── user-service │ └── pom.xml └── order-service └── pom.xml12.2 父工程 micro-shop?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version packagingpom/packaging modules modulecommon-service/module moduleuser-service/module moduleorder-service/module /modules properties spring.version6.0.6/spring.version jackson.version2.15.0/jackson.version commons-io.version2.11.0/commons-io.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencyManagement dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version${jackson.version}/version /dependency dependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId version${commons-io.version}/version /dependency /dependencies /dependencyManagement /project12.3 common-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIdcommon-service/artifactId packagingjar/packaging dependencies dependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId /dependency /dependencies /project12.4 user-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIduser-service/artifactId packagingwar/packaging dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependency /dependencies /project12.5 order-service 模块?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 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.example/groupId artifactIdmicro-shop/artifactId version1.0.0/version /parent artifactIdorder-service/artifactId packagingwar/packaging dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId /dependency dependency groupIdcom.example/groupId artifactIdcommon-service/artifactId version1.0.0/version /dependency /dependencies /project12.6 构建多模块项目mvn clean install在父工程 micro-shop 目录执行命令: 1.Maven 会读取 modules。 2.自动分析模块依赖关系。 3.按正确顺序构建 common-service、user-service、order-service。 4.构建结果安装到本地仓库。