Maven项目代码组织形式
写在2022年的最后一天,谨以此纪念过去的2022年。
1.代码组织形式
一般来说有两种比较常见的形式:
- 平铺
- 父子结构
1.1平铺
这种结构下,parent父工程和各个子工程是平级的,处于同一个目录下,在指定model时,由于md-dao和md-service和parent的pom.xml不在同一个目录下,所以使用了相对路径,相对路径的参考依据时parenr的pom.xml文件位置。
子工程需要使用relativePath 节点去指定 parent 的 pom.xml 文件位置
1.2父子结构
这种结构看起来层次分明,父子关系一眼就能看出来,子工程位于parent目录里面和pom.xml文件同级,所以model也不需要相对路径了
子工程也不需要relativePath 节点去指定 parent 的 pom.xml 文件位置了,因为 parent 的 pom.xml 和各个子模块处于同一目录下
2.依赖管理
子工程继承了父工程的pom文件之后,父工程添加了依赖,子工程都会无条件的继承
无条件继承父亲的依赖,会使子工程变得臃肿,继承一些它不需要的依赖,此时我们可以使用dependencyManagement标签进行依赖的管理,在需要该依赖的子工程再去添加即可。
3.打包问题
3.1继承
有的时候,单纯只是想通过 parent 来统一管理不同的项目的依赖,并非一个聚合项目。
这个时候只需要去掉 parent 的 pom.xml 中的 modules 节点及其中的内容即可,这样就不是聚合工程了,各个子模块也可以独立打包。
3.2聚合
大部分情况下我们都是聚合工程,此时打包可以直接从parent工程统一打包。
最后祝大家新年快乐,越来越好!