Maven聚合模式

项目的打包类型:pom、jar、war

项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。项目模块化可以将通用的部分抽离出来,方便重用;修改一部分代码不再是build整个项目,缩短了build时间;此外各模块都有自己的pom文件,结构更清晰。

使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packing打包类型,所有的父级项目的packing都为pom,packing默认是jar类型,如果不作配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。

而对于各个子项目,需要在其对应的pom文件开头申明对父级项目的引用,通过GAV实现。对于子项目自己的GAV配置,GV如果不配置,则会从父级项目的配置继承过来。子模块可通过dependencies标签来添加自己的依赖,此外子类项目的packing值只能是war或者jar,前面已经说过,packing默认是jar类型。如果是需要部署的项目,则需要打包成war类型,如果只是内部调用或者是作服务使用,则推荐打包成jar类型。

--》

所以回顾我们现在的 xx项目 ,结合当中的pom.xml来看的话,

       <groupId>com.pccw</groupId>

       <artifactId>qdf-rest-master</artifactId>

       <version>0.0.1-SNAPSHOT</version>

       <packaging>pom</packaging>

父pom这样指定是必须的 ,packing必须为pom ;

<dependencyManagement>

              <dependencies>

                     <dependency>

                            <groupId>com.pccw</groupId>

                            <artifactId>qdf-rest-data</artifactId>

                            <version>${project.version}</version>

                     </dependency>

 

                     <!-- <dependency>

                            <groupId>com.pccw</groupId>

                            <artifactId>qdf-rest-example</artifactId>

                            <version>${project.version}</version>

                     </dependency> -->

 

                     <dependency>

                            <groupId>com.pccw</groupId>

                            <artifactId>qdf-rest-queue</artifactId>

                            <version>${project.version}</version>

                     </dependency>

 

                     <dependency>

                            <groupId>com.pccw</groupId>

                            <artifactId>qdfmvc</artifactId>

                            <version>${project.version}</version>

                     </dependency>

 

                     <dependency>

                            <groupId>com.pccw</groupId>

                            <artifactId>qdf-rest-util</artifactId>

                            <version>${project.version}</version>

                     </dependency>

而且下方必须制定聚合 :

       <modules>

              <module>qdf-rest-data</module>

              <!--<module>qdf-rest-example</module>-->

              <module>qdf-rest-util</module>

              <module>qdf-rest-schedule</module>

              <module>qdf-rest-queue</module>

              <module>qdfmvc</module>

        <module>qdf-rest-report</module>

              <module>qdf-rest-image</module>

              <module>qdf-rest-job</module>

       </modules>

再通过这种形式把 子工程都依赖进来,然后看子工程怎样的导包形式,默认的是最上面说的子工程jar包形式依赖;然后子工程把父工程这个依赖进去 :

       <parent>

              <groupId>com.pccw</groupId>

              <artifactId>qdf-rest-master</artifactId>

              <version>0.0.1-SNAPSHOT</version>

       </parent>

   --》 这样确保 子工程可以引用父工程的依赖

然后子工程还可以           <dependency>

                     <groupId>com.pccw</groupId>

                     <artifactId>qdf-rest-util</artifactId>

              </dependency>

导入其他子工程 的jar包 ;

 

 

参照2里面说的 :

子工程通过再次定义可以使用 父工程的 ,并且不写version来达到跟父工程保持保本一致

子工程引入子工程也是通过依赖的方式进行,并且把子工程依赖的jar包也都引入了。

posted @ 2018-06-25 10:28  白云是世界的公民  阅读(239)  评论(0编辑  收藏  举报