Maven 的 pom 文件中 dependencies 和 dependencyManagement 两者之间的区别
2018-01-26 13:40
363 查看
今天创建了一个多模块的工程,在父模块中已经添加了依赖,但是在子模块中的代码里还是依旧提示缺少依赖。
仔细一下,是把依赖写在了
这里我就感到很疑惑,
相对于
因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
Itoo-base-parent(pom.xml)
Itoo-base(pom.xml)
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。
同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
参考资料
1、Maven实战(六)— dependencies与dependencyManagement的区别
http://blog.csdn.net/liutengteng130/article/details/46991829
2、Maven实战(三)——多模块项目的POM重构
http://www.infoq.com/cn/news/2011/01/xxb-maven-3-pom-refactoring
3、[摘录] Maven中的DependencyManagement和Dependencies
http://liugang594.iteye.com/blog/1687781
4、differences between dependencymanagement and dependencies in maven
https://stackoverflow.com/questions/2619598/differences-between-dependencymanagement-and-dependencies-in-maven
仔细一下,是把依赖写在了
<dependencyManagement>节点下。
这里我就感到很疑惑,
<dependencies>和
<dependencyManagement>两者之间有什么区别呢?
<dependencies>
相对于
<dependencyManagement>,所有声明在
<dependencies>里的依赖都会自动引入,并默认被所有的子项目继承。
<dependencyManagement>
<dependencyManagement>里只是声明依赖,并不实现引入。
因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
Itoo-base-parent(pom.xml)
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>${org.eclipse.persistence.jpa.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> </dependencies> </dependencyManagement>
Itoo-base(pom.xml)
<!--继承父类--> <parent> <artifactId>itoo-base-parent</artifactId> <groupId>com.tgb</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../itoo-base-parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>itoo-base</artifactId> <packaging>ejb</packaging> <!--依赖关系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <scope>provided</scope> </dependency> </dependencies> </project>
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。
同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
参考资料
1、Maven实战(六)— dependencies与dependencyManagement的区别
http://blog.csdn.net/liutengteng130/article/details/46991829
2、Maven实战(三)——多模块项目的POM重构
http://www.infoq.com/cn/news/2011/01/xxb-maven-3-pom-refactoring
3、[摘录] Maven中的DependencyManagement和Dependencies
http://liugang594.iteye.com/blog/1687781
4、differences between dependencymanagement and dependencies in maven
https://stackoverflow.com/questions/2619598/differences-between-dependencymanagement-and-dependencies-in-maven
相关文章推荐
- maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别
- Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?
- IDEA中,Maven项目POM文件中的依赖未报错(出现红色波浪线),但Maven Projects中的模块的Dependencies中的依赖却报错
- Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?
- 【maven】IDEA:存在jar包,pom.xml文件没报错,但是Maven-Project-Dependencies有红线报错
- 为什么同样是pom文件里面的架包jar,显示的图标不一样。以及maven中snapshot快照库和release发布库的区别和作用
- 服务端技术进阶(六)Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?
- 服务端技术进阶(六)Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?
- Eclipse 创建maven项目pom文件报错解决方案
- Maven添加本地资源库(含pom文件)
- sencha touch 框架的几种核心脚本文件之间的区别
- Maven的配置文件pom.xml
- maven中pom文件配置解决资源文件的编码问题
- idea中maven下载jar在pom文件搜索配置小细节
- maven build时pom文件中添加的设置
- Maven的pom.xml配置文件详解
- Maven学习详解(13)——Maven常用命令大全与pom文件讲解
- ACCDB 和 MDB 文件格式之间的区别
- Maven的配置文件pom.xml
- Maven的pom.xml文件中build配置介绍