这听起来像是一个普通问题所以我想知道是否有一般建议的方法来处理这些情况,无论使用何种构建/依赖管理工具(在我的情况下为Gradle)。无论构建工具如何,我都可以想象这个问题,即使在一个小项目中,手动处理少数依赖项,而且只使用jar
命令使用Java构建。
我的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
及其home page明确提到velocity-dep-1.4.jar
必须在类路径中。)
我想知道如何避免在我的类路径中使用两个Velocity版本的JAR,这可能是我看到的奇怪行为的原因,并且在任何情况下听起来都不是一个好主意。< / p>
我将尝试使ReportNG使用Velocity 1.7而不是1.4但它不一定有效,如果有一种处理这些情况的干净方法,我想避免这样做。
答案 0 :(得分:1)
虽然您可以将两个JAR添加到类路径中,但默认情况下Java将使用它找到的包含给定类的第一个JAR,这取决于您构建类路径的方式可能会对您的系统产生不良影响。
为了避免这种情况,Gradle(就像之前的Maven一样)在构建时解决依赖冲突。
使用Gradle时,默认的dependency resolution使用最新的依赖关系,在您的情况下意味着速度为1.7。
使用Maven dependency resolution是通过使用与项目最接近的依赖项来实现的,在您的情况下,当您的项目声明对Velocity 1.7的依赖时,意味着它将是将使用的版本。
使用这两种方法,您的系统(或更确切地说是ReportNG)是否适用于Velocity 1.7,由您来测试。