java - 依赖项依赖于项目中已使用的库的旧版本

标签 java jar velocity dependency-management reportng

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

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

但是这个项目也使用 ReportNG,它依赖于 Velocity 1.4(它甚至有条目 Class-Path: velocity-dep-1.4。 jar 在其 list 中,加上其下载的 zip 包含 velocity-dep-1.4.jar 并且其 home page 明确提到 velocity-dep-1.4.jar必须在类路径中)。

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

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

最佳答案

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

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

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

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

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

关于java - 依赖项依赖于项目中已使用的库的旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734818/

相关文章:

java - 如何在 Velocity 上配置 UTF-8?

java - 如何在 Velocity 2.0 中转义双引号?

java - Java 是否有类似于 JavaScript 中的 "shims"、C 中的预处理或一般情况下的 "macros"之类的东西?

java - 检测全角和半角的空白 : regex VS Character. isWhitespace()

java - Java 中的 JAR 级(程序集级)类作用域

java - 有没有办法在Intellij IDEA中查看引用的jar(库)的使用情况?

java - Spring MVC - 将值从 jsp 传递到 Controller - HTTP 状态 400 - 客户端发送的请求在语法上不正确

java - 如何控制 JComponent 的工具提示的显示?

java - jar从cmd写入文件但不双击

java - 速度 : Turning off Strict mode in apache velocity