java学习之(Maven pom.xml 详细讲解)
一、什么是 pom.xmlPOM Project Object Model项目对象模型Maven 项目的核心配置文件 描述项目的各种信息依赖、构建配置、插件等 类似于前端项目的 package.json二、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.xsd!-- 1. 项目基本信息 --modelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIddemo_06/artifactIdversion1.0-SNAPSHOT/version!-- 2. 父项目 --parent.../parent!-- 3. 项目属性 --properties.../properties!-- 4. 依赖管理 --dependencies.../dependencies!-- 5. 构建配置 --build.../build!-- 6. 仓库配置 --repositories.../repositories/project三、核心元素详解3.1 项目坐标GAVMaven 用坐标唯一标识一个项目groupIdorg.example/groupId!-- 组织/公司域名倒序 --artifactIddemo_06/artifactId!-- 项目名称 --version1.0-SNAPSHOT/version!-- 版本号 --版本号说明SNAPSHOT开发版本不稳定 RELEASE正式版本 数字版本如 1.0.0、2.1.3完整坐标示例org.springframework.boot:spring-boot-starter-web:3.2.3 └─────groupId──────┘└────artifactId────┘└─version─┘3.2 父项目parent继承另一个项目的配置避免重复配置parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/versionrelativePath/!-- 从中央仓库查找而不是本地 --/parent作用继承依赖版本管理不用写版本号 继承插件配置 继承 Java 版本设置为什么需要 parent!-- 有 parent不需要指定版本 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId!-- 版本由 parent 管理 --/dependency!-- 无 parent必须指定版本 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion3.2.3/version!-- 必须写 --/dependency3.3 属性配置properties定义可复用的变量properties!-- Java 编译版本 --maven.compiler.source21/maven.compiler.sourcemaven.compiler.target21/maven.compiler.target!-- 项目编码 --project.build.sourceEncodingUTF-8/project.build.sourceEncoding!-- 自定义属性 --spring.version3.2.3/spring.versionmybatis.version3.5.6/mybatis.version/properties使用属性dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion${spring.version}/version!-- 引用属性 --/dependency3.4 依赖管理dependencies这是最重要的部分声明项目需要哪些外部库dependencies!-- 每个 dependency 代表一个依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId!-- 版本由 parent 管理可选 --/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/versionscoperuntime/scope!-- 作用范围 --/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.30/versionscopeprovided/scope!-- 编译时需要运行时由容器提供 --/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope!-- 只在测试时使用 --/dependency/dependencies依赖范围scope详解依赖范围对照表scope编译测试运行说明compile✅✅✅默认范围所有阶段都需要provided✅✅❌运行时由容器提供如 servlet-apiruntime❌✅✅运行时需要编译不需要test❌✅❌仅测试时需要如 JUnitsystem✅✅❌从本地系统路径加载不推荐3.5 构建配置build配置编译、打包等构建过程build!-- 最终打包的文件名 --finalNamemyapp/finalName!-- 插件配置 --pluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationmainClassorg.example.Main/mainClass!-- 指定启动类 --/configuration/plugin!-- 编译插件 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.11.0/versionconfigurationsource21/sourcetarget21/target/configuration/plugin/plugins/build3.6 仓库配置repositories配置依赖下载源repositoriesrepositoryidaliyun/idnameAliyun Maven Repository/nameurlhttps://maven.aliyun.com/repository/public/urlreleasesenabledtrue/enabled/releasessnapshotsenabledfalse/enabled!-- 不下载快照版本 --/snapshots/repository/repositories四、Spring Boot Starter 说明Spring Boot 提供了一系列 “starter” 依赖自动引入相关依赖以下是整理后的表格格式Starter作用spring-boot-starter-webWeb 开发包含 Spring MVC、Tomcatspring-boot-starter-data-jpa数据库操作JPAspring-boot-starter-test测试框架spring-boot-starter-security安全框架spring-boot-starter-redisRedis 缓存spring-boot-starter-thymeleaf模板引擎一个 starter 会引入多个依赖!-- spring-boot-starter-web 实际引入 --- spring-boot-starter - spring-web - spring-webmvc - tomcat-embed-core - jackson-databind - ...五、常用 Maven 命令# 清理编译文件mvn clean# 编译项目mvn compile# 运行测试mvntest# 打包生成 jar/warmvn package# 安装到本地仓库mvninstall# 强制更新依赖mvn cleaninstall-U# 查看依赖树mvn dependency:tree六、最佳实践6.1 始终使用 parent 管理版本parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/version/parent6.2 统一管理版本号propertiesjava.version17/java.versionmybatis.version3.5.6/mybatis.version/propertiesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion${mybatis.version}/version/dependency6.3 合理使用 scope!-- 数据库驱动运行时需要 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependency!-- Lombok编译时需要 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopeprovided/scope/dependency6.4 排除传递依赖xmldependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactId/exclusion/exclusions/dependency七、完整示例?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/modelVersion!-- 项目坐标 --groupIdcom.example/groupIdartifactIdmyproject/artifactIdversion1.0.0/versionpackagingjar/packagingnameMy Spring Boot Project/namedescriptionDemo project for Spring Boot/description!-- 父项目 --parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/version/parent!-- 属性配置 --propertiesjava.version17/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties!-- 依赖管理 --dependencies!-- Web 开发 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 数据库 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/versionscoperuntime/scope/dependency!-- Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- 测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies!-- 构建配置 --buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project总结pom.xml 的核心作用定义项目身份groupId、artifactId、version 管理依赖告诉 Maven 需要哪些第三方库 配置构建编译、测试、打包等过程的配置 继承公共配置通过 parent 避免重复配置