Maven:如果它们已经是可传递的,如何删除依赖项?

Xiè*_*léi 7 dependencies maven-2 dependency-management

例如,如果存在依赖关系:

a -> b
a -> c
b -> c
Run Code Online (Sandbox Code Playgroud)

我想删除依赖项a -> c,因为有a -> b -> c.

我知道可能存在一些不应该减少的强依赖性,但它与这个问题无关.

例:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
    <dependency>c</dependency>
</dependencies>

In b.pom:
<dependencies>
    <dependency>c</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

预期结果:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

Zac*_*son 14

用于mvn dependency:analyze向您显示您的pom中是否存在您不需要的依赖项(它还可能识别您错过的一些项目,添加-DoutputXML=true以显示缺少的项目).

用于mvn dependency:tree向您显示项目当前使用的依赖项以及Maven查找它们的位置.添加-Dverbose=true以显示所有重复项和冲突.

如果a 直接依赖c(即如果a提到类中的代码c),那么pom应该反映它.如果a只直接依赖b,那么您可以安全地capom.xml文件中删除依赖项.上面的命令可以让您确定适当的下一个操作是什么.

编辑:好的,你更新了你的问题.这是你如何做到的:

  1. 在项目中a,运行mvn dependency:tree -Dverbose=true.这将显示Maven为您的项目考虑的所有依赖项的完整树.
  2. 查看步骤1的输出,并列出在多个级别深度显示的所有依赖项(其中一些可能是重复的).
  3. 在您喜欢的任何编辑器中编辑您的pom.xml文件,并删除与您在步骤2中创建的列表匹配的所有依赖项.

或者您正在寻找自动执行此操作的方法吗?除非你自己写一个,否则我认为没有任何自动化方式,因为你要做的是一个不好的想法.你告诉别人他们的反对意见与你的问题"无关",但事实是你的问题就像问"我如何使用Maven使用Maven更难?"

你没有理由想要这样做.如果您认为有充分的理由,那么您必须尝试这样做以产生一些结果.您应该寻求所需结果的帮助,因为您的计划很糟糕.


ith*_*uil 12

我假设您希望找到已经满足的虚假/不必要的依赖项,因为您可以从其他依赖项中免费获取它们.

我可以想象你可能想要这样做以清理你的poms.

但是,它通常不是您想要做的事情,因为明确说明您的依赖项是一个很好的做法.

你永远不知道在将来的模块b中是否会删除c依赖关系,从而中断a