在 gradle 中过滤传递依赖关系有多详细? 我正在与 jvm-classpath 进行斗争。在运行时,我们遇到 java.lang.ClassNotFoundException: io.opentelemetry.api.internal.InstrumentationUtil
这个类应该在 opentelemetry-instrumentation-api 中?在什么版本中删除或添加了它?
io.opentelemtry 组有许多子模块,我们的构建中有数百个不同的依赖项。因此,不可能强制使用特定版本,因为这将导致许多依赖项被破坏。
有没有办法对传递依赖项强制进行版本控制? 例如:
问题: 我不能对依赖项(模块 b)设置使用版本 2.7.0 的约束,因为这会导致暂时依赖项(模块 d)的使用中断。另一方面,我不能对依赖项(模块 b)进行限制,即使用版本 1.37.0,因为这将导致临时依赖项(模块 c)的使用中断。
有什么解决办法吗?
这个类应该在 opentelemetry-instrumentation-api 中?在什么版本中删除或添加了它?
io.opentelemetry.api.internal.InstrumentationUtil
首次在 v1.41.0 的 this 提交中添加。如果您遇到运行时问题,那么您的依赖项将被降级到低于 v1.41.0 的版本,从而导致 ClassNotFoundException
。
有什么方法可以强制传递依赖项的版本控制吗?
从技术上讲,您可以在类路径上拥有相同依赖项的多个版本,如this所示,但最终在编译主 Java 代码时,只会出现一个版本。其逻辑在版本冲突解决中进行了解释。
最终,您需要确定您正在使用的所有依赖项或库的最低受支持版本。您可以使用
opentelemetry-bom
对齐所有 OTEL 依赖项,但您再次需要找出适用于所有人的正确版本。
dependencies {
implementation(enforcedPlatform("io.opentelemetry:opentelemetry-bom:1.43.0"))
}