《Maven实战》笔记 5.2 – 继承

继承是为了实现“在父项目里声明,在各个子项目里使用”,比如项目的版本、项目的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.

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.