在我的项目中,jersey-core来自许多依赖项。我不知道从哪些人那里。我认为这没关系,因为我认为如果多个依赖关系拉同一个,那么gradle将总是采用更高版本。我错了。
[ERROR] [main] [n/a] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - StandardWrapper.Throwable
java.lang.NoSuchMethodError: com.sun.jersey.core.reflection.ReflectionHelper.getContextClassLoaderPA()Ljava/security/PrivilegedAction;
at com.sun.jersey.spi.scanning.AnnotationScannerListener.<init>(AnnotationScannerListener.java:94) ~[jersey-server-1.19.jar:1.19]
AnnotationScannerListener是1.19,ReflectionHelper是1.1,而ReflectionHelper 1.1中不存在方法getContextClassLoaderPA()
如何强制gradle始终使用更高版本?
我使用intellij。
答案 0 :(得分:1)
默认情况下,gradle应该将最高版本的依赖项添加到类路径中。
您可以强制将依赖项的版本设置为特定版本,如下所示:
configurations.all {
resolutionStrategy {
// force certain versions of dependencies (including transitive)
// *append new forced modules:
force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4'
}
}
此示例直接取自https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html,可能值得一读,以及https://docs.gradle.org/current/userguide/dependency_management.html
另一条建议是,如果你想了解什么是相互冲突的罐子,你可以做到以下几点:
gradle dependencyInsight --dependency $dependencyName --configuration $configurationName
其中$dependencyName
应替换您的依赖项名称(例如asm-all
),而$configurationName
应替换为您要检查的配置名称(例如{ {1}})。这将为您提供由哪些依赖项引入的版本的图表。