分模块开发与设计
分模块开发意义
将原始模块按照功能拆分成若干个子模块,方便模块间相互调用,接口共享
步骤示例
这里以之前开发的SpringMVC_ssm中的domain模块为例
第一步、创建Maven模块
父项改为none,文件存储位置需要做出相应调整
第二步、书写代码模块
这里以Book为例
第三步、通过Maven指令安装到本地仓库(Install指令)
安装到本次仓库后就可以在需要引用该模块的模块中导入对应的坐标了
依赖管理
依赖指当前项目运行所需的jar包,一个项目可以设置多个依赖
依赖传递
依赖具有传递性
直接依赖:在当前项目中通过以来配置建立的依赖关系
间接依赖:被资源依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递冲突问题
路径优先:当依赖中出现相同的资源时,层积越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖与排除依赖
可选依赖
可选依赖指对外隐藏当前所依赖的资源--不透明
例如,我们在ssm中引用了maven_pojo的依赖,但我们不想向外界展示pojo,我们就可以通过在坐标内加入<optional>false</optional>标签将maven_pojo设置为可选依赖,对外界隐藏
<dependency>
<groupId>com.cacb</groupId>
<artifactId>maven_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<optional>false</optional>>
</dependency>
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本--不需要
例如,我们在另一个模块中导入了ssm的依赖坐标,但我们不需要pojo模块,就可以通过给ssm坐标增加<exclusions> <exclusion> </exclusion> </exclusions>标签来排除pojo依赖
<?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.cacb</groupId>
<artifactId>maven_others</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.cacb</groupId>
<artifactId>maven_ssm</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<exclusions>
<exclusion>
<groupId>com.cacb</groupId>
<artifactId>maven_pojo</artifactId>
</exclusion>
</exclusions>
</project>
继承与聚合
聚合
聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
聚合工程:通常是一个不具有业务功能的"空"的工程(有且仅有一个pom文件)
作用:使聚合工程可以将多个工程编组,,通过对聚合工程进行构建,实现对所有包含的模块进行同步构建
当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
聚合工程示例
第一步、创建Maven模块,设置打包类型为pom
<groupId>org.example</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
第二步、设置当前聚合工程所包含的子模块名称
<modules>
<module>../maven_ssm</module>
<module>../maven_pojo</module>
</modules>
继承
概念:继承描述的是两个工程间的关系,与java中类的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
作用:
简化配置
减少版本冲突
示例
继承通常与聚合工程共同实现,所以依然使用上例中使用的maven_parent为例
第一步、创建Maven模块,设置打包类型为pom
<groupId>org.example</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
第二步、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
如,在本例中就是在maven_parent.xml中导坐标
<dependencies>
<dependency>
<groupId>rog.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELREASE</version>
</dependency>
<!-- ... -->
</dependencies>
第三步、在父工程中配置子工程中可选的依赖关系
例如,配置maven_pojo为可选依赖关系,就应该在maven_parent中进行如下书写
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.cacb</groupId>
<artifactId>maven_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
第四步、在子工程中配置当前工程所以继承的父工程
<parent>
<groupId>org.example</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../maven_parent/pom.xml</relativePath>
</parent>
第五步、在子工程中配置使用父工程中可选依赖的坐标
例如,要在ssm中引用pojo依赖,就应该在ssmxml中进行如下书写
</dependencies>
<dependency>
<groupId>com.cacb</groupId>
<artifactId>maven_pojo</artifactId>
</dependency>
</dependencies>
注
子工程中使用父工程中的可选依赖时,仅需要提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突
子工程还可以定义父工程中没有定义的依赖关系
聚合与集成的区别
作用
聚合用于快速构建项目
继承用于快速配置
相同点
聚合与集成的pomxml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
聚合与继承均属于设计型模块,并无实际的模块内容
不同点
聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,夫模块无法感知那些子模块继承了自己