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包也都引入了。