继承:创建一个parent工程将所需的依赖都配置在pom中

聚合:聚合多个模块运行

maven 解决单继承问题 maven的继承与聚合_maven 解决单继承问题

通常继承和聚合同时使用

何为继承?

继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定spring的版本等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。父工程创建完成执行maven-install将父工程发布到仓库方便子工程继承。

何为聚合?

项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终会打一个独立的war运行。(一个项目往往由多个模块构成的,在进行构建时,针对每个模块都进行构建命令是一件非常繁琐又容易出错的事情,所以Maven的聚合功能能够替我们完成进行一次构建命令完成全部模块的构建。)

父工程maven-parent创建完成执行maven-install将父工程发布到仓库方便子工程继承。Debug As,Maven install。

创建子模块maven-dao,File,New,Other,Maven Module。创建的过程中需要选择器父工程maven-parent。

在dao的pom.xml文件中可以看到其继承了父模块的信息

<parent>
        <groupId>cn.e3mall</groupId>
        <artifactId>e3-manager</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>e3-manager-dao</artifactId>

service模块的pom.xml文件中需要继承父模块,service依赖dao模块。

<parent>
    <groupId>cn.e3mall</groupId>
    <artifactId>e3-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>e3-manager-service</artifactId>

<dependencies>
    <!--依赖dao-->
    <dependency>
        <groupId>cn.itcast.maven</groupId>
        <artifactId>maven-dao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

创建web子模块maven-web,注意:打包方式应该选择war

模块聚合

修改父工程的pom.xml,添加

<!-- 由于父工程要聚合子工程,配置modules -->
    <modules>
        <!-- 在modules中配置相对路径,相对父工程 pom.xml的路径找到子工程的pom.xml-->
        <module>maven-dao</module>
        <module>maven-service</module>
        <module>maven-web</module>
    </modules>

注意:上边module中配置的路径,此路径是相对父工程的pom.xml文件找子工程的pom.xml文件的路径。

运行调试

方法1:在maven-web工程的pom.xml中配置tomcat插件运行

运行maven-web工程它会从本地仓库下载依赖的jar包,所以当maven-web依赖的jar包内容修改了必须及时发布到本地仓库,比如:maven-web依赖的maven-service修改了,需要及时将maven-service发布到本地仓库。

方法2:在父工程的pom.xml中配置tomcat插件运行,自动聚合并执行。

推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,父工程会自动聚合并使用最新代码执行。。

注意:如果子工程和父工程中都配置了tomcat插件,运行的端口和路径以子工程为准。