【Maven的使用入门】

📅 2026/7/10 13:50:24
【Maven的使用入门】
Maven的使用入门第一章 .pom文件的认识文章目录Maven的使用入门前言一、.pom文件是什么二、认识.pom文件中不同成员标签意义作用。1.依赖管理2.仓库信息3.构建总结前言例如Maven是Java项目的主流包管理工具能够熟练地使用非常有必要。一、.pom文件是什么.pom文件是每个模块甚至整个项目的依赖、仓库等的定义位置。二、认识.pom文件中不同成员标签意义作用。1.依赖管理dependencyManagement/dependencyManagement版本统一管理在父 POMProject Object Model中定义dependencyManagement部分可以列出项目及其所有子模块共同使用的依赖库以及对应的版本。这样做的好处在于当需要升级或更改某一依赖库的版本时只需要在一个地方父POM中修改版本号所有引用该依赖的子模块都会自动采用这个新版本而无需逐个去更改每个子模块的依赖声明。默认版本设置当子模块在其自身的dependencies部分声明依赖但未指定版本时Maven会查找父POM中dependencyManagement是否已对该依赖设置了版本。如果找到了对应依赖的版本声明则子模块将继承这个版本如果没有找到则子模块必须明确声明依赖的版本否则构建会失败。覆盖控制如果子模块确实需要使用不同于dependencyManagement中设定的版本可以在子模块的dependencies部分明确声明所需的版本这样子模块将会使用自己声明的版本而非继承自父POM的版本。2.仓库信息repositories/repositories声明项目依赖的下载来源repositories标签用于声明项目依赖的下载来源即告诉 Maven 应该从哪些仓库获取 jar 包和其他构件。如果 POM 文件中没有显式配置repositoriesMaven 默认只会从中央仓库Central Repository下载依赖。当你需要引用第三方发布的自定义仓库或者公司内部搭建了私有仓库如 Nexus、Jfrog Artifactory时就需要在 POM 中配置repositories标签。下面是它的几个关键配置点基本信息每个仓库使用repository子标签定义必须包含id唯一标识和url仓库地址。发行版与快照版开关通过releases和snapshots子标签控制是否允许下载发行版Releases或快照版Snapshots其中enabled设置为true或false即可。默认情况下两者都是启用的。多仓库优先级当配置了多个仓库时Maven 会按照声明的先后顺序依次尝试下载直到找到需要的构件。因此通常建议将访问速度快的内部仓库放在前面中央仓库作为最后的兜底选项。示例– 在下面的配置中阿里云镜像仓库作为首选下载地址并且显式禁用了快照版的下载因为阿里云镜像通常只镜像发行版中央仓库则作为备选。这种组合既能加快国内下载速度又能确保在阿里云镜像找不到依赖时回退到官方中央仓库。– 与依赖管理dependencyManagement不同repositories影响的是“从哪里下载”而不是“下载什么版本”。但两者经常配合使用先在dependencyManagement中统一定义版本再在repositories中为团队指定稳定、高效的仓库地址这样就能在整个多模块项目中实现依赖版本和下载来源的双重统一。repositoriesrepositoryidalibaba-maven/idurlhttps://maven.aliyun.com/repository/public/urlreleasesenabledtrue/enabled/releasessnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidcentral/idurlhttps://repo.maven.apache.org/maven2/url/repository/repositories3.构建build/build定义与构建过程相关的设置build标签是 POM 文件的核心部分之一它定义了项目的构建生命周期、插件配置、资源处理、目录结构等所有与构建过程相关的设置。通过build标签开发者可以高度定制化 Maven 的构建行为使其适应各种复杂的项目需求。统一管理插件 (pluginManagement)与dependencyManagement类似用于在父 POM 中统一声明插件及其版本子模块可以继承这些配置而无需重复声明版本确保构建工具链的一致性。配置使用的插件 (plugins)在这里声明项目构建过程中需要使用的 Maven 插件。每个插件可以配置其执行目标goals、执行阶段phase以及相关参数。配置资源处理方式 (resources)定义哪些非 Java 资源文件如配置文件、属性文件、XML 等需要被复制到输出目录如target/classes中并可以指定过滤和替换规则。配置测试资源处理方式 (testResources)类似于resources但专门用于测试阶段。修改目录 (directory,outputDirectory, 等)可以覆盖 Maven 默认的源代码目录、资源目录、输出目录等。示例build!-- 1. 插件管理统一插件版本 --pluginManagementpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.11.0/versionconfigurationsource11/sourcetarget11/targetencodingUTF-8/encoding/configuration/plugin/plugins/pluginManagement!-- 2. 实际使用的插件列表 --pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactId!-- 版本从 pluginManagement 继承 --/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion3.1.2/versionconfigurationskipTestsfalse/skipTestsincludesinclude**/*Test.java/include/includes/configuration/plugin/plugins!-- 3. 资源文件处理 --resourcesresourcedirectorysrc/main/resources/directoryfilteringtrue/filteringincludesinclude**/*.properties/includeinclude**/*.xml/include/includes/resource/resources!-- 4. 测试资源文件处理 --testResourcestestResourcedirectorysrc/test/resources/directoryfilteringfalse/filtering/testResource/testResources/build关键点解析插件管理 (pluginManagement): 示例中统一配置了maven-compiler-plugin的版本和 Java 版本参数。子模块引用此插件时无需再指定版本确保了编译环境一致。插件执行:maven-surefire-plugin用于运行单元测试配置中指定了要包含的测试文件模式。资源过滤 (filteringtrue)当设置为true时Maven 会对资源文件中的占位符如${project.version}进行替换这在打包时注入动态值非常有用。目录结构: 示例使用了默认目录。如果需要自定义可以通过sourceDirectory,testSourceDirectory等标签覆盖。build与之前标签的关系它与dependencyManagement和dependencies协同工作后者决定“用什么依赖”而build决定“如何用这些依赖进行构建”例如编译、测试、打包。它与repositories也有间接联系构建过程中插件本身也可能需要从仓库下载插件的仓库配置同样遵循repositories和pluginRepositories的规则。合理配置build能够显著提升项目的可维护性和构建效率尤其是在多模块项目或需要复杂构建流程如代码生成、Docker 镜像构建等的场景中。总结本文介绍了 Maven 中 POM 文件的基本概念以及多个核心成员及其子标签的作用