5

这对我来说听起来像是一个普遍的问题,所以我想知道是否有一种通用的推荐方法来处理这些情况,而不管使用的构建/依赖管理工具(在我的例子中是 Gradle)。我可以想象无论构建工具如何都会出现这个问题,即使在一个手动处理少量依赖项并且只是使用 Java 使用jar命令构建的小项目中也是如此。

我的 Java 项目使用 Velocity 1.7,因此它的类路径中有 Velocity 1. 7 JAR。

然而,这个项目也使用 ReportNG,它依赖于 Velocity 1. 4(它甚至Class-Path: velocity-dep-1.4.jar在它的清单中有条目,加上它下载的 zip 包含velocity-dep-1.4.jar和它的主页明确提到velocity-dep-1.4.jar必须在类路径中)。

我想知道如何避免在我的类路径中包含两个 Velocity 版本的 JAR,这可能是我看到的奇怪行为的原因,而且在任何情况下听起来都不是一个好主意。

我将尝试让 ReportNG 使用 Velocity 1.7 而不是 1.4,但它不一定有效,如果有处理这些情况的干净方法,我想避免这样做。

4

1 回答 1

2

虽然您可以将两个 JAR 添加到类路径中,但默认情况下,Java 将使用它找到的包含给定类的第一个 JAR,这取决于您构建类路径的方式可能会对您的系统产生不良影响。

为了避免这种情况,Gradle(就像之前的 Maven)在构建时解决依赖冲突。

使用 Gradle,默认依赖项解析使用最新的依赖项,在您的情况下意味着 Velocity 1.7。

使用 Maven依赖解决是通过使用与您的项目最接近的依赖来实现的,在您的情况下,当您的项目声明对 Velocity 1.7 的依赖时,这意味着它将使用该版本。

使用这两种方法,您的系统(或者更确切地说是 ReportNG)是否可以与 Velocity 1.7 一起使用取决于您进行测试。

于 2014-05-19T10:23:03.520 回答