HY,
我必须为maven项目添加一个新的依赖项。这个依赖有四个传递依赖(根据http://mvnrepository.com/),它们之间有spring-data-jpa jar。
我正在使用的maven项目在pom中配置了很多依赖项,所以我知道项目中已经有一个spring-data-jpa依赖项很可能(传递或不传递)。
当您在具有许多依赖项的大型项目中工作并且必须添加新项目时,如何检查是否已存在相同的不同版本的传递依赖项?我必须手动检查配置的每个直接依赖项的传递依赖项?对于这种情况,maven有警告吗?
maven在这种情况下如何运作?我的意思是,可能有两个不同版本的spring-data-jpa jar(这可能是个问题)或maven以其他方式解决这个问题?
由于
答案 0 :(得分:2)
你试过Maven Dependency Plugin吗?您可以运行一些有用的目标,例如mvn dependency:tree
等。
答案 1 :(得分:2)
简单的答案是依赖插件可以告诉你。更长的答案是,关于传递依赖关系管理需要考虑许多不同的情况,以及插件如何帮助以及如何处理它们各有所不同。
如果两个依赖项具有不同版本的相同坐标(groupId,artifactId),Maven会自动选择要包含的依赖项。从广义上讲,它选择了树中最高的版本 - 有效地覆盖了下游传递依赖poms中定义的依赖关系。因此,如果您有两个完全相同的依赖项的不同版本,那么您仍然只能在相关的类路径中找到一个版本的依赖项。
依赖插件可以通过突出显示其做出决定的点来帮助您识别这种情况,但是您可能希望使用顶级pom的 dependencyManagement 部分来确保您的依赖关系引入你期望的那些。
当依赖项更改其groupId或artifactId时,可能会出现单独的困难。然后,您可以在类路径上获得两个依赖项 - 一个在旧坐标上使用旧版本,在新坐标上使用新版本。作为示例,Spring,Hibernate和Apache公司都发现自己在某些时候这样做。在这种情况下,您所能做的就是使用依赖插件来识别重复的依赖项,然后使用排除标记将它们显式地排除为依赖项的传递依赖项。
值得注意的是,所有这些依赖关系管理都可能导致意外破坏。如果您的应用程序所依赖的东西确实依赖于某个特定版本的软件包作为传递依赖项,那么您可以通过覆盖该版本来打破它。因此,测试您使用的功能至关重要。