JAVA

Maven工程 之 聚合工程

1.什么是聚合工程


maven中可以创建 父工程(pom工程),子工程(非pom工程)
在 Maven父工程中 可以创建 多个子工程,通过父工程 对各个子工程 做jar的统一管理 和 统一构建

2.为什么要创建聚合工程


1.方便jar包管理,在父工程中管理依赖包,对版本做统一控制
2.方便构建,在父工程中执行构建命令,子工程会自动构建

3.创建聚合工程


3.1 创建父工程

1.创建父工程,修改pom文件(packaging 类型 修改为pom)

2.查看pom.xml

    <!-- 打包方式必须指定为 pom方式,表示父工程 -->
    <packaging>pom</packaging>

    <!-- 表示 所管理的子工程-->
    <modules>
        <module>prozi01</module>
        <module>prozi02</module>
        <module>prozi03</module>
    </modules>

3.2 创建子工程

1.File -> New -> Module…

2.查看pom.xml

    <!-- 父工程坐标 -->
    <parent>
        <groupId>com.maven.java</groupId>
        <artifactId>profu</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>


    <!-- 子工程坐标(如果 groupId、version和父工程一致,子工程坐标可以省略)-->
    <!--    <groupId>com.maven.java</groupId>-->
    <artifactId>prozi01</artifactId>
    <!--    <version>1.0-SNAPSHOT</version>-->
    <!--    <packaging>jar</packaging>-->

4. 怎样实现 依赖统一管理


4.1 父子工程中 依赖的优先级

1.在父工程、子工程中配置 相同jar的不同版本

        <!-- fu工程 -->
        <dependency>
            <groupId>com.gc.maven</groupId>
            <artifactId>pro01</artifactId>
            <version>v1</version>
        </dependency>

        <!-- zi01工程-->
        <dependency>
            <groupId>com.gc.maven</groupId>
            <artifactId>pro01</artifactId>
            <version>v2</version>
        </dependency>

        <!-- zi02工程-->
        <dependency>
            <groupId>com.gc.maven</groupId>
            <artifactId>pro01</artifactId>
            <version>v3</version>
        </dependency>
子工程 优先使用 本工程配置的jar版本
如果子工程没有配置依赖,则使用父工程配置的jar版本

4.2 dependencyManagement 标签

    <!-- 父工程中指定jar的版本信息 -->
    <!-- 被管理的依赖并没有真正的被引入到工程-->
    <dependencyManagement>

        <dependencies>
            <!-- zi01工程-->
            <dependency>
                <groupId>com.gc.maven</groupId>
                <artifactId>pro01</artifactId>
                <version>v1</version>
            </dependency>
        </dependencies>

    </dependencyManagement>

    <!-- 子工程中 使用 dependencyManagement中的依赖-->
    <dependencies>

        <!-- 子工程中引用父工程的依赖信息时,可以把版本号去掉 -->
        <!-- 具体版本号由 父工程中指定-->
        <dependency>
            <groupId>com.gc.maven</groupId>
            <artifactId>pro01</artifactId>
        </dependency>

    </dependencies>

5. 怎样实现 统一构建的


 <!-- 通过 父工程pom文件中 配置的model,进行构建 -->
    <modules>
        <module>prozi03</module>
        <module>prozi02</module>
        <module>prozi01</module>
    </modules>

mvn dependency:list
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] profu                                                              [pom]
[INFO] prozi03                                                            [jar]
[INFO] prozi02                                                            [jar]
[INFO] prozi01                                                            [jar]