1. 分模块开发与设计
将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享;
言简意赅就是把功能模块放出去,然后通过在pom文件中导入坐标找到;
注意拆出来的功能模块需要通过Maven指令安装模块选择install,下载到Maven的本地仓库中,这样在别的模块中导入坐标才能找到对应的模块jar包
最后,每迁出一个模块,如果需要对其他模块的功能存在联系,在相应的模块的pom文件处补齐坐标即可;
2. 依赖管理
2.1 依赖传递
当一个项目依赖于另一个项目时,Maven会自动下载并安装被依赖项目的相关库文件。同时,Maven也会在传递依赖时自动解决依赖冲突的问题。
举个例子,之前做的ssm整合的案例拆分了几个模块,其中在ssm整合的项目中打入了dao模块的坐标,这时就不需要在打入pojo的坐标。因为dao模块中已经打入了pojo坐标。这就说明导入的若干个模块中,存在着依赖关系时,这时我们并不需要导入重复的坐标。
在pom.xml文件中,只需要声明对部分模块的依赖,Maven会自动将所有需要的依赖传递下去,并下载和安装所有必要的库。
Maven中的依赖传递和冲突解决机制可以确保被依赖模块已经包含了我们需要的依赖时,我们无需再次显式导入那个依赖。同时,如果出现依赖冲突,Maven也会自动解决依赖,而不用手动处理。
这里给出依赖冲突的原则:
并且可以在IDEA中查看依赖的层级图
可以看出dao中有pojo的依赖项,存在依赖传递,所以在ssm中可以删掉对pojo模块的依赖项;
2.2 可选依赖
不透明;
通过optional标签进行可选依赖操作,作用是隐藏当前工程所依赖的资源,隐藏后对应的资源将不具有依赖传递性(例如在dao中隐藏了pojo的依赖,在dao的依赖目录下有pojo的依赖,但是在ssm中不能获得pojo的依赖);
<dependency>
<groupId>org.example</groupId>
<artifactId>springmvc_08_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
2.3 排除依赖
不需要;
排除一些传递依赖中不需要的间接依赖且不需要写版本;
<dependency>
<groupId>org.example</groupId>
<artifactId>springmvc_08_dao</artifactId>
<version>1.0-SNAPSHOT</version>
影藏依赖,使其不具备传递依赖性-->
<optional>true</optional>-->
<exclusions>
<exclusion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</exclusion>
</exclusions>
</dependency>