例如,如果存在依赖关系:
a -> b
a -> c
b -> c
我想删除依赖项a -> c
,因为有a -> b -> c
。
我知道可能存在一些不应该减少的强依赖性,但它与这个问题无关。
示例:
In a.pom:
<dependencies>
<dependency>b</dependency>
<dependency>c</dependency>
</dependencies>
In b.pom:
<dependencies>
<dependency>c</dependency>
</dependencies>
预期结果:
In a.pom:
<dependencies>
<dependency>b</dependency>
</dependencies>
答案 0 :(得分:14)
使用mvn dependency:analyze
向您显示您的pom中是否存在您不需要的依赖项(它可能还会识别您错过的一些项,添加-DoutputXML=true
以显示缺少的项目。)< / p>
使用mvn dependency:tree
向您展示项目当前正在使用的依赖项以及Maven在哪里找到它们。添加-Dverbose=true
以显示所有重复项和冲突。
如果a
直接取决于c
(即a
中的代码提及c
中的类),那么pom应该反映出来它。如果a
仅直接依赖于b
,那么您可以安全地从c
的pom.xml文件中删除a
依赖项。上面的命令可以让您确定适当的下一步操作。
修改:好的,您更新了问题。这是你如何做到的:
a
中mvn dependency:tree -Dverbose=true
。这将显示Maven为您的项目考虑的所有依赖项的完整树。或者您正在寻找自动执行此操作的方法吗?除非你自己写一个,否则我认为没有任何自动化方式,因为你要做的是 BAD IDEA 。你告诉别人他们的反对意见与你的问题“无关”,但事实是你的问题就像问“我如何使用Maven使使用Maven更难?”
没有充分理由要你这样做。如果您认为有充分的理由,那么您必须尝试这样做以产生一些结果。你应该寻求所需结果的帮助,因为你的计划很糟糕。
答案 1 :(得分:12)
我认为您希望找到已经满足的虚假/不必要的依赖项,因为您可以从其他依赖项中免费获取它们。
我可以想象你可能想要这样做以清理你的poms。
但是,这通常不是您想要做的事情,因为明确说明您的依赖关系是一种很好的做法。
您永远不知道将来模块b
是否将c
删除为依赖关系,从而打破a
答案 2 :(得分:2)
像其他海报一样,我不确定你想要达到什么目的。可能是你需要的排除吗?您可以使用排除项来删除依赖项的依赖项 - 如果由于某些原因不需要它们。
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>logkit</groupId>
<artifactId>logkit</artifactId>
</exclusion>
<exclusion>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>