maven的继承和聚合

maven继承:管理依赖,实现依赖复用,统一版本号。
maven聚合:管理子模块,子模块不需要单独打包,统一打包。
maven继承+聚合:管理依赖,一次性打包。

maven工程(继承+聚合)的项目结构
maven的继承和聚合_第1张图片
从父工程的pom.xml角度来看:父工程知道自己聚合了哪些模块,不知道被谁继承。

    <groupId>com.wen</groupId>
    <artifactId>spring-study</artifactId>
    <!--父工程的<packaging>必须为pom-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!--父工程知道自己聚合了哪些模块,不知道被谁继承-->
    <modules>
        <module>spring-ioc</module>
        <module>spring-hello</module>
        <module>spring-di</module>
        <module>spring-autowire</module>
        <module>spring-anno</module>
        <module>spring-javaconfig</module>
        <module>spring-proxy</module>
        <module>spring-aop</module>
        <module>spring-mybatis</module>
        <module>spring-trans</module>
        <module>spring-mybatis-01</module>
        <module>spring-mybatis-02</module>
        <module>spring-mybatis-trans-xml</module>
        <module>spring-mybatis-trans-anno</module>
    </modules>
</project>

从子模块的pom.xml角度来看:知道自己的父工程是谁,不知道被谁聚合。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--知道自己的父工程是谁,不知道被谁聚合-->
    <parent>
        <artifactId>spring-study</artifactId>
        <groupId>com.wen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-hello</artifactId>


</project>

maven模块继承注意点:
<packaging>pom</packaging>

 <!--父工程的<packaging>必须为pom-->
    <packaging>pom</packaging>

<properties></properties>:统一版本号

 <!--统一设置spring相关依赖版本号-->
    <properties>
        <spring.version>5.3.18</spring.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
   </dependencies>

<dependencyManagement></dependencyManagement>:依赖被某些子模块单独继承
父pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wen</groupId>
    <artifactId>spring-study</artifactId>
    <!--父工程的<packaging>必须为pom-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!--父工程知道自己聚合了哪些模块,不知道被谁继承-->
    <modules>
        <module>spring-hello</module>
    </modules>
    
    <!--<dependencyManagement>的依赖不会被所有子模块直接继承,子模块继承该依赖得先声明,且可以省略版本号-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

子pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--知道自己的父工程是谁,不知道被谁聚合-->
    <parent>
        <artifactId>spring-study</artifactId>
        <groupId>com.wen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-hello</artifactId>

    <!--声明使用父pom.xml的<dependencyManagement>中的依赖,版本号不要写,父pom.xml已经写好-->
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    </dependencies>
</project>

你可能感兴趣的:(maven,maven)