这篇文章主要介绍了maven多模块项目依赖管理与依赖继承详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
maven多模块项目依赖管理与依赖继承
1、指定父模块与默认继承
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
父模块的pom
4.0.0 com.zhangguo.maven03 Maven03 pom 1.0-SNAPSHOT Maven03-Dao Maven03-Service 4.12 RELEASE junit junit ${junit.version} test
子模块的pom
Maven03 com.zhangguo.maven03 1.0-SNAPSHOT 4.0.0 Maven03-Dao org.springframework spring-aspects ${spring.version}
RELEASE表示最新的发布版本,结果如下:
2、依赖管理
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
当我把父项目中的依赖放到依赖管理中的效果如下所示:
4.0.0 com.zhangguo.maven03 Maven03 pom 1.0-SNAPSHOT Maven03-Dao Maven03-Service 4.12 RELEASE junit junit ${junit.version} test
结果
这里的父模块与子模块都并没有依赖junit了,这时的依赖只是用于管理,并没有真正依赖。
使用
在子类中,依赖配置较原来就简单了。可以在子类中只配置groupId和artifactId ,省去了version。因为完整的依赖声明已经包含在父POM中。 这样可以统一项目范围中依赖的版本,帮助降低依赖冲突的几率。如果子模块不声明依赖的使用,即使该依赖已经在父POM的dependencyManangement中声明了,也不会产生任何实际的效果。
如果想要在某个模块中使用和另一个模块中完全一样的dependencyManagement配置,除了赋值和继承外,还可以使用import范围依赖将这一配置导入。
我们要达到的目的是:父模块作版本管理不实际依赖,子模块按需依赖。
父模块pom
4.0.0 com.zhangguo.maven03 Maven03 pom 1.0-SNAPSHOT Maven03-Dao Maven03-Service 4.12 RELEASE junit junit ${junit.version} test
子模块pom:
Maven03 com.zhangguo.maven03 1.0-SNAPSHOT 4.0.0 Maven03-Service junit junit
结果:
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。
同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
关于maven项目依赖继承问题
在Maven中,子项目是可以继承父项目的依赖的。
需要在父项目中加入
childA childB
把父项目已POM的形式
打包到maven库中 (*部分必须要有)
4.0.0 com.sang.main *Parent-Moduel *1.0.2 *pom Simple-main
在子项目中以标签
继承父项目即可。
com.sang.main Parent-Moduel 1.0.2
如果是父项目中的直接依赖,在子项目中什么都不用写,就会自动继承;
如果是父项目中
以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。
以上就是maven多模块项目依赖管理与依赖继承详解的详细内容,更多请关注0133技术站其它相关文章!