1.dependencyManagement和dependencies的区别
dependencyManagement
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号
例如在父项目里:
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.2</version>
- </dependency>
- ...
- <dependencies>
- </dependencyManagement>
然后在子项目里就可以添加mysql-connector时可以不指定版本号,例如:
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- </dependencies>
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。
dependencies
相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
2.在eclipse中打开pom.xml文件会看到打开的窗口中有一个dependency hierarchy选项卡。这个选择卡页面左半部分显示了详细的jar包依赖树。右半部分则是maven将会下载的jar包
3.maven重复类的问题今天maven部署的时候发现了重复类的问题,在dependency hierarchy中搜的时候发现右侧确实有两个同样的jar。
或者使用mvn help:effective-pom命令,可以看到最终起效果的 pom ,会发现完全相同的两个jar
解决办法:<exclusions>
< exclusion>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
</exclusion>
</exclusions>
当然我们也可以在dependency hierarchy选项卡中右半部分直接选中那个低版本的xxx.jar。然后右键exclude maven...点击确定会自动生成上面的。