Maven高级
Maven 多模块、继承、聚合与私服
大型项目可按职责拆成多个模块,父 POM 统一版本与插件,聚合 POM 按依赖关系构建全部模块,私服负责团队内部制品共享。
模块拆分
示例:
拆分依据应是稳定职责和依赖方向,不是“每几个类建一个模块”。避免所有模块互相依赖。
继承
子模块通过 parent 继承公共属性、依赖管理和插件管理:
代码块收起展开
<parent>
<groupId>com.example</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>父工程通常使用 pom 打包,可多层继承,但层级过深会让生效配置难以追踪。
属性与版本锁定
代码块收起展开
<properties>
<java.version>21</java.version>
<jjwt.version>0.12.6</jjwt.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jjwt.version}</version>
</dependency>
</dependencies>
</dependencyManagement>dependencyManagement 只声明版本规则,不会自动把依赖加入子模块;子模块仍要声明 groupId 与 artifactId。
普通 dependencies 会真正引入依赖,并可能传递给子模块或下游。
聚合
代码块收起展开
<packaging>pom</packaging>
<modules>
<module>tlias-pojo</module>
<module>tlias-utils</module>
<module>tlias-web-management</module>
</modules>聚合用于一次构建多个模块。Maven Reactor 会根据模块依赖计算顺序,不依赖 modules 的书写先后。
继承与聚合
| 对比 | 继承 | 聚合 |
|---|---|---|
| 配置位置 | 子 POM 指向父 POM | 聚合 POM 列出模块 |
| 目的 | 复用配置、统一版本 | 一次构建全部模块 |
| 是否必须同时使用 | 否 | 否 |
实践中父 POM 经常同时承担两种职责,但概念不能混淆。
私服
私服是团队内部远程仓库,用于:
- 缓存代理中央仓库。
- 发布内部 Release 与 Snapshot。
- 统一制品来源与权限。
依赖通常按“本地仓库 → 私服 → 私服代理的中央仓库”解析。
凭证
settings.xml:
代码块收起展开
<servers>
<server>
<id>maven-releases</id>
<username>${env.MAVEN_USER}</username>
<password>${env.MAVEN_PASSWORD}</password>
</server>
</servers>server id 必须与发布仓库 id 对应。真实凭证不写入项目 POM。
发布地址
代码块收起展开
<distributionManagement>
<repository>
<id>maven-releases</id>
<url>https://repo.example.com/repository/releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>https://repo.example.com/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>Release 版本应不可覆盖;Snapshot 可持续迭代但不应进入正式生产基线。
镜像
代码块收起展开
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>https://repo.example.com/repository/public/</url>
</mirror>镜像用于依赖下载,distributionManagement 用于发布,两者职责不同。
验证
代码块收起展开
mvn help:effective-pom
mvn dependency:tree
mvn clean verify
mvn deploy部署前确认仓库权限、版本类型、签名/校验策略和 CI 凭证注入。