我遇到了一个问题,即我的类路径中出现了同一个类的多个版本。有问题的班级是javax.ws.rs.core.UriBuilder
。我想要使用的版本由javax.ws.rs:javax.ws.rs-api:2.0.1
引入。但是,我们还使用Jira rest客户端库,该库依赖于旧版本的jersey(com.sun.jersey:jersey-core
),其中包含捆绑在其jar中的java.ws包。
以下是构建文件中的示例代码段:
dependencies {
compile 'com.atlassian.jira:jira-rest-java-client-core:2.0.0-m31'
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
compile 'org.glassfish.jersey.core:jersey-client:2.17'
}
我无法删除com.sun.jersey:jersey-core
,因为它在新版本中使用了不同的包名称,并且会在Jira客户端中导致类别def找不到异常。
据我所知,我现在的选择是:
javax.ws
包裹。我想继续使用更新版的球衣,所以#2将是我理想的解决方案,但我不确定它是否可能。有谁知道如何去做?如果那是不可能的,我会接受其他建议。
答案 0 :(得分:6)
您可以排除这样的传递依赖模块:
compile ('org.glassfish.jersey.core:jersey-client:2.17') {
exclude group: 'javax.ws.rs'
exclude module: 'javax.ws.rs-api'
}
参考:50.4.7 here
答案 1 :(得分:1)
我发现com.sun.jersey:jersey-core:1.19没有捆绑javax.ws.rs类文件,而是将它们列为编译时依赖项。将此代码段添加到我的build.gradle中可以解决问题。
configurations.all {
resolutionStrategy {
// For a version that doesn't package javax.ws
force 'com.sun.jersey:jersey-core:1.19'
}
}