maven排除 - 如果依赖模块删除排除的依赖模块

时间:2018-02-21 15:53:56

标签: maven

考虑

Project-B 
     Project-C
          Project-D
     Project-E

如果项目A依赖于项目B

A的有效依赖树是:B,C,D&即

现在我想从Project-A

中排除Project-B的Project-D
Project-A
     Project-B 
        <exclusions> <exclusion> Project-D <exclusion/> <exclusions/>

A的有效依赖树是:B,C&amp; ë

现在的问题是:如果Project-B决定它将从其依赖项中删除Project-D,如下所示

Project-B 
     Project-C
     Project-E

在我的Project-A POM中提到Project-D对Project-B的排除(在第一个地方,Project-B没有Project-D作为依赖项)会对我的构建造成任何问题吗?

我可以创建一个具有上述结构的虚拟项目,并分析,但我正在寻求的是,专业建议发现任何更好的选择来处理这种情况(如果有任何存在的话)

我还从Apache Maven中读到了这个引用Maven – Optional Dependencies and Dependency Exclusions(只是为了确保我没有复制任何问题)但是在该引用中确实没有找到任何这样的用例。

1 个答案:

答案 0 :(得分:2)

在您的场景中,第一件事是您尝试删除Project-A中Project-D的依赖项,这将无法以这种方式工作,因为您无法以这种方式排除传递依赖项导致Project-D是Project-C的依赖项。

因此,您需要做的第一件事就是让Project-C直接依赖于Project-A,如下所示:

Project-A
     Project-C
        <exclusions> <exclusion> Project-D <exclusion/> <exclusions/>

此外,您已经描述了Project-B决定删除Project-D依赖关系的场景。这意味着如果你依赖于传递依赖(来自Project-D的东西),那么你将会遇到构建错误。

这就是为什么你应该总是直接依赖于你正在使用的那些东西...换句话说,使用一类Project-D意味着在你的项目中直接依赖-A到Project -D。