maven 继承和聚合的区别
参考 https://cloud.tencent.com/developer/article/1397748
继承
- 目的:统一管理version版本,少写冗余代码。
- 使用:
- 父类pom不写业务,只写 pom的jar包版本等信息,
- 子类中使用
parent
标签,指定 父类的 坐标,从而继承 父类pom的某些值- 比如,父类的
groupId,artifactId, version;properties, dependency
的version 版本
等,
- 比如,父类的
- 父类中一般用 dependencyManagement 标签,字类需要引入的直接用 dependency标签,无需version
- 父类中的 dependency与dependencyManagement区别:父类的Dependency会强制引入子类,dependencyManagement只是声明,不会强制被子类继承过去,子类需要显示引入才行。
- 案例:源码地址
父工程的pom
子工程的pom<groupId>com.xuxueli</groupId> <artifactId>xxl-job</artifactId> <version>2.4.0-SNAPSHOT</version> <packaging>pom</packaging> <!--重要--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
<parent><groupId>com.xuxueli</groupId><artifactId>xxl-job</artifactId><version>2.4.0-SNAPSHOT</version> </parent> <artifactId>xxl-job-admin</artifactId> <packaging>jar</packaging>
聚合
-
目的:方便1次性构建多个代码模块,maven 1次执行,可同时编译打包多个模块
-
使用:
- 聚合工程的pom中,新增 标签
<modules>
,指定子模块的名字 - 打包时,直接在聚合工程的pom上右键,maven clean package 即可实现 1次性打包3个工程
- 聚合工程的pom中,新增 标签
-
案例:源码地址
聚合工程的pom<modules><module>xxl-job-core</module><module>xxl-job-admin</module><module>xxl-job-executor-samples</module> </modules>
总结
在实际项目中,大家会发现一个 pom 既是聚合 pom,又是父 pom,这么做主要是为了方便。