继承是为了实现“在父项目里声明,在各个子项目里使用”,比如项目的版本、项目的groupId、依赖等。
下面是项目module-base的pom.xml的片段
<!--module-base将继承module-root--> <parent> <groupId>mvn-module</groupId> <artifactId>module-root</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <!--这里不必再显式声明groupId和version。项目会自动从父项目中继承--> <artifactId>module-base</artifactId>
========================================
Super Pom
java中每个类都是java.lang.Object的子类,maven中每个项目的pom都是Super Pom的子pom. Super Pom是Maven内置的顶级Pom,Maven项目的默认目录结构就是在这里定义的。
=========================================
对“依赖”的继承是最主要的用处之一。最佳实践是:
1. 父项目的pom.xml通过<dependencyManagement>声明所有会用到的dependency
2. 子项目的pom.xml通过<dependencies>声明所需的依赖。声明中不需要指明所依赖的构件的版本。
说明:
1.为什么要在父项目的pom中集中声明所有依赖? 因为这样可以保证,对同一个构件,所有子项目都会使用相同的版本。
2.为什么父项目中要用<dependencyManagement>而不直接用<dependencyies> ? 因为如果用后者,其中定义的dependency会被所有子项目继承,子项目在打包时会把这些构件打在自己的包中,即使这个子项目并不需要某些dependency.