maven 父子项目

maven 父子项目


<dependencyManagement>标签在Maven项目中的作用是管理依赖项的版本。它允许您在父项目中集中定义依赖项的版本,然后在子项目中继承这些版本定义而无需重复声明。

通过在父项目的pom.xml文件maven 父子项目中使用<dependencyManagement>标签,您可以列出所有依赖项及其所需的版本。然后,在子项目的pom.xml文件中,您可以引用这些依赖项而无需指定版本号。这样,当您更新父项目中的依赖项版本时,所有子项目都会自动继承这些变化。

这种集中管理依赖项版本的方式有助于确保项目中使用的依赖项保持一致,并简化了项目配置。此外,它还可以避免不同子项目中使用不同版本的依赖项导致的冲突和问题。

<dependencyManagement>标签的作用是集中管理Maven项目中的依赖项版本,以确保项目的一致性和简化配置。


 在Maven父子项目中,父项目的<dependencies>标签用于管理整个项目组的依赖项。它允许在父项目中声明和管理所有子模块共享的依赖关系。也就是说在父项目的pom文件中配置的<dependencys>依赖项,会被所有子项目全部继承。

2、创建两个子项目child-demo1和child-demo2

两个子项目pom文件如下:


 


可以看到这两个子项目的pom文件的<parent>标签均填写的父项目的gav,在子项目pom文件中,不需要再填写<group>和<version>标签,因为子项目会自动继承父项目的这两个标签的值。

当前如果子项目想适用和父项目不同的g和v,则添加该两个标签和想要的值即可。

child-demo1子项目和child-demo2项目会自动继承父项目中<dependencis>标签中的所有依赖,所以在这两个子项目的pom文件中,即使没有显式的配置junit和spring-boot-starter-test这两个依赖项,

但是子项目也会直接从父项目中将这两个依赖项配置项继承过来。

可以看到child-demo1子项目的spring-boot-start-web和commons-lang3两个依赖项并没有配置<version>标签,因为在父项目中的<dependencyManagement>标签中已经声明了这两个依赖项的版本,子项目会直接将<dependencyManagement>标签中配置的版本信息,范围等继承过来,但在父项目中<dependencyManagement>标签配置的依赖紧紧起到版本管理的作用,子项目中如果不配置该依赖项,则不会继承父项目中<dependencyManagement>标签配置的数据。<dependencyManagement>标签仅起到版本管理的作用。

配置完成后,可以分别在child-demo1子项目和child-demo2子项目的pom文件所在路径直接mvn命令直接打包即可。

可以看到父子项目是起到减少子项目中pom文件的重复配置和版本管理方便的目的。

聚合项目和父子项目同时使用

可以看到上面的父子项目,在打包时,需要分别对两个子项目进行打包,这时,如果想一次打包两个或者多个子项目,就要用到上面讲的maven聚合功能就能用到了。

只需在父项目的pom文件中添加<modules>标签,然后将需要聚合的子项目填进来即可


 完整的父项目pom文件如下:


子项目不需要修改,即可实现在父项目的pom文件路径下执行maven命令,打包两个或多个子项目的给功能。

可以看出maven聚合功能是为了方便管理和打包多个项目,而maven的父子项目则是利用了和java继承思想类似的思想,让子项目继承父项目的maven配置,如版本,依赖项,版本控制等,这样子项目就可以复用父项目中的配置,起到减少配置冗余的目的。

可以看到直接在父项目的pom文件所在路径执行mvn clean package命令,两个子项目就都打包成功了。

maven 父子项目

总结

在我们实际开发中,一般都是将聚合和父子这两种关系混合使用,这里我拆分说,只是为了分别去理解它们各自的作用。

不论父子模块还是聚合模块,根模块的打包方式都必须是pom,下面的模块可以是jar或者war这两种打包方式。

聚合模块这种项目结构,仅仅是为了方便统一管理操作所有的模块。根模块和它内部<module> 标签内的模块是一个整体,项目目录层级上可以不要求一定上下级,但必须保持一定的层级联系。

父子模块这种项目结构,仅仅是为了方便子模块对依赖的管理,子模块通过<parent> 标签,引入父模块的配置去约束子模块的依赖版本。也可以抽出共同的依赖给到父模块,子模块去继承它,减少每个子模块冗余的配置。项目层级没有要求,你可以引入任意的依赖当作父模块,比如spring-boot-starter。

当然混合使用才能发挥它们最大的优势!

参考文章

 

 

 

今天的文章
maven 父子项目分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/135275.html

(0)
编程小号编程小号
上一篇 2024-09-04 19:30
下一篇 2024-09-04 20:06

相关推荐