【MAVEN】exclusions 不生效

1,173 阅读2分钟

1.现象

1.项目是父子模块项目,当子模块不想用某个依赖的时候,使用exclusions 不管在父模块还是子模块里进行排查,都无法进行排除,依赖依然存在

2.原因

1.这是因为父项目引用了另外一个父pom依赖,而这个pom里面用dependencyManagement了这个进行声明,所以这个依赖就被固定下来了,就无法排除掉,但是我们或许可以再子模块只要不引用到dependencyManagement的类,应该就不会在我们子模块里出现

2.在 Maven 项目中,明明没有在 pom.xml 文件中直接引用某个依赖,但是项目构建过程中仍然发现了这个依赖,这可能是由以下几种原因造成的:

  1. 间接依赖:Maven 会递归解析项目的所有直接依赖,并且检查它们的依赖树。如果项目中直接引用的某个模块或者库间接依赖了这个看似“未引用”的依赖,则 Maven 会按照依赖传递性原则将其引入。你可以通过 mvn dependency:tree 命令查看依赖树,以确定该依赖是从何处间接传递过来的。
  2. 父项目依赖:如果项目有一个父 POM,而这个父 POM 中声明了该依赖,则子项目在默认情况下会继承这个依赖,即使子项目自己没有声明。
  3. 聚合项目中的模块依赖:在聚合项目中,一个模块可能依赖了另一个模块,而这个模块又包含了未在当前模块中直接声明的依赖。
  4. BOM(Bill Of Materials)管理:某些项目或库可能会发布一个 BOM 文件,当你引入这个 BOM 时,它会统一管理一批相关库的版本,即使你在自己的项目中没有明确列出这些库,也会因为引入了 BOM 而隐式地引入了这些库。
  5. 插件依赖:Maven 插件在执行过程中可能会引入额外的依赖。检查项目中的插件配置,看是否有插件间接引入了该依赖。
  6. 历史构建的影响:有时候,虽然你在最新的 pom.xml 中移除了依赖,但由于本地 Maven 缓存(~/.m2/repository/)中存在旧的依赖副本,Maven 可能没有重新下载和解析新的依赖关系。这时,你应该清理本地缓存或者强制更新依赖 (mvn dependency:purge-local-repository 或 mvn clean install -U)。
  7. 团队协作问题:在多人协作的项目中,可能是其他团队成员在提交代码时加入了该依赖,但尚未同步到你的本地分支。

总之,通过查看详细的依赖树、检查父POM、确认本地缓存和团队协作状态,通常可以找出“未引用”依赖出现的原因。