是否应该在儿童pom或父母pom处理排除?

时间:2018-06-10 19:44:42

标签: maven

我常常在这种情况下,我正在开展几个项目,这些项目都依赖于同一个父pom。我们处理父pom的dependencyManagement部分中的所有依赖项版本和排除项。子poms将指定他们需要的依赖项,但他们将使用父级的版本。

当我们对jar进行排除时,通常是因为我们想要从其他地方获取该jar的不同版本(通常是我们依赖的不同jar)。

然而,我遇到了一个问题。假设您在父级中有两个罐子A和B依赖于不同版本的jar C.工作在子项目上的人可能需要罐子A和B,然后可能会进入父件,不包括罐子C中的罐子C。对他们来说可能会很好。但是,正在处理不同子项目的其他人可能只依赖于jar B,现在他们的项目在运行时因为丢失jar C而获取最新的父代码后可能会获得NoClassDefFoundError。现在,也许是第3个人后来在一个不同的儿童项目工作决定他们需要罐子B(而不是罐子A),所以他们添加罐子B.如果他们不注意,他们可能没有意识到他们没有罐子C jar B需要它。在运行时它们可能会得到NoClassDefFoundError。

正如您所看到的,任何需要jar A和jar B的子项目都很好,但任何只需要jar B的子项目都需要记住将jar C添加到他们的pom中。

最好只在儿童pom中进行排除吗?或者我应该继续尝试在父pom中排除,并确保仔细查看排除项并根据需要向子pom添加其他依赖项?谢谢!

1 个答案:

答案 0 :(得分:0)

仅在父版本中使用dependencyManagement用于版本,而不是用于排除(而不是用于范围)。正如您自己指出的那样,在父级中添加排除项可能会导致其他开发人员(甚至可能在以后的某个时间点)对他们为什么没有获得必要和预期的传递依赖性感到困惑。

关于:

  

当我们对罐子进行排除时,通常是因为我们是   想要从其他地方获得该罐子的不同版本   (通常是我们所依赖的不同罐子)。

您可以在父pom中为这些传递依赖项强制执行正确的版本,以避免排除因为您在此处提供的原因。缺点当然是您必须记住在更新依赖库的版本时更新这些版本。这就是我们用> 200 poms管理项目的方式,我必须说它比找出添加排除的位置要好得多,希望能够获得所有依赖项的正确版本。