1.<packaging>pom</packaging>:父工程,不生成 jar,负责聚合子模块、统一版本管理。
2.<modules>:罗列所有子模块,执行 mvn 命令会批量构建全部子模块。
3.Maven 原生不允许 version 直接使用变量,必须搭配 flatten‑maven‑plugin。
4.<properties>:统一管理 JDK 版本、编码、插件版本、框架版本,一处修改全项目生效。
5.<parent></parent>子模块完整继承父 pom 全部内容:properties、dependencyManagement、pluginManagement、插件、配置全部拿过来。
硬限制:只能有 1 个父工程,不能同时继承 A、B 两个父 pom。
6.<dependencyManagement>只声明版本,不会实际引入依赖,子模块写 dependency 可以省略 version。
只锁定插件版本,不会执行插件;子模块声明 plugin 就继承版本,不用写 version。
对比:
dependencyManagement / pluginManagement:管控版本,不执行 / 不引入;
<dependencies> / <build><plugins>:真正引入依赖、真正执行插件。
7.scope=import,不是继承,是 "把别人 pom 里面的 dependencyManagement 复制粘贴到我当前 pom"
硬性规则:只能写在 的 dependencies 里面,外面写无效。可以写多个 import,一次性把 A、B、C 多个 pom 的dependencyManagement全部合并进来。
java
<dependencyManagement>
<!-- 导入本项目内部依赖管理pom -->
<dependency>
<groupId>com.myxrk</groupId>
<artifactId>mobile-center-dependencies</artifactId>
<version>${revision}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 导入公司公共组件依赖管理pom -->
<dependency>
<groupId>com.kuihai</groupId>
<artifactId>kuihai-dependencies</artifactId>
<version>2.3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
8.父模块,也可以实际导入依赖jar,比如:,但是这些jar都会传递到子模块中去。企业开发都禁止父模块导入jar,父模块只做聚合模块、
统一版本管理(dependencyManagement)、统一插件管理(pluginManagement)
java
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‑context</artifactId>
</dependency>
</dependencies>
-
<dependencies>相关标签子标签:
<groupId>、<artifactId>、<version>:坐标<scope>:依赖范围compile【默认】:编译、测试、运行都生效test:仅单元测试生效(junit),打包不会进去
provided:编译需要,运行环境容器已经提供,打包不打进 jar(servlet‑api)runtime:运行、测试需要,编译阶段不需要(mysql 驱动)<optional>true</optional>:可选依赖,不会向下传递,子模块想用需要自己重新引入。<exclusions>:排除传递依赖,解决 jar 包冲突!
java
<build></build>
控制 Maven 构建全过程:编译、资源复制、插件执行、输出目录、打包。
如果完全不写 ,Maven 会使用一套内置默认配置,大部分简单 SpringBoot 项目,不写 build 也能跑。
✅ 一旦你要修改构建默认行为,就要写 build 标签。
当需要配置插件、自定义资源过滤、修改源码输出目录时,必须声明 build 标签。内部区分pluginManagement(管理插件版本)和plugins(实际执行插件)。